cpiParseBuffer

Scopo

Prepara un programma per l'analisi di un nuovo oggetto messaggio. Viene richiamata la prima volta (per ogni messaggio) che il flusso di messaggi fa sì che il contenuto dei messaggi venga analizzato. Questa funzione viene richiamata per ciascun programma di analisi definito dall'utente che viene utilizzato per analizzare un determinato formato del messaggio per:

Il parametro offset indica l'offset all'interno del buffer di messaggi da cui deve iniziare l'analisi. Ciò è necessario in quanto un altro programma di analisi potrebbe disporre di una parte precedente del messaggio (ad esempio, un'intestazione MQMD analizzata dal programma di analisi interno del broker dei messaggi). L'offset deve essere positivo e inferiore alla dimensione del buffer. E' consigliabile che la funzione di implementazione verifichi la validità dell'offset in quanto ciò potrebbe migliorare la determinazione dei problemi se un programma di analisi precedente è in errore.

Il programma di analisi deve restituire la dimensione del buffer rimanente per il quale assume la proprietà. Questa deve essere minore o uguale alla dimensione del buffer meno l'offset attuale.

Un programma di analisi non deve tentare di analizzare altre parti della struttura ad albero dell'elemento di sintassi; ad esempio, navigando nell'elemento root e su un altro branch. Ciò può provocare risultati imprevisti.

Se nella struttura CPI_VFT viene fornita questa funzione di implementazione, non è possibile specificare cpiParseBufferEncoded()cpiParseBufferFormatted() in quanto la funzione cpiDefineParserClass() avrà esito negativo e viene restituito il codice di ritorno CCI_INVALID_IMPL_FUNCTION.

Definito in Tipo Membro
CPI_VFT Condizionale iFpParseBuffer

Sintassi

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

Parametri

parser
L'indirizzo dell'oggetto programma di analisi (input).
context
L'indirizzo del contesto che l'oggetto programma di analisi possiede (input).
offset
L'offset nel buffer di messaggi da cui deve iniziare l'analisi (input).

Valori di restituzione

La dimensione (in byte) della parte rimanente del buffer di messaggi per il quale il programma di analisi assume la proprietà.

Esempio

Questo esempio è estratto dal file del programma di analisi di esempio BipSampPluginParser.c (da riga 428 a 466):

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

  /* Fornisce un puntatore nel buffer di messaggi e imposta l'offset */
  pc->iBuffer = (void *)cpiBufferPointer(&rc, parser);
  pc->iIndex = 0;

  /* Salva la dimensione del buffer */
  pc->iSize = cpiBufferSize(&rc, parser);

  /* Prepara il primo byte nel flusso */
  pc->iCurrentCharacter = cpiBufferByte(&rc, parser, pc->iIndex);

  /* Imposta l'elemento attuale sull'elemento root */
  pc->iCurrentElement = cpiRootElement(&rc, parser);

  /* Reimposta l'indicatore per garantire che l'analisi venga reimpostata correttamente */
  pc->iInTag = 0;

  if (pc->trace) {
    fprintf(pc->tracefile, "PLUGIN: <- cpiParseBuffer() 
    retvalue=%d\n", pc->iSize);
    fflush(pc->tracefile);
  }
Concetti correlati
Nodi di input definiti dall'utente
Estensioni definite dall'utente
Attività correlate
Creazione di un programma di analisi in C
Riferimenti correlati
cpiParseBufferEncoded
cpiParseBufferFormatted
Funzioni di implementazione del programma di analisi in C
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
as08150_