summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/soap/TODO7
-rw-r--r--ext/soap/php_encoding.c173
-rw-r--r--ext/soap/php_encoding.h8
-rw-r--r--ext/soap/php_schema.c28
-rw-r--r--ext/soap/php_sdl.c135
-rw-r--r--ext/soap/php_sdl.h3
-rw-r--r--ext/soap/php_xml.c8
-rw-r--r--ext/soap/soap.c323
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, &params, &soap_version, &soap_headers TSRMLS_CC);
+ function = deserialize_function_call(service->sdl, doc_request, service->actor, &function_name, &num_params, &params, &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 **)&param_name) == SUCCESS &&
- zend_hash_find(Z_OBJPROP_P(param_val), "param_data", sizeof("param_data"), (void **)&param_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 **)&param_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**)&param) == 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);
}
}