cpiParseBuffer

Propósito

Prepara um analisador para analisar um novo objeto de mensagem. É chamada na primeira vez (para cada mensagem) que o fluxo de mensagens faz com que o conteúdo da mensagem seja analisado. Cada analisador definido pelo usuário utilizado para analisar um formato de mensagem específico tem essa função chamada para:

O parâmetro offset indica o deslocamento dentro do buffer de mensagem onde a análise deve começar. Isso é necessário porque outro analisador pode ser proprietário de uma parte anterior da mensagem (por exemplo, um cabeçalho MQMD que foi analisado pelo analisador interno do intermediário). O deslocamento deve ser positivo e menor que o tamanho do buffer. Recomenda-se que a função de implementação verifique se o deslocamento é válido, já que isso pode melhorar a determinação de problemas se um analisador anterior tiver erros.

O analisador deve retornar o tamanho do buffer restante para o qual assume o direito à propriedade. Este deve ser menor que ou igual ao tamanho do buffer menos o deslocamento atual.

Um analisador não deve tentar causar a análise de outras partes da árvore de elementos de sintaxe, por exemplo, navegando até o elemento raiz e para outra ramificação. Isso pode causar resultados imprevisíveis.

Se essa função de implementação for fornecida na estrutura CPI_VFT, nem cpiParseBufferEncoded() nem cpiParseBufferFormatted() podem ser especificados, porque a função cpiDefineParserClass() falhará com um código de retorno de CCI_INVALID_IMPL_FUNCTION.

Definido em Type Membro
CPI_VFT Condicional iFpParseBuffer

Sintaxe

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

Parâmetros

parser
O endereço do objeto analisador (entrada).
context
O endereço do contexto de propriedade do objeto analisador (entrada).
offset
O deslocamento no buffer de mensagem no qual a análise deve começar (entrada).

Valores de Retorno

O tamanho (em bytes) da parte restante do buffer de mensagem para o qual o analisador assume a propriedade.

Amostra

Este exemplo foi tirado do arquivo de amostra de analisador BipSampPluginParser.c (linhas 428 a 466):

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

    /* Obter um ponteiro para o buffer de mensagem e definir o
deslocamento */
  pc->iBuffer = (void *)cpiBufferPointer(&rc, parser);
  pc->iIndex = 0;

    /* Salvar o tamanho do buffer */
  pc->iSize = cpiBufferSize(&rc, parser);

    /* Obter o primeiro byte no fluxo */
  pc->iCurrentCharacter = cpiBufferByte(&rc, parser, pc->iIndex);

    /* Definir o elemento atual como o elemento raiz */
  pc->iCurrentElement = cpiRootElement(&rc, parser);

    /* Reconfigurar o sinalizador para garantir que a análise
seja redefinida corretamente */
  pc->iInTag = 0;

  if (pc->trace) {
    fprintf(pc->tracefile, "PLUGIN: <- cpiParseBuffer()
    retvalue=%d\n", pc->iSize);
    fflush(pc->tracefile);
  }
Conceitos relacionados
Nós de Entrada Definidos pelo Usuário
Visão Geral de Extensões Definidas pelo Usuário
Tarefas relacionadas
Criando um Analisador Definido pelo Usuário
Referências relacionadas
cpiParseBufferEncoded
cpiParseBufferFormatted
Funções de Implementação do Analisador C
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última atualização : 2009-02-13 16:13:09

as08150_