cpiParseBuffer

Finalidad

Prepara un analizador para analizar un nuevo objeto de mensaje. Se invoca la primera vez (para cada mensaje) que el flujo de mensajes hace que se analice el contenido del mensaje. En cada analizador definido por el usuario que se utiliza para analizar un formato de mensaje determinado se invoca esta función para:

El parámetro offset indica el desplazamiento en el almacenamiento intermedio de mensaje donde debe comenzar el análisis. Esto es necesario porque es posible que otro analizador sea propietario de una parte anterior del mensaje (por ejemplo, el analizador interno del intermediario de mensajes analizará una cabecera MQMD). El desplazamiento debe ser positivo y debe ser menor que el tamaño del almacenamiento intermedio. Se recomienda que la función de implementación verifique que el desplazamiento sea válido, porque esto puede mejorar la determinación de problemas si se produce un error en un analizador anterior.

El analizador debe devolver el tamaño del almacenamiento intermedio restante del que se convierte en propietario. Este tamaño debe ser menor o igual que el del almacenamiento intermedio menos el desplazamiento actual.

Un analizador no debe intentar producir el análisis de otras partes del árbol de elementos de sintaxis, por ejemplo navegando al elemento raíz y a otra rama. Esto puede producir resultados imprevisibles.

Si esta función de implementación se proporciona en la estructura CPI_VFT, no se puede especificar cpiParseBufferEncoded() ni cpiParseBufferFormatted(), porque la función cpiDefineParserClass() fallará con un código de retorno CCI_INVALID_IMPL_FUNCTION.

Definida en Tipo Miembro
CPI_VFT Condicional iFpParseBuffer

Sintaxis

int cpiParseBuffer(
  CciParser*  parser,
  CciContext* context,
  int offset);

Parámetros

parser
Dirección del objeto de analizador (entrada).
context
Dirección del contexto propiedad del objeto analizador (entrada).
offset
Desplazamiento en el almacenamiento intermedio de mensaje en el que debe comenzar el análisis (entrada).

Valores de retorno

Tamaño (en bytes) de la parte restante del almacenamiento intermedio de mensaje del que el analizador se convierte en propietario.

Ejemplo

Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c (líneas 428 a 466):

int cpiParseBuffer(
  CciParser*  parser,
  CciContext* context,
  int offset,
){
  PARSER_CONTEXT_ST* pc = (PARSER_CONTEXT_ST *)context ;
  int                rc;

  /* Obtener un puntero al almacenamiento intermedio de mensaje y establecer el desplazamiento */
  pc->iBuffer = (void *)cpiBufferPointer(&rc, parser);
  pc->iIndex = 0;

  /* Guardar el tamaño del almacenamiento intermedio */
  pc->iSize = cpiBufferSize(&rc, parser);

  /* Cargar el primer byte en la corriente de datos */
  pc->iCurrentCharacter = cpiBufferByte(&rc, parser, pc->iIndex);

  /* Establecer el elemento actual en el elemento raíz */
  pc->iCurrentElement = cpiRootElement(&rc, parser);

  /* Restablecer el distintivo para asegurar que el análisis se restablece correctamente */
  pc->iInTag = 0;

  if (pc->trace) {
    fprintf(pc->tracefile, "PLUGIN: <- cpiParseBuffer() 
    retvalue=%d\n", pc->iSize);
    fflush(pc->tracefile);
  }
Conceptos relacionados
Nodos de entrada definidos por el usuario
Extensiones definidas por el usuario
Tareas relacionadas
Creación de un analizador en C
Referencia relacionada
cpiParseBufferEncoded
cpiParseBufferFormatted
Funciones de implementación de analizador en C
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
as08150_