Diese Funktion ist eine Erweiterung der Funktionalität, die von der vorhandenen Implementierungsfunktion cpiParseBuffer() zur Verfügung gestellt wird, welche die Verschlüsselung und den codierten Zeichensatz bereitstellt, in dem die Eingabenachricht dargestellt wird. Wenn diese Implementierungsfunktion in der CPI_VFT-Struktur bereitgestellt wird, kann weder cpiParseBuffer() noch cpiParseBufferFormatted() angegeben werden, da ansonsten die Funktion cpiDefineParserClass() einen Fehler mit einem Rückkehrcode von CCI_INVALID_IMPL_FUNCTION aufweisen wird.
Definiert in | Typ | Mitglied |
CPI_VFT | Bedingt | iFpParseBufferEncoded |
int cpiParseBufferEncoded( CciParser* parser, CciContext* context, int encoding, int ccsid);
Die Größe (in Byte) des restlichen Teils des Nachrichtenpuffers, für den der Parser das Eigentumsrecht übernimmt.
Dieses Beispiel stammt aus der Beispiel-Parserdatei BipSampPluginParser.c (Zeile 428 bis 466):
int cpiParseBufferEncoded( CciParser* parser, CciContext* context, int encoding, int ccsid ){ 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; /* Format des Puffers speichern */ pc->iEncoding = encoding; pc->iCcsid = ccsid; /* 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: <- cpiParseBufferEncoded() retvalue=%d\n", pc->iSize); fflush(pc->tracefile); }