SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap) { if (!soap_peek_element(soap)) { int t; DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body)); if (soap->mustUnderstand && !soap->other) return soap->error = SOAP_MUSTUNDERSTAND; if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:")) { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag)); return soap->error = SOAP_TAG_MISMATCH; } if (!*soap->id || !soap_getelement(soap, &t)) { soap->peeked = 0; if (soap->fignore) soap->error = soap->fignore(soap, soap->tag); else soap->error = SOAP_OK; DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag)); if (!soap->error && soap->body) { soap->level++; while (!soap_ignore_element(soap)) ; if (soap->error == SOAP_NO_TAG) soap->error = soap_element_end_in(soap, NULL); } }
SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap) { int t; for (;;) if (!soap_getelement(soap, &t)) if (soap->error || soap_ignore_element(soap)) break; if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF) soap->error = SOAP_OK; return soap->error; }
SOAP_FMAC1 struct ns__getQuoteResponse * SOAP_FMAC2 soap_in_ns__getQuoteResponse(struct soap *soap, const char *tag, struct ns__getQuoteResponse *a, const char *type) { short soap_flag_result = 1; if (soap_element_begin_in(soap, tag)) return NULL; if (*soap->type && soap_match_tag(soap, soap->type, type)) { soap->error = SOAP_TYPE_MISMATCH; soap_revert(soap); return NULL; } if (soap->null) { if (soap->enable_null) { soap->error = SOAP_NULL; return NULL; } else return a; } if (soap->body && !*soap->href) { a = (struct ns__getQuoteResponse *)soap_id_enter(soap, soap->id, a, SOAP_ns__getQuoteResponse, sizeof(struct ns__getQuoteResponse), 0); if (!a) return NULL; if (soap->alloced) soap_default_ns__getQuoteResponse(soap, a); for (;;) { soap->error = SOAP_TAG_MISMATCH; if (soap_flag_result && soap->error == SOAP_TAG_MISMATCH) if (soap_in_float(soap, "result", &a->result, "")) { soap_flag_result = 0; continue; } if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) break; if (soap->error) { return NULL; } } if (soap_element_end_in(soap, tag)) return NULL; } else { a = (struct ns__getQuoteResponse *)soap_id_forward(soap, soap->href, (void**)soap_id_enter(soap, soap->id, a, SOAP_ns__getQuoteResponse, sizeof(struct ns__getQuoteResponse), 0), SOAP_ns__getQuoteResponse, sizeof(struct ns__getQuoteResponse)); if (soap->alloced) soap_default_ns__getQuoteResponse(soap, a); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; }
SOAP_FMAC1 int SOAP_FMAC2 soap_getindependent(struct soap *soap) { for (;;) { if (soap_peek_element(soap) || !*soap->id) break; switch (soap_lookup_type(soap, soap->id)) { case SOAP_byte: soap_in_byte(soap, NULL, NULL, ""); break; case SOAP_int: soap_in_int(soap, NULL, NULL, ""); break; case SOAP_float: soap_in_float(soap, NULL, NULL, ""); break; case SOAP_SOAP_ENV__Fault: soap_in_SOAP_ENV__Fault(soap, NULL, NULL, ""); break; case SOAP_SOAP_ENV__Header: soap_in_SOAP_ENV__Header(soap, NULL, NULL, ""); break; case SOAP_ns__getQuote: soap_in_ns__getQuote(soap, NULL, NULL, "ns:getQuote"); break; case SOAP_ns__getQuoteResponse: soap_in_ns__getQuoteResponse(soap, NULL, NULL, "ns:getQuoteResponse"); break; case SOAP_string: soap_in_string(soap, NULL, NULL, ""); break; default: soap_in_ns__getQuote(soap, NULL, NULL, "ns:getQuote"); if (soap->error == SOAP_TYPE_MISMATCH && soap->level == 2) soap_in_ns__getQuoteResponse(soap, NULL, NULL, "ns:getQuoteResponse"); if (soap->error) { soap->peeked = 1; soap_ignore_element(soap); } } if (soap->error) break; } if (soap->error == SOAP_NO_TAG) soap->error = SOAP_OK; return soap->error; }
SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type) {; if (soap_element_begin_in(soap, tag)) return NULL; if (*soap->type && soap_match_tag(soap, soap->type, type)) { soap->error = SOAP_TYPE_MISMATCH; soap_revert(soap); return NULL; } if (soap->null) { if (soap->enable_null) { soap->error = SOAP_NULL; return NULL; } else return a; } if (soap->body && !*soap->href) { a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0); if (!a) return NULL; if (soap->alloced) soap_default_SOAP_ENV__Header(soap, a); for (;;) { soap->error = SOAP_TAG_MISMATCH; /* transient dummy skipped */ if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) break; if (soap->error) { return NULL; } } if (soap_element_end_in(soap, tag)) return NULL; } else { a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void**)soap_id_enter(soap, soap->id, a, SOAP_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0), SOAP_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header)); if (soap->alloced) soap_default_SOAP_ENV__Header(soap, a); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; }
SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type) { short soap_flag_faultcode = 1, soap_flag_faultstring = 1, soap_flag_faultactor = 1, soap_flag_detail = 1; if (soap_element_begin_in(soap, tag)) return NULL; if (*soap->type && soap_match_tag(soap, soap->type, type)) { soap->error = SOAP_TYPE_MISMATCH; soap_revert(soap); return NULL; } if (soap->null) { if (soap->enable_null) { soap->error = SOAP_NULL; return NULL; } else return a; } if (soap->body && !*soap->href) { a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0); if (!a) return NULL; if (soap->alloced) soap_default_SOAP_ENV__Fault(soap, a); for (;;) { soap->error = SOAP_TAG_MISMATCH; if (soap_flag_faultcode && soap->error == SOAP_TAG_MISMATCH) if (soap_in_string(soap, "faultcode", &a->faultcode, "")) { soap_flag_faultcode = 0; continue; } if (soap_flag_faultstring && soap->error == SOAP_TAG_MISMATCH) if (soap_in_string(soap, "faultstring", &a->faultstring, "")) { soap_flag_faultstring = 0; continue; } if (soap_flag_faultactor && soap->error == SOAP_TAG_MISMATCH) if (soap_in_string(soap, "faultactor", &a->faultactor, "")) { soap_flag_faultactor = 0; continue; } if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH) if (soap_in_string(soap, "detail", &a->detail, "")) { soap_flag_detail = 0; continue; } if (soap->error == SOAP_TAG_MISMATCH) soap->error = soap_ignore_element(soap); if (soap->error == SOAP_NO_TAG) break; if (soap->error) { return NULL; } } if (soap_element_end_in(soap, tag)) return NULL; } else { a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void**)soap_id_enter(soap, soap->id, a, SOAP_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0), SOAP_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault)); if (soap->alloced) soap_default_SOAP_ENV__Fault(soap, a); if (soap->body && soap_element_end_in(soap, tag)) return NULL; } return a; }