EXTXMLMETHOD int rtSaxReportUnexpAttrs (OSCTXT* pctxt, const OSUTF8CHAR* const* attrs, const char* typeName) { size_t i = 0; int stat = 0; if (attrs == 0) return 0; for (;attrs[i] != 0; i += 2) { if (rtXmlStrCmpAsc (attrs[i], "xsi:nil") || rtXmlStrCmpAsc (attrs[i], "xsi:type") || rtXmlStrnCmpAsc (attrs[i], "xmlns", 5) || rtXmlStrnCmpAsc (attrs[i], "SOAP-ENV:", 9)) { /* just ignore for now */ continue; } stat = RTERR_INVATTR; if (LOG_SAXERRNEW2(pctxt, stat, rtxErrAddStrParm (pctxt, typeName), rtxErrAddStrParm (pctxt, (const char*)attrs[i])) != stat) break; } return stat; }
int berDecStrmUInt64 (OSCTXT *pctxt, OSUINT64 *object_p, ASN1TagType tagging, int length) { register int stat = 0; OSOCTET tmpbuf[16]; OSUINT32 bufidx = 0; OSOCTET ub; /* unsigned */ OSBOOL negative; if (tagging == ASN1EXPL) { stat = berDecStrmMatchTag (pctxt, ASN_ID_INT, &length, TRUE); /* RTERR_IDNOTFOU will be logged later, by the generated code, or reset by rtxErrReset (for optional seq elements). */ if (stat != 0) return (stat == RTERR_IDNOTFOU) ? stat : LOG_RTERR (pctxt, stat); } /* Make sure integer will fit in target variable (ED, 4/22/02) */ if (length > (sizeof(OSUINT64) + 1)) return LOG_RTERR (pctxt, RTERR_TOOBIG); else if (length < 0) return LOG_RTERR (pctxt, ASN_E_INVLEN); /* note: indef len not allowed */ /* Read encoded integer contents into memory */ stat = rtxStreamRead (pctxt, tmpbuf, length); if (stat < 0) return LOG_RTERR (pctxt, stat); if (length == (sizeof(OSUINT64) + 1)) { /* first byte must be zero */ if (0 != tmpbuf[0]) return LOG_RTERR (pctxt, RTERR_TOOBIG); } /* Check for negative value */ negative = ((tmpbuf[0] & 0x80) != 0); /* Now use unsigned bytes to add in the rest of the integer */ *object_p = 0; while (length > 0) { ub = tmpbuf[bufidx++]; *object_p = (*object_p * 256) + ub; length--; } if (negative) { OSINT64 signedValue = (OSINT64) *object_p; if (signedValue >= 0) signedValue = -signedValue; rtxErrAddStrParm (pctxt, "_uint64"); rtxErrAddInt64Parm (pctxt, signedValue); return LOG_RTERRNEW (pctxt, RTERR_CONSVIO); } return 0; }
int XmlEnc_InvoiceType (OSCTXT* pctxt, InvoiceType* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (0 != elemName) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, TRUE); if (stat != 0) return LOG_RTERR (pctxt, stat); } { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://www.sun.com/schema/spidermarkexpress/sm-inv")); /* encode header */ stat = XmlEnc_InvoiceHeaderType (pctxt, &pvalue->header , OSUTF8("Header"), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); /* encode lineItem_list */ if (!(pvalue->lineItem_list.count >= 1U)) { rtxErrAddStrParm (pctxt, "InvoiceType.lineItem_list.count"); rtxErrAddIntParm (pctxt, (int)pvalue->lineItem_list.count); return LOG_RTERR (pctxt, RTERR_CONSVIO); } { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://www.sun.com/schema/spidermarkexpress/sm-inv")); { OSRTDListNode* pnode = pvalue->lineItem_list.head; while (0 != pnode) { stat = XmlEnc_InvoiceLineItemType (pctxt, ((InvoiceLineItemType*)pnode->data), OSUTF8("LineItem"), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); pnode = pnode->next; }} nsPrefix = savedPrefix; } /* encode summary */ stat = XmlEnc_InvoiceSummaryType (pctxt, &pvalue->summary , OSUTF8("Summary"), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
int berDecStrmMatchEOC (OSCTXT* pctxt) { int stat; OSOCTET lbuf[2]; stat = rtxStreamDirectBufCheck (pctxt); if (stat < 0) return LOG_RTERR (pctxt, stat); stat = rtxStreamMark (pctxt, 8); if (stat < 0) return LOG_RTERR (pctxt, stat); stat = rtxStreamRead (pctxt, lbuf, 2); if (stat < 0) return LOG_RTERR (pctxt, stat); if (!(lbuf[0] == 0 && lbuf[1] == 0)) { rtxStreamReset (pctxt); rtxErrAddStrParm (pctxt, "EOC"); rtxErrAddStrParm (pctxt, "non-EOC"); return LOG_RTERR (pctxt, RTERR_IDNOTFOU); } return 0; }
EXTERN int asn1E_InvoiceType (OSCTXT* pctxt, InvoiceType *pvalue, ASN1TagType tagging) { int ll; int ll0 = 0; int ll1 = 0; OSRTDListNode* pnode2; int ll2 = 0; /* encode summary */ ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2, asn1E_InvoiceSummaryType (pctxt, &pvalue->summary, ASN1IMPL)); if (ll < 0) return LOG_RTERR (pctxt, ll); ll1 += ll; /* encode lineItem_list */ if (!(pvalue->lineItem_list.count >= 1U)) { rtxErrAddStrParm (pctxt, "InvoiceType.lineItem_list.count"); rtxErrAddIntParm (pctxt, (int)pvalue->lineItem_list.count); return LOG_RTERR (pctxt, RTERR_CONSVIO); } pnode2 = pvalue->lineItem_list.tail; while (0 != pnode2) { ll = asn1E_InvoiceLineItemType (pctxt, ((InvoiceLineItemType*)pnode2->data), ASN1EXPL); if (ll < 0) return LOG_RTERR (pctxt, ll); ll2 += ll; pnode2 = pnode2->prev; } ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1, ll2); if (ll < 0) return LOG_RTERR (pctxt, ll); else { ll1 += ll; ll2 = 0; } /* encode header */ ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0, asn1E_InvoiceHeaderType (pctxt, &pvalue->header, ASN1IMPL)); if (ll < 0) return LOG_RTERR (pctxt, ll); ll1 += ll; ll0 += ll1; if (tagging == ASN1EXPL) ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0); return (ll0); }
int Ns11_Additive_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, Ns11_Additive* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, Ns11_Additive_ENUMTAB, Ns11_Additive_ENUMTABSIZE); if (idx >= 0) { *pvalue = (Ns11_Additive)Ns11_Additive_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int Registration_Cause_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, Registration_Cause* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, Registration_Cause_ENUMTAB, Registration_Cause_ENUMTABSIZE); if (idx >= 0) { *pvalue = (Registration_Cause)Registration_Cause_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int CN_DomainIndicator_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, CN_DomainIndicator* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, CN_DomainIndicator_ENUMTAB, CN_DomainIndicator_ENUMTABSIZE); if (idx >= 0) { *pvalue = (CN_DomainIndicator)CN_DomainIndicator_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int CauseRadioNetwork_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, CauseRadioNetwork* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, CauseRadioNetwork_ENUMTAB, CauseRadioNetwork_ENUMTABSIZE); if (idx >= 0) { *pvalue = (CauseRadioNetwork)CauseRadioNetwork_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int Values_format_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, Values_format* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, Values_format_ENUMTAB, Values_format_ENUMTABSIZE); if (idx >= 0) { *pvalue = (Values_format)Values_format_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int XmlEnc_Ns1_Min_width (OSCTXT* pctxt, Ns1_Min_width* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (0 != elemName) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, TRUE); if (stat != 0) return LOG_RTERR (pctxt, stat); } { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0")); switch (pvalue->t) { case 1: /* encode alt */ stat = rtXmlEncUTF8Str (pctxt, pvalue->u.alt, 0, 0); if (stat != 0) return LOG_RTERR (pctxt, stat); break; case 2: /* encode alt_1 */ stat = rtXmlEncUTF8Str (pctxt, pvalue->u.alt_1, 0, 0); if (stat != 0) return LOG_RTERR (pctxt, stat); break; default: { char buf[40]; os_snprintf (buf, 40, "%d", pvalue->t); return LOG_RTERRNEW1 (pctxt, RTERR_INVOPT, rtxErrAddStrParm (pctxt, buf)); } } nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
int GAML_integrity_algorithm_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, GAML_integrity_algorithm* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, GAML_integrity_algorithm_ENUMTAB, GAML_integrity_algorithm_ENUMTABSIZE); if (idx >= 0) { *pvalue = (GAML_integrity_algorithm) GAML_integrity_algorithm_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int AnimateColor_color_interpolation_direction_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, AnimateColor_color_interpolation_direction* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, AnimateColor_color_interpolation_direction_ENUMTAB, AnimateColor_color_interpolation_direction_ENUMTABSIZE); if (idx >= 0) { *pvalue = (AnimateColor_color_interpolation_direction) AnimateColor_color_interpolation_direction_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int GeographicalCoordinates_latitudeSign_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, GeographicalCoordinates_latitudeSign* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, GeographicalCoordinates_latitudeSign_ENUMTAB, GeographicalCoordinates_latitudeSign_ENUMTABSIZE); if (idx >= 0) { *pvalue = (GeographicalCoordinates_latitudeSign) GeographicalCoordinates_latitudeSign_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int AltitudeAndDirection_directionOfAltitude_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, AltitudeAndDirection_directionOfAltitude* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, AltitudeAndDirection_directionOfAltitude_ENUMTAB, AltitudeAndDirection_directionOfAltitude_ENUMTABSIZE); if (idx >= 0) { *pvalue = (AltitudeAndDirection_directionOfAltitude) AltitudeAndDirection_directionOfAltitude_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int Access_stratum_release_indicator_ToEnum (OSCTXT* pctxt, const OSUTF8CHAR* value, Access_stratum_release_indicator* pvalue) { OSUINT32 valueLen = rtxUTF8LenBytes (value); OSINT32 idx = rtxLookupEnum (value, valueLen, Access_stratum_release_indicator_ENUMTAB, Access_stratum_release_indicator_ENUMTABSIZE); if (idx >= 0) { *pvalue = (Access_stratum_release_indicator) Access_stratum_release_indicator_ENUMTAB[idx].value; return 0; } else { rtxErrAddStrParm (pctxt, (const char*)value); return LOG_RTERR (pctxt, RTERR_INVENUM); } }
int XmlEnc_Detail (OSCTXT* pctxt, Detail* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (0 != elemName) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, FALSE); if (stat != 0) return LOG_RTERR (pctxt, stat); } /* add attributes */ { OSRTDListNode* pnode = pvalue->attr.head; size_t len; while (0 != pnode) { len = rtxUTF8LenBytes (pnode->data); stat = rtxCheckBuffer (pctxt, len + 1); if (stat != 0) return LOG_RTERR (pctxt, stat); OSRTPUTCHAR (pctxt, ' '); OSRTMEMCPY (pctxt, pnode->data, len); pnode = pnode->next; }} OSRTSAFEPUTCHAR (pctxt, '>'); pctxt->flags &= ~OSTERMSTART; pctxt->state = OSXMLSTART; { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://schemas.xmlsoap.org/soap/envelope/")); /* encode elem_list */ { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://schemas.xmlsoap.org/soap/envelope/")); { OSRTDListNode* pnode = pvalue->elem_list.head; while (0 != pnode) { if (((OSXSDAny*)pnode->data)->t == OSXSDAny_xmlText) { stat = rtXmlEncAnyStr (pctxt, ((OSXSDAny*)pnode->data)->u.xmlText , OSUTF8(""), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); } else { char buf[40]; os_snprintf (buf, 40, "%d", ((OSXSDAny*)pnode->data)->t); rtxErrAddStrParm (pctxt, buf); return LOG_RTERR (pctxt, RTERR_INVOPT); } pnode = pnode->next; }} nsPrefix = savedPrefix; } nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
EXTERN int asn1D_InvoiceType (OSCTXT* pctxt, InvoiceType *pvalue, ASN1TagType tagging, int length) { int stat = 0; int reqcnt = 0; ASN1CCB ccb; if (tagging == ASN1EXPL) { stat = xd_match1 (pctxt, 0x10, &length); if (stat != 0) return LOG_RTERR (pctxt, stat); } /* decode SEQUENCE */ ccb.len = length; ccb.ptr = OSRTBUFPTR(pctxt); ccb.seqx = 0; while (!XD_CHKEND (pctxt, &ccb)) { switch (ccb.seqx) { case 0: /* decode header */ if (XD_PEEKTAG (pctxt, 0x80)) { stat = xd_Tag1AndLen (pctxt, &length); if (stat != 0) return LOG_RTERR (pctxt, stat); stat = asn1D_InvoiceHeaderType (pctxt, &pvalue->header, ASN1IMPL, length); if (stat == 0) { if (length == ASN_K_INDEFLEN) { if (XD_MATCHEOC (pctxt)) XD_BUMPIDX (pctxt, 2); else return LOG_RTERR (pctxt, ASN_E_INVLEN); } } else return LOG_RTERR (pctxt, stat); reqcnt++; } break; case 1: /* decode lineItem_list */ if (XD_PEEKTAG (pctxt, 0x81)) { stat = xd_Tag1AndLen (pctxt, &length); if (stat != 0) return LOG_RTERR (pctxt, stat); /* decode inline SEQUENCE OF type */ { int stat = 0; InvoiceLineItemType* pdata2; OSRTDListNode* pnode; ASN1CCB ccb; /* decode SEQUENCE OF or SET OF */ rtxDListInit (&pvalue->lineItem_list); ccb.len = length; ccb.ptr = OSRTBUFPTR(pctxt); while (!XD_CHKEND (pctxt, &ccb)) { rtxDListAllocNodeAndData (pctxt, InvoiceLineItemType, &pnode, &pdata2); if (pnode == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_InvoiceLineItemType (pdata2); stat = asn1D_InvoiceLineItemType (pctxt, pdata2, ASN1EXPL, length); if (stat != 0) return LOG_RTERR (pctxt, stat); rtxDListAppendNode (&pvalue->lineItem_list, pnode); } if (!(pvalue->lineItem_list.count >= 1U)) { rtxErrAddStrParm (pctxt, "InvoiceType.lineItem_list.count"); rtxErrAddIntParm (pctxt, (int)pvalue->lineItem_list.count); return LOG_RTERR (pctxt, RTERR_CONSVIO); } } if (stat == 0) { if (length == ASN_K_INDEFLEN) { if (XD_MATCHEOC (pctxt)) XD_BUMPIDX (pctxt, 2); else return LOG_RTERR (pctxt, ASN_E_INVLEN); } } else return LOG_RTERR (pctxt, stat); reqcnt++; } break; case 2: /* decode summary */ if (XD_PEEKTAG (pctxt, 0x82)) { stat = xd_Tag1AndLen (pctxt, &length); if (stat != 0) return LOG_RTERR (pctxt, stat); stat = asn1D_InvoiceSummaryType (pctxt, &pvalue->summary, ASN1IMPL, length); if (stat == 0) { if (length == ASN_K_INDEFLEN) { if (XD_MATCHEOC (pctxt)) XD_BUMPIDX (pctxt, 2); else return LOG_RTERR (pctxt, ASN_E_INVLEN); } } else return LOG_RTERR (pctxt, stat); reqcnt++; } break; default: { ASN1TAG tag; int len; stat = xd_tag_len (pctxt, &tag, &len, 0); if (stat != 0) return LOG_RTERR (pctxt, stat); switch (tag) { case (TM_CTXT|TM_CONS|0): case (TM_CTXT|TM_CONS|1): case (TM_CTXT|TM_CONS|2): stat = RTERR_SEQORDER; break; default: stat = RTERR_SEQOVFLW; break; }} } if (stat != 0) return LOG_RTERR (pctxt, stat); else ccb.seqx++; } if (reqcnt < 3) { return LOG_RTERR (pctxt, RTERR_SETMISRQ); } if (tagging == ASN1EXPL && ccb.len == ASN_K_INDEFLEN) { if (XD_MATCHEOC (pctxt)) XD_BUMPIDX (pctxt, 2); else return LOG_RTERR (pctxt, ASN_E_INVLEN); } return (stat); }
/* * Starts parsing. The XML data being parsed should be set either set as * a buffer in OSCTXT (pctxt->buffer) or read from its stream (pctxt->pStream). */ int rtSaxCParse (OSXMLREADER* pReader) { long len; enum XML_Status stat = XML_STATUS_OK; struct OSRTSTREAM* pStream; XMLReaderImpl* readerImpl = (XMLReaderImpl*)(void*)pReader; OSCTXT* pctxt; OSSAXHandlerBase* pSaxBase; if (pReader == 0 || pReader->pctxt == 0 || readerImpl->parser == 0) return RTERR_NOTINIT; pctxt = pReader->pctxt; pStream = pctxt->pStream; rtxErrReset (pctxt); pSaxBase = (OSSAXHandlerBase*)readerImpl->userData; if (pStream == 0) { /* stream is not set - parse just a buffer */ stat = XML_Parse (readerImpl->parser, (char*)OSRTBUFPTR(pctxt), (int)pctxt->buffer.size, TRUE); return (stat == XML_STATUS_ERROR) ? RTERR_XMLPARSE : 0; } else { /* read from stream and parse */ do { void* pbuf; XML_Bool isFinal; /* get the buffer to read in */ pbuf = XML_GetBuffer (readerImpl->parser, XML_BUF_SIZE); /* read data to the buffer */ len = rtxStreamRead (pctxt, (OSOCTET*)pbuf, XML_BUF_SIZE); if (len < 0) break; isFinal = (XML_Bool)(!len); /* parse the data in the buffer */ if ((stat = XML_ParseBuffer (readerImpl->parser, len, isFinal)) == 0) break; /* the following code is necessary only if it is necessary to * decode several XML documents consequently from one stream. */ if (pSaxBase->mState == OS_SAX_FINAL_STATE) { /* if parsing is finished, but buffer is not empty we need * to find the beginning of the next XML message and set * this piece of data as pre-read buffer for BufferedStream.*/ XML_ParsingStatus status; XML_GetParsingStatus(readerImpl->parser, &status); if (status.parsing == XML_SUSPENDED) { int offset, lenn; /* Get buffer pointer, offset and length of remaining data. Note, that patching of Expat is necessary to fix two problems: 1) even if parser is stopped by XML_StopParser, it will return error "junk after end-of-document" if buffer is not empty; 2) XML_GetInputContext worked only if macro XML_CONTEXT_BYTES was defined. But it could work even without it. */ const char * _pbuf = XML_GetInputContext(readerImpl->parser, &offset, &lenn); if (offset > 0 && lenn - offset > 0) { int stat = 0; const OSUTF8CHAR* prereadBuf = (const OSUTF8CHAR*)_pbuf + offset; size_t prereadBufLen = (size_t)(lenn - offset), i; /* check, is the buffer just whitespaces or not. If yes, discard it */ for (i = 0; i < prereadBufLen; i++) { if (!OS_ISSPACE (prereadBuf[i])) { if (OSRTSTREAM_ID (pctxt) != OSRTSTRMID_DIRECTBUF) { stat = rtxStreamBufferedCreate (pctxt, OSRTSTRMCM_RESTORE_UNDERLAYING_AFTER_RESET); if (stat < 0) len = stat; } if (stat == 0) { stat = rtxStreamBufferedSetPreReadBuf (pctxt, (const OSOCTET*)prereadBuf + i, prereadBufLen - i); if (stat < 0) len = stat; } break; } } } stat = XML_STATUS_OK; } break; } } while (len > 0); } if (len < 0) { return LOG_RTERR (pctxt, len); } else if (stat != XML_STATUS_OK) { XML_LChar str[256]; len = RTERR_XMLPARSE; EXML_ErrorString (readerImpl->parser, XML_GetErrorCode (readerImpl->parser), str, sizeof(str)/sizeof(str[0])); LOG_RTERRNEW (pctxt, len); rtxErrAddStrParm (pctxt, LSTRX (pctxt, str)); return len; } return 0; }
int DOMTest_Ns7_Scene_element (OSCTXT* pctxt, Ns7_Scene_element* pvalue, xmlNodePtr pXmlNode, OSBOOL setChild) { if (setChild) pXmlNode = pXmlNode->children; for ( ; 0 != pXmlNode; pXmlNode = pXmlNode->next) { if (pXmlNode->type == XML_ELEMENT_NODE) { if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("scene"))) { pvalue->t = 1; pvalue->u.scene = rtxMemAllocType (pctxt, Ns7_Scene); if (pvalue->u.scene == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Ns7_Scene ((Ns7_Scene*)pvalue->u.scene); DOMTest_Ns7_Scene (pctxt, (Ns7_Scene*)pvalue->u.scene, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("extrude"))) { pvalue->t = 2; pvalue->u.extrude = rtxMemAllocType (pctxt, Ns7_Extrude); if (pvalue->u.extrude == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Ns7_Extrude (pvalue->u.extrude); DOMTest_Ns7_Extrude (pctxt, pvalue->u.extrude, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("sphere"))) { pvalue->t = 3; pvalue->u.sphere = rtxMemAllocType (pctxt, Ns7_Sphere); if (pvalue->u.sphere == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Ns7_Sphere (pvalue->u.sphere); DOMTest_Ns7_Sphere (pctxt, pvalue->u.sphere, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("rotate"))) { pvalue->t = 4; pvalue->u.rotate = rtxMemAllocType (pctxt, Ns7_Rotate); if (pvalue->u.rotate == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Ns7_Rotate (pvalue->u.rotate); DOMTest_Ns7_Rotate (pctxt, pvalue->u.rotate, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("cube"))) { pvalue->t = 5; pvalue->u.cube = rtxMemAllocType (pctxt, Ns7_Cube); if (pvalue->u.cube == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Ns7_Cube (pvalue->u.cube); DOMTest_Ns7_Cube (pctxt, pvalue->u.cube, pXmlNode, TRUE); break; } else { LOG_RTERR1 (pctxt, RTERR_INVOPT, rtxErrAddStrParm (pctxt, (const char*)pXmlNode->name)); } } } return 0; }
int DOMTest_Config_item_map_entry_element (OSCTXT* pctxt, Config_item_map_entry_element* pvalue, xmlNodePtr pXmlNode, OSBOOL setChild) { if (setChild) pXmlNode = pXmlNode->children; for ( ; 0 != pXmlNode; pXmlNode = pXmlNode->next) { if (pXmlNode->type == XML_ELEMENT_NODE) { if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("config-item"))) { pvalue->t = 1; pvalue->u.config_item = rtxMemAllocType (pctxt, Config_item); if (pvalue->u.config_item == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Config_item (pvalue->u.config_item); DOMTest_Config_item (pctxt, pvalue->u.config_item, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("config-item-set"))) { pvalue->t = 2; pvalue->u.config_item_set = rtxMemAllocType (pctxt, Config_item_set); if (pvalue->u.config_item_set == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Config_item_set ((Config_item_set*)pvalue->u.config_item_set); DOMTest_Config_item_set (pctxt, (Config_item_set*)pvalue->u.config_item_set, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("config-item-map-named"))) { pvalue->t = 3; pvalue->u.config_item_map_named = rtxMemAllocType (pctxt, Config_item_map_named); if (pvalue->u.config_item_map_named == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Config_item_map_named ((Config_item_map_named*)pvalue->u.config_item_map_named); DOMTest_Config_item_map_named (pctxt, (Config_item_map_named*)pvalue->u.config_item_map_named, pXmlNode, TRUE); break; } else if (rtxUTF8StrEqual (pXmlNode->name, OSUTF8("config-item-map-indexed"))) { pvalue->t = 4; pvalue->u.config_item_map_indexed = rtxMemAllocType (pctxt, Config_item_map_indexed); if (pvalue->u.config_item_map_indexed == NULL) return LOG_RTERR (pctxt, RTERR_NOMEM); asn1Init_Config_item_map_indexed (pvalue->u.config_item_map_indexed); DOMTest_Config_item_map_indexed (pctxt, pvalue->u.config_item_map_indexed, pXmlNode, TRUE); break; } else { LOG_RTERR1 (pctxt, RTERR_INVOPT, rtxErrAddStrParm (pctxt, (const char*)pXmlNode->name)); } } } return 0; }