cpiParseBuffer

Finalidad

Esta función prepara a 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 de un mensaje. Esta función se invoca para que cada analizador de plug-in utilizado para analizar un formato de mensaje determinado lleve a cabo estas acciones:

El parámetro offset indica el desplazamiento en el almacenamiento intermedio de mensajes en donde va a comenzar el análisis. Esta indicación es necesaria, ya que otro analizador puede ser propietario de una parte anterior del mensaje (por ejemplo, el analizador interior del intermediario de mensajes habrá analizado una cabecera MQMD). El desplazamiento debe ser positivo y su tamaño debe ser inferior al del almacenamiento intermedio. Se recomienda que la función de implementación verifique que el desplazamiento sea válido, dado que esto puede mejorar la determinación de problemas si un analizador anterior contiene algún error.

El plug-in debe devolver el tamaño del almacenamiento intermedio restante del que es propietario. Este tamaño debe ser inferior o igual al tamaño del almacenamiento intermedio menos el desplazamiento actual.

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

Si esta función de implementación se proporciona en la estructura CPI_VFT, no podrá especificarse ni cpiParseBufferEncoded() ni cpiParseBufferFormatted(), porque la función cpiDefineParserClass() fallará con un código de retorno de 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 de plug-in (entrada).
offset
Desplazamiento en el almacenamiento intermedio de mensajes en donde va a comenzar el análisis (entrada).

Valores de retorno

El tamaño (en bytes) de la parte restante del almacenamiento intermedio de mensajes de la que se apropia el analizador.

Ejemplo

Este ejemplo se ha tomado del archivo de analizador de ejemplo BipSampPluginParser.c (de la línea 428 a la 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 mensajes 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);

  /* Preparar el primer byte de 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 distintivo para garantizar que el análisis esté      */
  /* restablecido 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