diff options
-rw-r--r-- | ext/soap/TODO | 7 | ||||
-rw-r--r-- | ext/soap/php_encoding.c | 173 | ||||
-rw-r--r-- | ext/soap/php_encoding.h | 8 | ||||
-rw-r--r-- | ext/soap/php_schema.c | 28 | ||||
-rw-r--r-- | ext/soap/php_sdl.c | 135 | ||||
-rw-r--r-- | ext/soap/php_sdl.h | 3 | ||||
-rw-r--r-- | ext/soap/php_xml.c | 8 | ||||
-rw-r--r-- | ext/soap/soap.c | 323 |
8 files changed, 316 insertions, 369 deletions
diff --git a/ext/soap/TODO b/ext/soap/TODO index 96f2a740b9..e0f9156c87 100644 --- a/ext/soap/TODO +++ b/ext/soap/TODO @@ -7,11 +7,8 @@ General SOAP ---- -+ support for SOAP headers - ? actor attribute - + mustUnderstend attribute - SOAP routing -- root attribute +- root attribute (it is defined by SOAP 1.1, but not SOAP 1.2) - make sure soap 1.1 and 1.2 are supported fully Encoding @@ -92,7 +89,7 @@ Transport Interop Testing --------------- -- more introp rounds/groups +- more interop rounds/groups UDDI ---- diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index d4d5367e7d..4138b5acb0 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -80,6 +80,8 @@ static void get_array_type(xmlNodePtr node, zval *array, smart_str *out_type TSR static xmlNodePtr check_and_resolve_href(xmlNodePtr data); +static encodePtr get_conversion(int encode); + static void get_type_str(xmlNodePtr node, const char* ns, const char* type, smart_str* ret); static void set_ns_and_type_ex(xmlNodePtr node, char *ns, char *type); @@ -212,16 +214,15 @@ void whiteSpace_replace(char* str) void whiteSpace_collapse(char* str) { - char *orig = str; - char *tmp = do_alloca(strlen(str)+1); char *pos; char old; + pos = str; whiteSpace_replace(str); while (*str == ' ') { str++; } - pos = tmp; old = '\0'; + old = '\0'; while (*str != '\0') { if (*str != ' ' || old != ' ') { *pos = *str; @@ -234,8 +235,6 @@ void whiteSpace_collapse(char* str) --pos; } *pos = '\0'; - memcpy(orig,tmp,(pos-tmp)+1); - free_alloca(tmp); } xmlNodePtr master_to_xml(encodePtr encode, zval *data, int style, xmlNodePtr parent) @@ -795,7 +794,7 @@ static void model_to_zval_object(zval *ret, sdlContentModelPtr model, xmlNodePtr add_next_index_zval(array, val); do { typeAttr = get_attribute(node->properties,"type"); - enc = NULL; + enc = NULL; if (typeAttr != NULL && typeAttr->children && typeAttr->children->content) { enc = get_encoder_from_prefix(sdl, node, typeAttr->children->content); } @@ -847,16 +846,16 @@ static zval *to_zval_object(encodeTypePtr type, xmlNodePtr data) if (sdlType) { if (sdlType->kind == XSD_TYPEKIND_RESTRICTION && sdlType->encode && type != &sdlType->encode->details) { - encodePtr enc; + encodePtr enc; enc = sdlType->encode; while (enc && enc->details.sdl_type && - enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && - enc->details.sdl_type->kind != XSD_TYPEKIND_LIST && - enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) { - enc = enc->details.sdl_type->encode; - } - if (enc) { + enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && + enc->details.sdl_type->kind != XSD_TYPEKIND_LIST && + enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) { + enc = enc->details.sdl_type->encode; + } + if (enc) { zval *base; MAKE_STD_ZVAL(ret); @@ -875,11 +874,11 @@ static zval *to_zval_object(encodeTypePtr type, xmlNodePtr data) } else if (sdlType->kind == XSD_TYPEKIND_EXTENSION && sdlType->encode && type != &sdlType->encode->details) { - if (sdlType->encode->details.sdl_type && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) { - ret = master_to_zval(sdlType->encode, data); + if (sdlType->encode->details.sdl_type && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) { + ret = master_to_zval(sdlType->encode, data); FIND_XML_NULL(data, ret); } else { zval *base; @@ -1050,16 +1049,16 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo } if (sdlType->kind == XSD_TYPEKIND_RESTRICTION && sdlType->encode && type != &sdlType->encode->details) { - encodePtr enc; + encodePtr enc; enc = sdlType->encode; while (enc && enc->details.sdl_type && - enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && - enc->details.sdl_type->kind != XSD_TYPEKIND_LIST && - enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) { - enc = enc->details.sdl_type->encode; - } - if (enc) { + enc->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && + enc->details.sdl_type->kind != XSD_TYPEKIND_LIST && + enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) { + enc = enc->details.sdl_type->encode; + } + if (enc) { zval **tmp; if (prop && zend_hash_find(prop, "_", sizeof("_"), (void**)&tmp) == SUCCESS) { xmlParam = master_to_xml(enc, *tmp, style, parent); @@ -1075,10 +1074,10 @@ static xmlNodePtr to_xml_object(encodeTypePtr type, zval *data, int style, xmlNo } } else if (sdlType->kind == XSD_TYPEKIND_EXTENSION && sdlType->encode && type != &sdlType->encode->details) { - if (sdlType->encode->details.sdl_type && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST && - sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) { + if (sdlType->encode->details.sdl_type && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_SIMPLE && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_LIST && + sdlType->encode->details.sdl_type->kind != XSD_TYPEKIND_UNION) { xmlParam = master_to_xml(sdlType->encode, data, style, parent); } else { zval **tmp; @@ -1205,7 +1204,7 @@ static int calc_dimension_12(const char* str) } else if (*str == '*') { php_error(E_ERROR,"SOAP-ERROR: Encoding: '*' may only be first arraySize value in list"); } else { - flag = 0; + flag = 0; } str++; } @@ -1229,11 +1228,11 @@ static int* get_position_12(int dimension, const char* str) while (*str != '\0') { if (*str >= '0' && *str <= '9') { if (flag == 0) { - i++; - flag = 1; - } - pos[i] = (pos[i]*10)+(*str-'0'); - } else if (*str == '*') { + i++; + flag = 1; + } + pos[i] = (pos[i]*10)+(*str-'0'); + } else if (*str == '*') { php_error(E_ERROR,"SOAP-ERROR: Encoding: '*' may only be first arraySize value in list"); } else { flag = 0; @@ -1421,7 +1420,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod if (Z_TYPE_PP(el) == IS_ARRAY) { dims[i] = zend_hash_num_elements(Z_ARRVAL_PP(el)); } else { - dims[i] = 0; + dims[i] = 0; } } } @@ -1484,19 +1483,19 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod zend_hash_num_elements(sdl_type->elements) == 1 && (elementType = *(sdlTypePtr*)sdl_type->elements->pListHead->pData) != NULL && elementType->encode && elementType->encode->details.type_str) { - element_type = elementType; + element_type = elementType; enc = elementType->encode; get_type_str(xmlParam, elementType->encode->details.ns, elementType->encode->details.type_str, &array_type); } else { get_array_type(xmlParam, data, &array_type TSRMLS_CC); - enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c); + enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len); } } else if (sdl_type && sdl_type->elements && zend_hash_num_elements(sdl_type->elements) == 1 && (elementType = *(sdlTypePtr*)sdl_type->elements->pListHead->pData) != NULL && elementType->encode && elementType->encode->details.type_str) { - element_type = elementType; + element_type = elementType; enc = elementType->encode; get_type_str(xmlParam, elementType->encode->details.ns, elementType->encode->details.type_str, &array_type); @@ -1507,7 +1506,7 @@ static xmlNodePtr to_xml_array(encodeTypePtr type, zval *data, int style, xmlNod } else { get_array_type(xmlParam, data, &array_type TSRMLS_CC); - enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c); + enc = get_encoder_ex(SOAP_GLOBAL(sdl), array_type.c, array_type.len); smart_str_append_long(&array_size, i); dims = emalloc(sizeof(int)*dimension); dims[0] = i; @@ -1898,10 +1897,9 @@ static zval *guess_zval_convert(encodeTypePtr type, xmlNodePtr data) } else { tmpattr = get_attribute(data->properties,"type"); if (tmpattr != NULL) { - if (tmpattr->children) { - enc = get_conversion_from_type(data, tmpattr->children->content); - } else { - enc = get_conversion_from_type(data, ""); + enc = get_encoder_from_prefix(SOAP_GLOBAL(sdl), data, tmpattr->children->content); + if (enc != NULL && enc->details.sdl_type != NULL) { + enc = NULL; } } @@ -2276,8 +2274,8 @@ static xmlNodePtr check_and_resolve_href(xmlNodePtr data) href = data->properties; while (1) { href = get_attribute(href, "href"); - if (href == NULL || href->ns == NULL) {break;} - href = href->next; + if (href == NULL || href->ns == NULL) {break;} + href = href->next; } if (href) { /* Internal href try and find node */ @@ -2363,12 +2361,12 @@ void encode_reset_ns() SOAP_GLOBAL(cur_uniq_ns) = 0; } -encodePtr get_conversion_ex(HashTable *encoding, int encode) +static encodePtr get_conversion(int encode) { encodePtr *enc = NULL; TSRMLS_FETCH(); - if (zend_hash_index_find(encoding, encode, (void **)&enc) == FAILURE) { + if (zend_hash_index_find(&SOAP_GLOBAL(defEncIndex), encode, (void **)&enc) == FAILURE) { if (SOAP_GLOBAL(overrides)) { smart_str nscat = {0}; @@ -2394,61 +2392,6 @@ encodePtr get_conversion_ex(HashTable *encoding, int encode) } } -encodePtr get_conversion_from_href_type_ex(HashTable *encoding, const char *type, int len) -{ - encodePtr *enc = NULL; - - if (encoding == NULL) { - return NULL; - } - - if (zend_hash_find(encoding, (char*)type, len + 1, (void **)&enc) == FAILURE) { - return NULL; - } - - return (*enc); -} - -encodePtr get_conversion_from_type_ex(HashTable *encoding, xmlNodePtr node, const char *type) -{ - encodePtr *enc = NULL; - xmlNsPtr nsptr; - char *ns, *cptype; - smart_str nscat = {0}; - - if (encoding == NULL) { - return NULL; - } - - parse_namespace(type, &cptype, &ns); - nsptr = xmlSearchNs(node->doc, node, ns); - if (nsptr != NULL) { - smart_str_appends(&nscat, nsptr->href); - smart_str_appendc(&nscat, ':'); - smart_str_appends(&nscat, cptype); - smart_str_0(&nscat); - - if (zend_hash_find(encoding, nscat.c, nscat.len + 1, (void **)&enc) == FAILURE) { - if (zend_hash_find(encoding, (char*)type, strlen(type) + 1, (void **)&enc) == FAILURE) { - enc = NULL; - } - } - smart_str_free(&nscat); - } else { - if (zend_hash_find(encoding, (char*)type, strlen(type) + 1, (void **)&enc) == FAILURE) { - enc = NULL; - } - } - - if (cptype) {efree(cptype);} - if (ns) {efree(ns);} - if (enc == NULL) { - return NULL; - } else { - return (*enc); - } -} - static int is_map(zval *array) { int i, count = zend_hash_num_elements(Z_ARRVAL_P(array)); @@ -2492,33 +2435,33 @@ static void get_array_type(xmlNodePtr node, zval *array, smart_str *type TSRMLS_ cur_type = Z_LVAL_PP(ztype); if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_stype", sizeof("enc_stype"), (void **)&ztype) == SUCCESS) { - cur_stype = Z_STRVAL_PP(ztype); + cur_stype = Z_STRVAL_PP(ztype); } else { - cur_stype = NULL; + cur_stype = NULL; } if (zend_hash_find(Z_OBJPROP_PP(tmp), "enc_ns", sizeof("enc_ns"), (void **)&ztype) == SUCCESS) { - cur_ns = Z_STRVAL_PP(ztype); + cur_ns = Z_STRVAL_PP(ztype); } else { - cur_ns = NULL; + cur_ns = NULL; } } else if (Z_TYPE_PP(tmp) == IS_ARRAY && is_map(*tmp)) { cur_type = APACHE_MAP; - cur_stype = NULL; - cur_ns = NULL; + cur_stype = NULL; + cur_ns = NULL; } else { cur_type = Z_TYPE_PP(tmp); - cur_stype = NULL; - cur_ns = NULL; + cur_stype = NULL; + cur_ns = NULL; } if (i > 0) { if ((cur_type != prev_type) || - (cur_stype != NULL && prev_stype != NULL && strcmp(cur_stype,prev_stype) != 0) || - (cur_stype == NULL && cur_stype != prev_stype) || - (cur_ns != NULL && prev_ns != NULL && strcmp(cur_ns,prev_ns) != 0) || - (cur_ns == NULL && cur_ns != prev_ns)) { + (cur_stype != NULL && prev_stype != NULL && strcmp(cur_stype,prev_stype) != 0) || + (cur_stype == NULL && cur_stype != prev_stype) || + (cur_ns != NULL && prev_ns != NULL && strcmp(cur_ns,prev_ns) != 0) || + (cur_ns == NULL && cur_ns != prev_ns)) { different = TRUE; break; } diff --git a/ext/soap/php_encoding.h b/ext/soap/php_encoding.h index 47069d1020..57c38d4662 100644 --- a/ext/soap/php_encoding.h +++ b/ext/soap/php_encoding.h @@ -203,17 +203,9 @@ void whiteSpace_collapse(char* str); xmlNodePtr sdl_guess_convert_xml(encodeTypePtr enc, zval* data, int style, xmlNodePtr parent); zval *sdl_guess_convert_zval(encodeTypePtr enc, xmlNodePtr data); -#define get_conversion(e) get_conversion_ex(&SOAP_GLOBAL(defEncIndex), e) -#define get_conversion_from_type(n, t) get_conversion_from_type_ex(&SOAP_GLOBAL(defEnc), n, t) -#define get_conversion_from_href_type(t) get_conversion_from_href_type_ex(&SOAP_GLOBAL(defEnc), t, strlen(t)) - void encode_reset_ns(); xmlNsPtr encode_add_ns(xmlNodePtr node, const char* ns); -encodePtr get_conversion_ex(HashTable *encoding, int encode); -encodePtr get_conversion_from_type_ex(HashTable *encoding, xmlNodePtr node, const char *type); -encodePtr get_conversion_from_href_type_ex(HashTable *encoding, const char *type, int len); - void delete_encoder(void *handle); extern encode defaultEncoding[]; diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c index b4e21eb002..6918cc7492 100644 --- a/ext/soap/php_schema.c +++ b/ext/soap/php_schema.c @@ -90,17 +90,13 @@ static encodePtr get_create_encoder(sdlPtr sdl, sdlTypePtr cur_type, const char { encodePtr enc = NULL; smart_str nscat = {0}; - TSRMLS_FETCH(); smart_str_appends(&nscat, ns); smart_str_appendc(&nscat, ':'); smart_str_appends(&nscat, type); smart_str_0(&nscat); - enc = get_conversion_from_href_type(nscat.c); - if (enc == NULL) { - enc = get_conversion_from_href_type_ex(sdl->encoders, nscat.c, nscat.len); - } + enc = get_encoder_ex(sdl, nscat.c, nscat.len); if (enc == NULL) { enc = create_encoder(sdl, cur_type, ns, type); } @@ -201,7 +197,7 @@ int load_schema(sdlCtx *ctx,xmlNodePtr schema) if (location == NULL) { php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: include has no 'schemaLocation' attribute"); } else { - xmlChar *uri; + xmlChar *uri; xmlChar *base = xmlNodeGetBase(trav->doc, trav); if (base == NULL) { @@ -211,7 +207,7 @@ int load_schema(sdlCtx *ctx,xmlNodePtr schema) xmlFree(base); } schema_load_file(ctx,NULL,uri,tns,0); - xmlFree(uri); + xmlFree(uri); } } else if (node_is_equal(trav,"redefine")) { @@ -231,13 +227,13 @@ int load_schema(sdlCtx *ctx,xmlNodePtr schema) xmlFree(base); } schema_load_file(ctx,NULL,uri,tns,0); - xmlFree(uri); + xmlFree(uri); /* TODO: <redefine> support */ } } else if (node_is_equal(trav,"import")) { xmlAttrPtr ns, location; - xmlChar *uri = NULL; + xmlChar *uri = NULL; ns = get_attribute(trav->properties, "namespace"); location = get_attribute(trav->properties, "schemaLocation"); @@ -256,7 +252,7 @@ int load_schema(sdlCtx *ctx,xmlNodePtr schema) } } schema_load_file(ctx,ns,uri,tns,1); - if (uri != NULL) {xmlFree(uri);} + if (uri != NULL) {xmlFree(uri);} } else if (node_is_equal(trav,"annotation")) { /* TODO: <annotation> support */ /* annotation cleanup @@ -267,7 +263,7 @@ int load_schema(sdlCtx *ctx,xmlNodePtr schema) continue; */ } else { - break; + break; } trav = trav->next; } @@ -470,7 +466,7 @@ static int schema_list(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr listType, sdlTypeP zend_hash_next_index_insert(cur_type->elements, &newType, sizeof(sdlTypePtr), (void **)&tmp); schema_simpleType(sdl, tsn, trav, newType); - trav = trav->next; + trav = trav->next; } if (trav != NULL) { php_error(E_ERROR, "SOAP-ERROR: Parsing Schema: unexpected <%s> in list",trav->name); @@ -503,10 +499,10 @@ static int schema_union(sdlPtr sdl, xmlAttrPtr tsn, xmlNodePtr unionType, sdlTyp while (start != NULL && *start != '\0') { end = strchr(start,' '); if (end == NULL) { - next = NULL; + next = NULL; } else { - *end = '\0'; - next = end+1; + *end = '\0'; + next = end+1; } parse_namespace(start, &type, &ns); @@ -696,7 +692,7 @@ static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tsn, xmlNodeP } else { break; } - trav = trav->next; + trav = trav->next; } if (!simpleType) { while (trav != NULL) { diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index d8a25863cf..9353c0bac5 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -39,15 +39,35 @@ static void delete_parameter(void *paramater); static void delete_header(void *header); static void delete_document(void *doc_ptr); -encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr data, const char *type) +encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr node, const char *type) { encodePtr enc = NULL; - TSRMLS_FETCH(); - - enc = get_conversion_from_type(data, type); - if (enc == NULL && sdl) { - enc = get_conversion_from_type_ex(sdl->encoders, data, type); + xmlNsPtr nsptr; + char *ns, *cptype; + + parse_namespace(type, &cptype, &ns); + nsptr = xmlSearchNs(node->doc, node, ns); + if (nsptr != NULL) { + int ns_len = strlen(nsptr->href); + int type_len = strlen(cptype); + int len = ns_len + type_len + 1; + char *nscat = do_alloca(len + 1); + + memcpy(nscat, nsptr->href, ns_len); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, cptype, type_len); + nscat[len] = '\0'; + + enc = get_encoder_ex(sdl, nscat, len); + if (enc == NULL) { + enc = get_encoder_ex(sdl, type, type_len); + } + free_alloca(nscat); + } else { + enc = get_encoder_ex(sdl, type, strlen(type)); } + efree(cptype); + if (ns) {efree(ns);} return enc; } @@ -64,19 +84,22 @@ static sdlTypePtr get_element(sdlPtr sdl, xmlNodePtr node, const char *type) parse_namespace(type, &cptype, &ns); nsptr = xmlSearchNs(node->doc, node, ns); if (nsptr != NULL) { - smart_str nscat = {0}; + int ns_len = strlen(nsptr->href); + int type_len = strlen(cptype); + int len = ns_len + type_len + 1; + char *nscat = do_alloca(len + 1); - smart_str_appends(&nscat, nsptr->href); - smart_str_appendc(&nscat, ':'); - smart_str_appends(&nscat, cptype); - smart_str_0(&nscat); + memcpy(nscat, nsptr->href, ns_len); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, cptype, type_len); + nscat[len] = '\0'; - if (zend_hash_find(sdl->elements, nscat.c, nscat.len + 1, (void **)&sdl_type) == SUCCESS) { + if (zend_hash_find(sdl->elements, nscat, len + 1, (void **)&sdl_type) == SUCCESS) { ret = *sdl_type; - } else if (zend_hash_find(sdl->elements, (char*)type, strlen(type) + 1, (void **)&sdl_type) == SUCCESS) { + } else if (zend_hash_find(sdl->elements, (char*)type, type_len + 1, (void **)&sdl_type) == SUCCESS) { ret = *sdl_type; } - smart_str_free(&nscat); + free_alloca(nscat); } else { if (zend_hash_find(sdl->elements, (char*)type, strlen(type) + 1, (void **)&sdl_type) == SUCCESS) { ret = *sdl_type; @@ -93,26 +116,33 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type) { encodePtr enc = NULL; char *nscat; + int ns_len = strlen(ns); + int type_len = strlen(type); + int len = ns_len + type_len + 1; - nscat = emalloc(strlen(ns) + strlen(type) + 2); - sprintf(nscat, "%s:%s", ns, type); + nscat = do_alloca(len + 1); + memcpy(nscat, ns, ns_len); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, type, type_len); + nscat[len] = '\0'; - enc = get_encoder_ex(sdl, nscat); + enc = get_encoder_ex(sdl, nscat, len); - efree(nscat); + free_alloca(nscat); return enc; } -encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat) +encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat, int len) { - encodePtr enc = NULL; + encodePtr *enc; TSRMLS_FETCH(); - enc = get_conversion_from_href_type(nscat); - if (enc == NULL && sdl) { - enc = get_conversion_from_href_type_ex(sdl->encoders, nscat, strlen(nscat)); + if (zend_hash_find(&SOAP_GLOBAL(defEnc), (char*)nscat, len + 1, (void **)&enc) == SUCCESS) { + return (*enc); + } else if (sdl && sdl->encoders && zend_hash_find(sdl->encoders, (char*)nscat, len + 1, (void **)&enc) == SUCCESS) { + return (*enc); } - return enc; + return NULL; } sdlBindingPtr get_binding_from_type(sdlPtr sdl, int type) @@ -172,7 +202,7 @@ static void load_wsdl_ex(char *struri, sdlCtx *ctx, int include) xmlAttrPtr targetNamespace; if (zend_hash_exists(&ctx->docs, struri, strlen(struri)+1)) { - return; + return; } wsdl = soap_xmlParseFile(struri); @@ -225,17 +255,17 @@ static void load_wsdl_ex(char *struri, sdlCtx *ctx, int include) /* TODO: namespace ??? */ xmlAttrPtr tmp = get_attribute(trav->properties, "location"); if (tmp) { - xmlChar *uri; + xmlChar *uri; xmlChar *base = xmlNodeGetBase(trav->doc, trav); if (base == NULL) { - uri = xmlBuildURI(tmp->children->content, trav->doc->URL); + uri = xmlBuildURI(tmp->children->content, trav->doc->URL); } else { - uri = xmlBuildURI(tmp->children->content, base); - xmlFree(base); + uri = xmlBuildURI(tmp->children->content, base); + xmlFree(base); } load_wsdl_ex(uri, ctx, 1); - xmlFree(uri); + xmlFree(uri); } } else if (node_is_equal(trav,"message")) { @@ -341,7 +371,7 @@ static void wsdl_soap_binding_body(sdlCtx* ctx, xmlNodePtr node, char* wsdl_soap if (ctype == NULL) { ctype = tmp->children->content; } else { - ++ctype; + ++ctype; } if (zend_hash_find(&ctx->messages, ctype, strlen(ctype)+1, (void**)&message) != SUCCESS) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: Missing <message> with name '%s'", tmp->children->content); @@ -430,7 +460,7 @@ static HashTable* wsdl_message(sdlCtx *ctx, char* message_name) if (ctype == NULL) { ctype = message_name; } else { - ++ctype; + ++ctype; } if (zend_hash_find(&ctx->messages, ctype, strlen(ctype)+1, (void**)&tmp) != SUCCESS) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: Missing <message> with name '%s'", message->children->content); @@ -589,7 +619,7 @@ static sdlPtr load_wsdl(char *struri) if (ctype == NULL) { ctype = bindingAttr->children->content; } else { - ++ctype; + ++ctype; } if (zend_hash_find(&ctx.bindings, ctype, strlen(ctype)+1, (void*)&tmp) != SUCCESS) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: No <binding> element with name '%s'", ctype); @@ -638,7 +668,7 @@ static sdlPtr load_wsdl(char *struri) if (ctype == NULL) { ctype = type->children->content; } else { - ++ctype; + ++ctype; } if (zend_hash_find(&ctx.portTypes, ctype, strlen(ctype)+1, (void**)&tmp) != SUCCESS) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: Missing <portType> with name '%s'", name->children->content); @@ -1907,28 +1937,28 @@ sdlPtr get_sdl(char *uri TSRMLS_DC) if (SOAP_GLOBAL(cache_enabled)) { char fn[MAXPATHLEN]; - if (strchr(uri,':') != NULL || IS_ABSOLUTE_PATH(uri,strlen(uri))) { - strcpy(fn, uri); + if (strchr(uri,':') != NULL || IS_ABSOLUTE_PATH(uri,strlen(uri))) { + strcpy(fn, uri); } else if (VCWD_REALPATH(uri, fn) == NULL) { sdl = load_wsdl(uri); } if (sdl == NULL) { char* key; time_t t = time(0); - char md5str[33]; - PHP_MD5_CTX context; - unsigned char digest[16]; - int len = strlen(SOAP_GLOBAL(cache_dir)); - - md5str[0] = '\0'; - PHP_MD5Init(&context); - PHP_MD5Update(&context, fn, strlen(fn)); - PHP_MD5Final(digest, &context); - make_digest(md5str, digest); - key = do_alloca(len+sizeof("/wsdl-")-1+sizeof(md5str)); - memcpy(key,SOAP_GLOBAL(cache_dir),len); - memcpy(key+len,"/wsdl-",sizeof("/wsdl-")-1); - memcpy(key+len+sizeof("/wsdl-")-1,md5str,sizeof(md5str)); + char md5str[33]; + PHP_MD5_CTX context; + unsigned char digest[16]; + int len = strlen(SOAP_GLOBAL(cache_dir)); + + md5str[0] = '\0'; + PHP_MD5Init(&context); + PHP_MD5Update(&context, fn, strlen(fn)); + PHP_MD5Final(digest, &context); + make_digest(md5str, digest); + key = do_alloca(len+sizeof("/wsdl-")-1+sizeof(md5str)); + memcpy(key,SOAP_GLOBAL(cache_dir),len); + memcpy(key+len,"/wsdl-",sizeof("/wsdl-")-1); + memcpy(key+len+sizeof("/wsdl-")-1,md5str,sizeof(md5str)); if ((sdl = get_sdl_from_cache(key, fn, t-SOAP_GLOBAL(cache_ttl))) == NULL) { sdl = load_wsdl(fn); @@ -1984,11 +2014,6 @@ void delete_sdl(void *handle) efree(tmp); } -void delete_sdl_ptr(void *handle) -{ - delete_sdl((sdlPtr*)handle); -} - static void delete_binding(void *data) { sdlBindingPtr binding = *((sdlBindingPtr*)data); diff --git a/ext/soap/php_sdl.h b/ext/soap/php_sdl.h index 7b40f3ecef..dc04e0aa3f 100644 --- a/ext/soap/php_sdl.h +++ b/ext/soap/php_sdl.h @@ -228,12 +228,11 @@ sdlPtr get_sdl(char *uri TSRMLS_DC); encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr data, const char *type); encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type); -encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat); +encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat, int len); sdlBindingPtr get_binding_from_type(sdlPtr sdl, int type); sdlBindingPtr get_binding_from_name(sdlPtr sdl, char *name, char *ns); void delete_sdl(void *handle); -void delete_sdl_ptr(void *handle); #endif diff --git a/ext/soap/php_xml.c b/ext/soap/php_xml.c index c3ae5ffb81..3746c805e1 100644 --- a/ext/soap/php_xml.c +++ b/ext/soap/php_xml.c @@ -78,7 +78,7 @@ static void soap_Comment(void *ctx, const xmlChar *value) xmlDocPtr soap_xmlParseFile(const char *filename) { - xmlParserCtxtPtr ctxt = NULL; + xmlParserCtxtPtr ctxt = NULL; xmlDocPtr ret; /* @@ -105,7 +105,7 @@ xmlDocPtr soap_xmlParseFile(const char *filename) } xmlFreeParserCtxt(ctxt); } else { - ret = NULL; + ret = NULL; } /* @@ -120,7 +120,7 @@ xmlDocPtr soap_xmlParseFile(const char *filename) xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size) { - xmlParserCtxtPtr ctxt = NULL; + xmlParserCtxtPtr ctxt = NULL; xmlDocPtr ret; /* @@ -146,7 +146,7 @@ xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size) } xmlFreeParserCtxt(ctxt); } else { - ret = NULL; + ret = NULL; } /* diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 2a480e15a8..6c3e8fe860 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -56,11 +56,11 @@ static sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int inde static sdlFunctionPtr get_function(sdlPtr sdl, const char *function_name); static sdlFunctionPtr get_doc_function(sdlPtr sdl, xmlNodePtr node); -static sdlFunctionPtr deseralize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval **parameters[], int *version, soapHeader **headers TSRMLS_DC); -static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name,char *uri,zval *ret, soapHeader *headers, int version TSRMLS_DC); -static xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC); -static xmlNodePtr seralize_parameter(sdlParamPtr param,zval *param_val,int index,char *name, int style, xmlNodePtr parent TSRMLS_DC); -static xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC); +static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval **parameters[], int *version, soapHeader **headers TSRMLS_DC); +static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function_name,char *uri,zval *ret, soapHeader *headers, int version TSRMLS_DC); +static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC); +static xmlNodePtr serialize_parameter(sdlParamPtr param,zval *param_val,int index,char *name, int style, xmlNodePtr parent TSRMLS_DC); +static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC); static void delete_service(void *service); static void delete_url(void *handle); @@ -482,7 +482,7 @@ PHP_MINIT_FUNCTION(soap) INIT_CLASS_ENTRY(ce, PHP_SOAP_HEADER_CLASSNAME, soap_header_functions); soap_header_class_entry = zend_register_internal_class(&ce TSRMLS_CC); - + le_sdl = register_list_destructors(delete_sdl, NULL); le_url = register_list_destructors(delete_url, NULL); le_service = register_list_destructors(delete_service, NULL); @@ -588,7 +588,7 @@ PHP_FUNCTION(soap_encode_to_xml) } enc = get_conversion(Z_TYPE_P(pzval)); - ret = php_domobject_new(seralize_zval(pzval, NULL, name, SOAP_ENCODED), &found, NULL TSRMLS_CC); + ret = php_domobject_new(serialize_zval(pzval, NULL, name, SOAP_ENCODED), &found, NULL TSRMLS_CC); *return_value = *ret; zval_copy_ctor(return_value); zval_ptr_dtor(&ret); @@ -1277,7 +1277,7 @@ PHP_METHOD(soapserver, handle) old_sdl = SOAP_GLOBAL(sdl); SOAP_GLOBAL(sdl) = service->sdl; old_soap_version = SOAP_GLOBAL(soap_version); - function = deseralize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, ¶ms, &soap_version, &soap_headers TSRMLS_CC); + function = deserialize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, ¶ms, &soap_version, &soap_headers TSRMLS_CC); xmlFreeDoc(doc_request); if (service->type == SOAP_CLASS) { @@ -1425,7 +1425,7 @@ PHP_METHOD(soapserver, handle) memcpy(response_name+Z_STRLEN(function_name),"Response",sizeof("Response")); } SOAP_GLOBAL(overrides) = service->mapping; - doc_return = seralize_response_call(function, response_name, service->uri, &retval, soap_headers, soap_version TSRMLS_CC); + doc_return = serialize_response_call(function, response_name, service->uri, &retval, soap_headers, soap_version TSRMLS_CC); SOAP_GLOBAL(overrides) = NULL; efree(response_name); } else { @@ -1513,7 +1513,7 @@ static void soap_server_fault_ex(zval* fault TSRMLS_DC) soap_version = SOAP_GLOBAL(soap_version); - doc_return = seralize_response_call(NULL, NULL, NULL, fault, NULL, soap_version TSRMLS_CC); + doc_return = serialize_response_call(NULL, NULL, NULL, fault, NULL, soap_version TSRMLS_CC); xmlDocDumpMemory(doc_return, &buf, &size); @@ -1818,10 +1818,10 @@ static void do_soap_call(zval* this_ptr, sdlBindingPtr binding = fn->binding; if (binding->bindingType == BINDING_SOAP) { sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)fn->bindingAttributes; - request = seralize_function_call(this_ptr, fn, NULL, fnb->input.ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); + request = serialize_function_call(this_ptr, fn, NULL, fnb->input.ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); ret = send_http_soap_request(this_ptr, request, binding->location, fnb->soapAction, soap_version TSRMLS_CC); } else { - request = seralize_function_call(this_ptr, fn, NULL, sdl->target_ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); + request = serialize_function_call(this_ptr, fn, NULL, sdl->target_ns, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); ret = send_http_soap_request(this_ptr, request, binding->location, NULL, soap_version TSRMLS_CC); } @@ -1855,7 +1855,7 @@ static void do_soap_call(zval* this_ptr, if (call_uri == NULL) { call_uri = Z_STRVAL_PP(uri); } - request = seralize_function_call(this_ptr, NULL, function, call_uri, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); + request = serialize_function_call(this_ptr, NULL, function, call_uri, real_args, arg_count, soap_version, soap_headers TSRMLS_CC); if (soap_action == NULL) { smart_str_appends(&action, call_uri); @@ -2160,7 +2160,7 @@ static void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char } } -static void deseralize_parameters(xmlNodePtr params, sdlFunctionPtr function, int *num_params, zval ***parameters) +static void deserialize_parameters(xmlNodePtr params, sdlFunctionPtr function, int *num_params, zval ***parameters) { int cur_param = 0,num_of_params = 0; zval **tmp_parameters = NULL; @@ -2263,14 +2263,14 @@ static sdlFunctionPtr find_function(sdlPtr sdl, xmlNodePtr func, zval* function_ INIT_ZVAL(*function_name); if (function != NULL) { ZVAL_STRING(function_name, (char *)function->functionName, 1); - } else{ + } else { ZVAL_STRING(function_name, (char *)func->name, 1); } return function; } -static sdlFunctionPtr deseralize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval ***parameters, int *version, soapHeader **headers TSRMLS_DC) +static sdlFunctionPtr deserialize_function_call(sdlPtr sdl, xmlDocPtr request, char* actor, zval *function_name, int *num_params, zval ***parameters, int *version, soapHeader **headers TSRMLS_DC) { char* envelope_ns = NULL; xmlNodePtr trav,env,head,body,func; @@ -2474,20 +2474,20 @@ static sdlFunctionPtr deseralize_function_call(sdlPtr sdl, xmlDocPtr request, ch if (!h->function && sdl && function && function->binding && function->binding->bindingType == BINDING_SOAP) { sdlSoapBindingFunctionHeaderPtr *hdr; sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)function->bindingAttributes; - if (fnb->input.headers) { - smart_str key = {0}; - - if (hdr_func->ns) { - smart_str_appends(&key, hdr_func->ns->href); - smart_str_appendc(&key, ':'); - } - smart_str_appendl(&key, Z_STRVAL(h->function_name), Z_STRLEN(h->function_name)); - smart_str_0(&key); - if (zend_hash_find(fnb->input.headers, key.c, key.len+1, (void**)&hdr) == SUCCESS) { - h->hdr = *hdr; - } - smart_str_free(&key); - } + if (fnb->input.headers) { + smart_str key = {0}; + + if (hdr_func->ns) { + smart_str_appends(&key, hdr_func->ns->href); + smart_str_appendc(&key, ':'); + } + smart_str_appendl(&key, Z_STRVAL(h->function_name), Z_STRLEN(h->function_name)); + smart_str_0(&key); + if (zend_hash_find(fnb->input.headers, key.c, key.len+1, (void**)&hdr) == SUCCESS) { + h->hdr = *hdr; + } + smart_str_free(&key); + } } if (h->hdr) { h->num_params = 1; @@ -2500,7 +2500,7 @@ static sdlFunctionPtr deseralize_function_call(sdlPtr sdl, xmlDocPtr request, ch hdr_func = hdr_func->children; } } - deseralize_parameters(hdr_func, h->function, &h->num_params, &h->parameters); + deserialize_parameters(hdr_func, h->function, &h->num_params, &h->parameters); } INIT_ZVAL(h->retval); if (last == NULL) { @@ -2523,11 +2523,11 @@ ignore_header: } else { func = func->children; } - deseralize_parameters(func, function, num_params, parameters); + deserialize_parameters(func, function, num_params, parameters); return function; } -static int seralize_response_call2(xmlNodePtr body, sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version, int main TSRMLS_DC) +static int serialize_response_call2(xmlNodePtr body, sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version, int main TSRMLS_DC) { xmlNodePtr method = NULL, param; sdlParamPtr parameter = NULL; @@ -2575,13 +2575,13 @@ static int seralize_response_call2(xmlNodePtr body, sdlFunctionPtr function, cha if (main && version == SOAP_1_2) { xmlNs *rpc_ns = xmlNewNs(body, RPC_SOAP12_NAMESPACE, RPC_SOAP12_NS_PREFIX); rpc_result = xmlNewChild(method, rpc_ns, "result", NULL); - param = seralize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC); + param = serialize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC); xmlNodeSetContent(rpc_result,param->name); } else { - param = seralize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC); + param = serialize_parameter(parameter, ret, 0, "return", use, method TSRMLS_CC); } } else { - param = seralize_parameter(parameter, ret, 0, "return", use, body TSRMLS_CC); + param = serialize_parameter(parameter, ret, 0, "return", use, body TSRMLS_CC); if (function && function->binding->bindingType == BINDING_SOAP) { sdlParamPtr *sparam; @@ -2611,9 +2611,9 @@ static int seralize_response_call2(xmlNodePtr body, sdlFunctionPtr function, cha parameter = get_param(function, param_name, param_index, TRUE); if (style == SOAP_RPC) { - param = seralize_parameter(parameter, *data, i, param_name, use, method TSRMLS_CC); + param = serialize_parameter(parameter, *data, i, param_name, use, method TSRMLS_CC); } else { - param = seralize_parameter(parameter, *data, i, param_name, use, body TSRMLS_CC); + param = serialize_parameter(parameter, *data, i, param_name, use, body TSRMLS_CC); if (function && function->binding->bindingType == BINDING_SOAP) { sdlParamPtr *sparam; @@ -2635,7 +2635,7 @@ static int seralize_response_call2(xmlNodePtr body, sdlFunctionPtr function, cha return use; } -static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name, char *uri, zval *ret, soapHeader* headers, int version TSRMLS_DC) +static xmlDocPtr serialize_response_call(sdlFunctionPtr function, char *function_name, char *uri, zval *ret, soapHeader* headers, int version TSRMLS_DC) { xmlDocPtr doc; xmlNodePtr envelope = NULL, body, param; @@ -2657,7 +2657,7 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ ns = xmlNewNs(envelope, SOAP_1_2_ENV_NAMESPACE, SOAP_1_2_ENV_NS_PREFIX); xmlSetNs(envelope,ns); } else { - php_error(E_ERROR, "Unknown SOAP version"); + php_error(E_ERROR, "Unknown SOAP version"); } xmlDocSetRootElement(doc, envelope); @@ -2697,8 +2697,8 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ } if (zend_hash_find(prop, "detail", sizeof("detail"), (void**)&tmp) == SUCCESS && Z_TYPE_PP(tmp) != IS_NULL) { - /*FIXME: use = SOAP_ENCODED;*/ - seralize_zval(*tmp, NULL, "detail", use, param TSRMLS_CC); + /*FIXME: use = SOAP_ENCODED;*/ + serialize_zval(*tmp, NULL, "detail", use, param TSRMLS_CC); } } else { HashTable* prop; @@ -2724,7 +2724,7 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ } if (zend_hash_find(prop, "detail", sizeof("detail"), (void**)&tmp) == SUCCESS && Z_TYPE_PP(tmp) != IS_NULL) { - seralize_zval(*tmp, NULL, SOAP_1_2_ENV_NS_PREFIX":Detail", use, param TSRMLS_CC); + serialize_zval(*tmp, NULL, SOAP_1_2_ENV_NS_PREFIX":Detail", use, param TSRMLS_CC); } } } else { @@ -2783,7 +2783,7 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ } if (h->function) { - if (seralize_response_call2(head, h->function, Z_STRVAL(h->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) { + if (serialize_response_call2(head, h->function, Z_STRVAL(h->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) { use = SOAP_ENCODED; } } else { @@ -2808,7 +2808,7 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ body = xmlNewChild(envelope, ns, "Body", NULL); - if (seralize_response_call2(body, function, function_name, uri, ret, version, 1 TSRMLS_CC) == SOAP_ENCODED) { + if (serialize_response_call2(body, function, function_name, uri, ret, version, 1 TSRMLS_CC) == SOAP_ENCODED) { use = SOAP_ENCODED; } @@ -2828,7 +2828,7 @@ static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_ return doc; } -static xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC) +static xmlDocPtr serialize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version, HashTable *soap_headers TSRMLS_DC) { xmlDoc *doc; xmlNodePtr envelope = NULL, body, method = NULL, head = NULL; @@ -2903,9 +2903,9 @@ static xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, sdlParamPtr parameter = get_param(function, NULL, i, FALSE); if (style == SOAP_RPC) { - param = seralize_parameter(parameter, arguments[i], i, NULL, use, method TSRMLS_CC); + param = serialize_parameter(parameter, arguments[i], i, NULL, use, method TSRMLS_CC); } else if (style == SOAP_DOCUMENT) { - param = seralize_parameter(parameter, arguments[i], i, NULL, use, body TSRMLS_CC); + param = serialize_parameter(parameter, arguments[i], i, NULL, use, body TSRMLS_CC); if (function && function->binding->bindingType == BINDING_SOAP) { sdlParamPtr *sparam; @@ -2923,78 +2923,78 @@ static xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, zend_hash_internal_pointer_reset(soap_headers); while (zend_hash_get_current_data(soap_headers,(void**)&header) == SUCCESS) { - HashTable *ht = Z_OBJPROP_PP(header); - zval **name, **ns, **tmp; - - if (zend_hash_find(ht, "name", sizeof("name"), (void**)&name) == SUCCESS && - Z_TYPE_PP(name) == IS_STRING && - zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&ns) == SUCCESS && - Z_TYPE_PP(ns) == IS_STRING) { - xmlNodePtr h; - xmlNsPtr nsptr; - int hdr_use = SOAP_LITERAL; - encodePtr enc = NULL; - - if (hdrs) { - smart_str key = {0}; - sdlSoapBindingFunctionHeaderPtr *hdr; - - smart_str_appendl(&key, Z_STRVAL_PP(ns), Z_STRLEN_PP(ns)); - smart_str_appendc(&key, ':'); - smart_str_appendl(&key, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); - smart_str_0(&key); - if (zend_hash_find(hdrs, key.c, key.len+1,(void**)&hdr) == SUCCESS) { - hdr_use = (*hdr)->use; - enc = (*hdr)->encode; - if (hdr_use == SOAP_ENCODED) { - use = SOAP_ENCODED; - } - } - smart_str_free(&key); - } - - if (zend_hash_find(ht, "data", sizeof("data"), (void**)&tmp) == SUCCESS) { - h = master_to_xml(enc, *tmp, hdr_use, head); - xmlNodeSetName(h, Z_STRVAL_PP(name)); - } else { - h = xmlNewNode(NULL, Z_STRVAL_PP(name)); - xmlAddChild(head,h); - } - nsptr = encode_add_ns(h,Z_STRVAL_PP(ns)); + HashTable *ht = Z_OBJPROP_PP(header); + zval **name, **ns, **tmp; + + if (zend_hash_find(ht, "name", sizeof("name"), (void**)&name) == SUCCESS && + Z_TYPE_PP(name) == IS_STRING && + zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&ns) == SUCCESS && + Z_TYPE_PP(ns) == IS_STRING) { + xmlNodePtr h; + xmlNsPtr nsptr; + int hdr_use = SOAP_LITERAL; + encodePtr enc = NULL; + + if (hdrs) { + smart_str key = {0}; + sdlSoapBindingFunctionHeaderPtr *hdr; + + smart_str_appendl(&key, Z_STRVAL_PP(ns), Z_STRLEN_PP(ns)); + smart_str_appendc(&key, ':'); + smart_str_appendl(&key, Z_STRVAL_PP(name), Z_STRLEN_PP(name)); + smart_str_0(&key); + if (zend_hash_find(hdrs, key.c, key.len+1,(void**)&hdr) == SUCCESS) { + hdr_use = (*hdr)->use; + enc = (*hdr)->encode; + if (hdr_use == SOAP_ENCODED) { + use = SOAP_ENCODED; + } + } + smart_str_free(&key); + } + + if (zend_hash_find(ht, "data", sizeof("data"), (void**)&tmp) == SUCCESS) { + h = master_to_xml(enc, *tmp, hdr_use, head); + xmlNodeSetName(h, Z_STRVAL_PP(name)); + } else { + h = xmlNewNode(NULL, Z_STRVAL_PP(name)); + xmlAddChild(head,h); + } + nsptr = encode_add_ns(h,Z_STRVAL_PP(ns)); xmlSetNs(h, nsptr); - if (zend_hash_find(ht, "mustUnderstand", sizeof("mustUnderstand"), (void**)&tmp) == SUCCESS && - Z_TYPE_PP(tmp) == IS_BOOL && Z_LVAL_PP(tmp)) { - if (version == SOAP_1_1) { - xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":mustUnderstand","1"); - } else { - xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":mustUnderstand","true"); - } - } - if (zend_hash_find(ht, "actor", sizeof("actor"), (void**)&tmp) == SUCCESS) { - if (Z_TYPE_PP(tmp) == IS_STRING) { - if (version == SOAP_1_1) { - xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",Z_STRVAL_PP(tmp)); - } else { - xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",Z_STRVAL_PP(tmp)); - } - } else if (Z_TYPE_PP(tmp) == IS_LONG) { - if (version == SOAP_1_1) { - if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { - xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",SOAP_1_1_ACTOR_NEXT); - } - } else { - if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { - xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NEXT); - } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NONE) { - xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NONE); - } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_UNLIMATERECEIVER) { - xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_UNLIMATERECEIVER); - } - } - } - } - } + if (zend_hash_find(ht, "mustUnderstand", sizeof("mustUnderstand"), (void**)&tmp) == SUCCESS && + Z_TYPE_PP(tmp) == IS_BOOL && Z_LVAL_PP(tmp)) { + if (version == SOAP_1_1) { + xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":mustUnderstand","1"); + } else { + xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":mustUnderstand","true"); + } + } + if (zend_hash_find(ht, "actor", sizeof("actor"), (void**)&tmp) == SUCCESS) { + if (Z_TYPE_PP(tmp) == IS_STRING) { + if (version == SOAP_1_1) { + xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",Z_STRVAL_PP(tmp)); + } else { + xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",Z_STRVAL_PP(tmp)); + } + } else if (Z_TYPE_PP(tmp) == IS_LONG) { + if (version == SOAP_1_1) { + if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { + xmlSetProp(h, SOAP_1_1_ENV_NS_PREFIX":actor",SOAP_1_1_ACTOR_NEXT); + } + } else { + if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { + xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NEXT); + } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NONE) { + xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_NONE); + } else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_UNLIMATERECEIVER) { + xmlSetProp(h, SOAP_1_2_ENV_NS_PREFIX":role",SOAP_1_2_ACTOR_UNLIMATERECEIVER); + } + } + } + } + } zend_hash_move_forward(soap_headers); } } @@ -3016,7 +3016,7 @@ static xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, return doc; } -static xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int index, char *name, int style, xmlNodePtr parent TSRMLS_DC) +static xmlNodePtr serialize_parameter(sdlParamPtr param, zval *param_val, int index, char *name, int style, xmlNodePtr parent TSRMLS_DC) { char *paramName; xmlNodePtr xmlParam; @@ -3028,9 +3028,9 @@ static xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int ind zval **param_data; if (zend_hash_find(Z_OBJPROP_P(param_val), "param_name", sizeof("param_name"), (void **)¶m_name) == SUCCESS && - zend_hash_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data"), (void **)¶m_data) == SUCCESS) { - param_val = *param_data; - name = Z_STRVAL_PP(param_name); + zend_hash_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data"), (void **)¶m_data) == SUCCESS) { + param_val = *param_data; + name = Z_STRVAL_PP(param_name); } } @@ -3045,12 +3045,12 @@ static xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int ind } } - xmlParam = seralize_zval(param_val, param, paramName, style, parent TSRMLS_CC); + xmlParam = serialize_zval(param_val, param, paramName, style, parent TSRMLS_CC); return xmlParam; } -static xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC) +static xmlNodePtr serialize_zval(zval *val, sdlParamPtr param, char *paramName, int style, xmlNodePtr parent TSRMLS_DC) { xmlNodePtr xmlParam; encodePtr enc; @@ -3137,30 +3137,25 @@ static sdlFunctionPtr get_doc_function(sdlPtr sdl, xmlNodePtr params) zend_hash_internal_pointer_reset((*tmp)->requestParameters); while (zend_hash_get_current_data((*tmp)->requestParameters, (void**)¶m) == SUCCESS) { - if ((*param)->element) { - if (strcmp((*param)->element->name,node->name) != 0) { - ok = 0; - break; - } - if ((*param)->element->namens != NULL && node->ns != NULL) { - if (strcmp((*param)->element->namens,node->ns->href) != 0) { - ok = 0; - break; - } - } else if ((void*)(*param)->element->namens != (void*)node->ns) { - ok = 0; - break; - } - } else if (strcmp((*param)->paramName,node->name) != 0) { - ok = 0; - break; - } + if ((*param)->element) { + if (strcmp((*param)->element->name,node->name) != 0) { + ok = 0; + break; + } + if ((*param)->element->namens != NULL && node->ns != NULL) { + if (strcmp((*param)->element->namens,node->ns->href) != 0) { + ok = 0; + break; + } + } else if ((void*)(*param)->element->namens != (void*)node->ns) { + ok = 0; + break; + } + } else if (strcmp((*param)->paramName,node->name) != 0) { + ok = 0; + break; + } zend_hash_move_forward((*tmp)->requestParameters); -/* - do { - node = node->next; - } while (node != NULL && node->type != XML_ELEMENT_NODE); -*/ } if (ok /*&& node == NULL*/) { return (*tmp); @@ -3180,7 +3175,7 @@ static void function_to_string(sdlFunctionPtr function, smart_str *buf) HashPosition pos; sdlParamPtr *param; - if (function->responseParameters && + if (function->responseParameters && zend_hash_num_elements(function->responseParameters) > 0) { if (zend_hash_num_elements(function->responseParameters) == 1) { param = function->responseParameters->pListHead->pData; @@ -3244,7 +3239,7 @@ static void model_to_string(sdlContentModelPtr model, smart_str *buf, int level) switch (model->kind) { case XSD_CONTENT_ELEMENT: type_to_string(model->u.element, buf, level); - smart_str_appendl(buf, ";\n", 2); + smart_str_appendl(buf, ";\n", 2); break; case XSD_CONTENT_SEQUENCE: case XSD_CONTENT_ALL: @@ -3298,23 +3293,23 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) sizeof(SOAP_1_1_ENC_NAMESPACE":arrayType"), (void **)&attr) == SUCCESS && zend_hash_find((*attr)->extraAttributes, WSDL_NAMESPACE":arrayType", sizeof(WSDL_NAMESPACE":arrayType"), (void **)&ext) == SUCCESS) { - char *end = strchr((*ext)->val, '['); - int len; - if (end == NULL) { - len = strlen((*ext)->val); - } else { - len = end-(*ext)->val; - } - if (len == 0) { + char *end = strchr((*ext)->val, '['); + int len; + if (end == NULL) { + len = strlen((*ext)->val); + } else { + len = end-(*ext)->val; + } + if (len == 0) { smart_str_appendl(buf, "anyType", 7); } else { smart_str_appendl(buf, (*ext)->val, len); } smart_str_appendc(buf, ' '); smart_str_appendl(buf, type->name, strlen(type->name)); - if (end != NULL) { + if (end != NULL) { smart_str_appends(buf, end); - } + } } else { sdlTypePtr elementType; if (type->attributes && @@ -3360,15 +3355,15 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) enc->details.sdl_type->kind != XSD_TYPEKIND_UNION) { enc = enc->details.sdl_type->encode; } - if (enc) { + if (enc) { smart_str_appendl(buf, spaces.c, spaces.len); smart_str_appendc(buf, ' '); smart_str_appendl(buf, type->encode->details.type_str, strlen(type->encode->details.type_str)); - smart_str_appendl(buf, " _;\n", 4); + smart_str_appendl(buf, " _;\n", 4); } } if (type->model) { - model_to_string(type->model, buf, level+1); + model_to_string(type->model, buf, level+1); } if (type->attributes) { sdlAttributePtr *attr; @@ -3383,8 +3378,8 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) } else { smart_str_appendl(buf, "UNKNOWN ", 8); } - smart_str_appends(buf, (*attr)->name); - smart_str_appendl(buf, ";\n", 2); + smart_str_appends(buf, (*attr)->name); + smart_str_appendl(buf, ";\n", 2); zend_hash_move_forward_ex(type->attributes, &pos); } } |