dmitry Fri Feb 13 10:19:11 2004 EDT Modified files: /php-src/ext/soap TODO php_encoding.c php_encoding.h php_schema.c php_sdl.c php_sdl.h php_xml.c soap.c Log: Source cleanup
http://cvs.php.net/diff.php/php-src/ext/soap/TODO?r1=1.43&r2=1.44&ty=u Index: php-src/ext/soap/TODO diff -u php-src/ext/soap/TODO:1.43 php-src/ext/soap/TODO:1.44 --- php-src/ext/soap/TODO:1.43 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/TODO Fri Feb 13 10:19:09 2004 @@ -7,11 +7,8 @@ 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 @@ Interop Testing --------------- -- more introp rounds/groups +- more interop rounds/groups UDDI ---- http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.c?r1=1.55&r2=1.56&ty=u Index: php-src/ext/soap/php_encoding.c diff -u php-src/ext/soap/php_encoding.c:1.55 php-src/ext/soap/php_encoding.c:1.56 --- php-src/ext/soap/php_encoding.c:1.55 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/php_encoding.c Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.c,v 1.55 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: php_encoding.c,v 1.56 2004/02/13 15:19:09 dmitry Exp $ */ #include <time.h> @@ -80,6 +80,8 @@ 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_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 @@ --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 @@ 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 @@ 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 @@ } 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 @@ } 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 @@ } } 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ } 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 @@ } 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 @@ 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 @@ 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_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 @@ 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; } http://cvs.php.net/diff.php/php-src/ext/soap/php_encoding.h?r1=1.33&r2=1.34&ty=u Index: php-src/ext/soap/php_encoding.h diff -u php-src/ext/soap/php_encoding.h:1.33 php-src/ext/soap/php_encoding.h:1.34 --- php-src/ext/soap/php_encoding.h:1.33 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/php_encoding.h Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_encoding.h,v 1.33 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: php_encoding.h,v 1.34 2004/02/13 15:19:09 dmitry Exp $ */ #ifndef PHP_ENCODING_H #define PHP_ENCODING_H @@ -203,17 +203,9 @@ 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[]; http://cvs.php.net/diff.php/php-src/ext/soap/php_schema.c?r1=1.42&r2=1.43&ty=u Index: php-src/ext/soap/php_schema.c diff -u php-src/ext/soap/php_schema.c:1.42 php-src/ext/soap/php_schema.c:1.43 --- php-src/ext/soap/php_schema.c:1.42 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/php_schema.c Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_schema.c,v 1.42 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: php_schema.c,v 1.43 2004/02/13 15:19:09 dmitry Exp $ */ #include "php_soap.h" #include "libxml/uri.h" @@ -90,17 +90,13 @@ { 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 @@ 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 @@ 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 @@ 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 @@ } } 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 @@ continue; */ } else { - break; + break; } trav = trav->next; } @@ -470,7 +466,7 @@ 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 @@ 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 @@ } else { break; } - trav = trav->next; + trav = trav->next; } if (!simpleType) { while (trav != NULL) { http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.c?r1=1.58&r2=1.59&ty=u Index: php-src/ext/soap/php_sdl.c diff -u php-src/ext/soap/php_sdl.c:1.58 php-src/ext/soap/php_sdl.c:1.59 --- php-src/ext/soap/php_sdl.c:1.58 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/php_sdl.c Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.c,v 1.58 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: php_sdl.c,v 1.59 2004/02/13 15:19:09 dmitry Exp $ */ #include "php_soap.h" #include "libxml/uri.h" @@ -39,15 +39,35 @@ 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(); + xmlNsPtr nsptr; + char *ns, *cptype; - enc = get_conversion_from_type(data, type); - if (enc == NULL && sdl) { - enc = get_conversion_from_type_ex(sdl->encoders, data, type); + 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 @@ 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); + + memcpy(nscat, nsptr->href, ns_len); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, cptype, type_len); + nscat[len] = '\0'; - smart_str_appends(&nscat, nsptr->href); - smart_str_appendc(&nscat, ':'); - smart_str_appends(&nscat, cptype); - smart_str_0(&nscat); - - 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 enc = NULL; char *nscat; + int ns_len = strlen(ns); + int type_len = strlen(type); + int len = ns_len + type_len + 1; + + nscat = do_alloca(len + 1); + memcpy(nscat, ns, ns_len); + nscat[ns_len] = ':'; + memcpy(nscat+ns_len+1, type, type_len); + nscat[len] = '\0'; - nscat = emalloc(strlen(ns) + strlen(type) + 2); - sprintf(nscat, "%s:%s", ns, type); - - 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 @@ xmlAttrPtr targetNamespace; if (zend_hash_exists(&ctx->docs, struri, strlen(struri)+1)) { - return; + return; } wsdl = soap_xmlParseFile(struri); @@ -225,17 +255,17 @@ /* 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ efree(tmp); } -void delete_sdl_ptr(void *handle) -{ - delete_sdl((sdlPtr*)handle); -} - static void delete_binding(void *data) { sdlBindingPtr binding = *((sdlBindingPtr*)data); http://cvs.php.net/diff.php/php-src/ext/soap/php_sdl.h?r1=1.28&r2=1.29&ty=u Index: php-src/ext/soap/php_sdl.h diff -u php-src/ext/soap/php_sdl.h:1.28 php-src/ext/soap/php_sdl.h:1.29 --- php-src/ext/soap/php_sdl.h:1.28 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/php_sdl.h Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_sdl.h,v 1.28 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: php_sdl.h,v 1.29 2004/02/13 15:19:09 dmitry Exp $ */ #ifndef PHP_SDL_H #define PHP_SDL_H @@ -228,12 +228,11 @@ 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 http://cvs.php.net/diff.php/php-src/ext/soap/php_xml.c?r1=1.21&r2=1.22&ty=u Index: php-src/ext/soap/php_xml.c diff -u php-src/ext/soap/php_xml.c:1.21 php-src/ext/soap/php_xml.c:1.22 --- php-src/ext/soap/php_xml.c:1.21 Fri Feb 6 11:52:14 2004 +++ php-src/ext/soap/php_xml.c Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: php_xml.c,v 1.21 2004/02/06 16:52:14 dmitry Exp $ */ +/* $Id: php_xml.c,v 1.22 2004/02/13 15:19:09 dmitry Exp $ */ #include "php_soap.h" #include "libxml/parser.h" @@ -78,7 +78,7 @@ xmlDocPtr soap_xmlParseFile(const char *filename) { - xmlParserCtxtPtr ctxt = NULL; + xmlParserCtxtPtr ctxt = NULL; xmlDocPtr ret; /* @@ -105,7 +105,7 @@ } xmlFreeParserCtxt(ctxt); } else { - ret = NULL; + ret = NULL; } /* @@ -120,7 +120,7 @@ xmlDocPtr soap_xmlParseMemory(const void *buf, size_t buf_size) { - xmlParserCtxtPtr ctxt = NULL; + xmlParserCtxtPtr ctxt = NULL; xmlDocPtr ret; /* @@ -146,7 +146,7 @@ } xmlFreeParserCtxt(ctxt); } else { - ret = NULL; + ret = NULL; } /* http://cvs.php.net/diff.php/php-src/ext/soap/soap.c?r1=1.83&r2=1.84&ty=u Index: php-src/ext/soap/soap.c diff -u php-src/ext/soap/soap.c:1.83 php-src/ext/soap/soap.c:1.84 --- php-src/ext/soap/soap.c:1.83 Fri Feb 13 06:03:58 2004 +++ php-src/ext/soap/soap.c Fri Feb 13 10:19:09 2004 @@ -17,7 +17,7 @@ | Dmitry Stogov <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ */ -/* $Id: soap.c,v 1.83 2004/02/13 11:03:58 dmitry Exp $ */ +/* $Id: soap.c,v 1.84 2004/02/13 15:19:09 dmitry Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -56,11 +56,11 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 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 @@ 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 @@ 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 (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 (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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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 @@ } 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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; + 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; - 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)); + 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 @@ 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 @@ 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 @@ } } - 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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); } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php