cpiParseBuffer

Zweck

Bereitet einen Parser auf die Auswertung eines neuen Nachrichtenobjekts vor. Die Funktion wird zum ersten Mal (für jede Nachricht) aufgerufen, wenn der Nachrichtenfluss die Ausertung des Nachrichteninhalts verursacht. Jeder benutzerdefinierte Parser, der für die Syntaxanalyse eines bestimmten Nachrichtenformats verwendet wird, lässt diese Funktion aufrufen, um folgende Vorgänge auszuführen:

Der Parameter offset gibt den Offset im Nachrichtenpuffer an, wo mit der Analyse begonnen werden soll. Dies ist erforderlich, da ein weiterer Parser möglicherweise Eigner eines vorherigen Teils der Nachricht ist (z. B. ein MQMD-Header wird vom internen Parser des Nachrichtenbrokers ausgewertet). Der Offset muss positiv und kleiner als die Puffergröße sein. Es wird empfohlen, dass die Implementierungsfunktion die Gültigkeit des Offset überprüft, da dies die Fehlerbestimmung im Falle eines Fehlers bei einem vorherigen Parser verbessern könnte.

Der Parser muss die Größe des verbleibenden Puffers zurückgeben, für den er das Eigentumsrecht übernimmt. Diese muss kleiner-gleich der Größe des Puffers abzüglich des aktuellen Offset sein.

Ein Parser darf nicht versuchen, die Auswertung anderer Teile der Syntaxelementbaumstruktur zu verursachen, z. B. durch Navigation zum Stammelement und zu einem anderen Ast. Dies kann zu unvorhersehbaren Ergebnissen führen.

Wenn diese Implementierungsfunktion in der Struktur CPI_VFT bereitgestellt wird, kann weder cpiParseBufferEncoded() noch cpiParseBufferFormatted() angegeben werden, da die Funktion cpiDefineParserClass() mit dem Rückkehrcode CCI_INVALID_IMPL_FUNCTION fehlschlägt.

Definiert in Typ Mitglied
CPI_VFT Bedingt iFpParseBuffer

Syntax

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

Parameter

parser
Die Adresse des Parserobjekts (Eingabe).
context
Die Adresse des Kontextes des Parserobjekts (Eingabe).
offset
Die relative Position im Nachrichtenpuffer, bei der mit der Analyse begonnen wird (Eingabe).

Rückgabewerte

Die Größe (in Byte) des restlichen Teils des Nachrichtenpuffers, für den der Parser das Eigentumsrecht übernimmt.

Beispielprogramm

Dieses Beispiel stammt aus der Beispiel-Parserdatei BipSampPluginParser.c (Zeile 428 bis 466):

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

  /* Get a pointer to the message buffer and set the offset */
  pc->iBuffer = (void *)cpiBufferPointer(&rc, parser);
  pc->iIndex = 0;

  /* Größe des Puffers speichern */
  pc->iSize = cpiBufferSize(&rc, parser);

  /* Ersten Byte im Datenstrom einsetzen */
  pc->iCurrentCharacter = cpiBufferByte(&rc, parser, pc->iIndex);

  /* Aktuelles Element für das Stammelement festlegen */
  pc->iCurrentElement = cpiRootElement(&rc, parser);

  /* Flag zurücksetzen, um sicherzustellen, dass die Analyse korrekt zurückgesetzt wird */
  pc->iInTag = 0;

  if (pc->trace) {
    fprintf(pc->tracefile, "PLUGIN: <- cpiParseBuffer()
    retvalue=%d\n", pc->iSize);
    fflush(pc->tracefile);
  }
Zugehörige Konzepte
Benutzerdefinierte Empfangsknoten
Benutzerdefinierte Erweiterungen
Zugehörige Tasks
Parser in C erstellen
Zugehörige Verweise
cpiParseBufferEncoded
cpiParseBufferFormatted
C-Parser-Implementierungsfunktionen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
as08150_