cpiParseBuffer

Zweck

Diese Funktion bereitet einen Parser für die Syntaxanalyse eines neuen Nachrichtenobjekts vor. Sie wird (für jede Nachricht) aufgerufen, wenn der Nachrichtenfluss zum ersten Mal die Syntaxanalyse des Nachrichteninhalts veranlasst. 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 die relative Position im Nachrichtenpuffer an, an der die Syntaxanalyse beginnen soll. Dies ist erforderlich, da möglicherweise ein anderer Parser Eigner eines vorherigen Teils der Nachricht ist (z. B. kann ein MQMD-Header vom internen Parser des Nachrichtenbrokers analysiert worden sein). Die relative Position muss positiv und kleiner als die Größer des Puffers sein. Es wird empfohlen, die Implementierungsfunktion überprüfen zu lassen, ob die relative Position gültig ist, da dies die Fehlerermittlung erleichtern könnte, wenn bei einem vorherigen Parser ein Fehler auftritt.

Der Parser muss die Größe des verbleibenden Puffers zurückgeben, für den er das Eigentumsrecht übernimmt. Dieser Wert muss kleiner-gleich der Größe des Puffers minus der aktuellen relativen Position sein.

Ein Parser darf nicht versuchen, die Syntaxanalyse anderer Teile der Syntaxelementstruktur beispielsweise durch Navigieren zum Stammelement und zu einer anderen Verzweigung zu veranlassen. 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, an der die Syntaxanalyse beginnen soll (Eingabe).

Rückgabewerte

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

Beispiel

Dieses Beispiel wurde aus der Parser-Beispieldatei BipSampPluginParser.c entnommen (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;
/* Save size of the buffer */
pc->iSize = cpiBufferSize(&rc, parser);
/* Prime the first byte in the stream */
pc->iCurrentCharacter = cpiBufferByte(&rc, parser, pc->iIndex);
/* Set the current element to the root element */
pc->iCurrentElement = cpiRootElement(&rc, parser);
/* Reset flag to ensure parsing is reset correctly */
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: 18.05.2006
as08150_