version 1.1.1.2, 2012/05/29 12:34:42
|
version 1.1.1.4, 2013/10/14 08:02:30
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| PHP Version 5 | |
| PHP Version 5 | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1997-2012 The PHP Group | | | Copyright (c) 1997-2013 The PHP Group | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 3.01 of the PHP license, | |
| This source file is subject to version 3.01 of the PHP license, | |
| that is bundled with this package in the file LICENSE, and is | |
| that is bundled with this package in the file LICENSE, and is | |
Line 463 zend_module_entry soap_module_entry = {
|
Line 463 zend_module_entry soap_module_entry = {
|
ZEND_GET_MODULE(soap) |
ZEND_GET_MODULE(soap) |
#endif |
#endif |
|
|
ZEND_INI_MH(OnUpdateCacheEnabled) |
|
{ |
|
if (OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC) == FAILURE) { |
|
return FAILURE; |
|
} |
|
if (SOAP_GLOBAL(cache_enabled)) { |
|
SOAP_GLOBAL(cache) = SOAP_GLOBAL(cache_mode); |
|
} else { |
|
SOAP_GLOBAL(cache) = 0; |
|
} |
|
return SUCCESS; |
|
} |
|
|
|
ZEND_INI_MH(OnUpdateCacheMode) |
ZEND_INI_MH(OnUpdateCacheMode) |
{ |
{ |
char *p; |
char *p; |
Line 489 ZEND_INI_MH(OnUpdateCacheMode)
|
Line 476 ZEND_INI_MH(OnUpdateCacheMode)
|
|
|
*p = (char)atoi(new_value); |
*p = (char)atoi(new_value); |
|
|
if (SOAP_GLOBAL(cache_enabled)) { | return SUCCESS; |
SOAP_GLOBAL(cache) = SOAP_GLOBAL(cache_mode); | } |
} else { | |
SOAP_GLOBAL(cache) = 0; | static PHP_INI_MH(OnUpdateCacheDir) |
| { |
| /* Only do the open_basedir check at runtime */ |
| if (stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) { |
| char *p; |
| |
| if (memchr(new_value, '\0', new_value_length) != NULL) { |
| return FAILURE; |
| } |
| |
| /* we do not use zend_memrchr() since path can contain ; itself */ |
| if ((p = strchr(new_value, ';'))) { |
| char *p2; |
| p++; |
| if ((p2 = strchr(p, ';'))) { |
| p = p2 + 1; |
| } |
| } else { |
| p = new_value; |
| } |
| |
| if (PG(open_basedir) && *p && php_check_open_basedir(p TSRMLS_CC)) { |
| return FAILURE; |
| } |
} |
} |
|
|
|
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); |
return SUCCESS; |
return SUCCESS; |
} |
} |
|
|
PHP_INI_BEGIN() |
PHP_INI_BEGIN() |
STD_PHP_INI_ENTRY("soap.wsdl_cache_enabled", "1", PHP_INI_ALL, OnUpdateCacheEnabled, | STD_PHP_INI_ENTRY("soap.wsdl_cache_enabled", "1", PHP_INI_ALL, OnUpdateBool, |
cache_enabled, zend_soap_globals, soap_globals) |
cache_enabled, zend_soap_globals, soap_globals) |
STD_PHP_INI_ENTRY("soap.wsdl_cache_dir", "/tmp", PHP_INI_ALL, OnUpdateString, | STD_PHP_INI_ENTRY("soap.wsdl_cache_dir", "/tmp", PHP_INI_ALL, OnUpdateCacheDir, |
cache_dir, zend_soap_globals, soap_globals) |
cache_dir, zend_soap_globals, soap_globals) |
STD_PHP_INI_ENTRY("soap.wsdl_cache_ttl", "86400", PHP_INI_ALL, OnUpdateLong, |
STD_PHP_INI_ENTRY("soap.wsdl_cache_ttl", "86400", PHP_INI_ALL, OnUpdateLong, |
cache_ttl, zend_soap_globals, soap_globals) |
cache_ttl, zend_soap_globals, soap_globals) |
Line 1102 PHP_METHOD(SoapServer, SoapServer)
|
Line 1114 PHP_METHOD(SoapServer, SoapServer)
|
memset(service, 0, sizeof(soapService)); |
memset(service, 0, sizeof(soapService)); |
service->send_errors = 1; |
service->send_errors = 1; |
|
|
cache_wsdl = SOAP_GLOBAL(cache); | cache_wsdl = SOAP_GLOBAL(cache_enabled) ? SOAP_GLOBAL(cache_mode) : 0; |
|
|
if (options != NULL) { |
if (options != NULL) { |
HashTable *ht = Z_ARRVAL_P(options); |
HashTable *ht = Z_ARRVAL_P(options); |
Line 1272 PHP_METHOD(SoapServer, setClass)
|
Line 1284 PHP_METHOD(SoapServer, setClass)
|
} |
} |
} |
} |
} else { |
} else { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to set a non existant class (%s)", classname); | php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to set a non existent class (%s)", classname); |
return; |
return; |
} |
} |
|
|
Line 1403 PHP_METHOD(SoapServer, addFunction)
|
Line 1415 PHP_METHOD(SoapServer, addFunction)
|
zend_str_tolower_copy(key, Z_STRVAL_PP(tmp_function), key_len); |
zend_str_tolower_copy(key, Z_STRVAL_PP(tmp_function), key_len); |
|
|
if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) { |
if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to add a non existant function '%s'", Z_STRVAL_PP(tmp_function)); | php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to add a non existent function '%s'", Z_STRVAL_PP(tmp_function)); |
return; |
return; |
} |
} |
|
|
Line 1425 PHP_METHOD(SoapServer, addFunction)
|
Line 1437 PHP_METHOD(SoapServer, addFunction)
|
zend_str_tolower_copy(key, Z_STRVAL_P(function_name), key_len); |
zend_str_tolower_copy(key, Z_STRVAL_P(function_name), key_len); |
|
|
if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) { |
if (zend_hash_find(EG(function_table), key, key_len+1, (void**)&f) == FAILURE) { |
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to add a non existant function '%s'", Z_STRVAL_P(function_name)); | php_error_docref(NULL TSRMLS_CC, E_WARNING, "Tried to add a non existent function '%s'", Z_STRVAL_P(function_name)); |
return; |
return; |
} |
} |
if (service->soap_functions.ft == NULL) { |
if (service->soap_functions.ft == NULL) { |
Line 1657 PHP_METHOD(SoapServer, handle)
|
Line 1669 PHP_METHOD(SoapServer, handle)
|
} |
} |
} |
} |
#endif |
#endif |
/* If new session or something wierd happned */ | /* If new session or something weird happned */ |
if (soap_obj == NULL) { |
if (soap_obj == NULL) { |
zval *tmp_soap; |
zval *tmp_soap; |
|
|
Line 2318 PHP_METHOD(SoapClient, SoapClient)
|
Line 2330 PHP_METHOD(SoapClient, SoapClient)
|
php_error_docref(NULL TSRMLS_CC, E_ERROR, "$wsdl must be string or null"); |
php_error_docref(NULL TSRMLS_CC, E_ERROR, "$wsdl must be string or null"); |
} |
} |
|
|
cache_wsdl = SOAP_GLOBAL(cache); | cache_wsdl = SOAP_GLOBAL(cache_enabled) ? SOAP_GLOBAL(cache_mode) : 0; |
|
|
if (options != NULL) { |
if (options != NULL) { |
HashTable *ht = Z_ARRVAL_P(options); |
HashTable *ht = Z_ARRVAL_P(options); |
Line 3646 ignore_header:
|
Line 3658 ignore_header:
|
return function; |
return function; |
} |
} |
|
|
static int serialize_response_call2(xmlNodePtr body, sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version, int main TSRMLS_DC) | static void set_soap_header_attributes(xmlNodePtr h, HashTable *ht, int version) |
{ |
{ |
|
zval **tmp; |
|
|
|
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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":mustUnderstand"), BAD_CAST("1")); |
|
} else { |
|
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":mustUnderstand"), BAD_CAST("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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":actor"), BAD_CAST(Z_STRVAL_PP(tmp))); |
|
} else { |
|
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":actor"), BAD_CAST(SOAP_1_1_ACTOR_NEXT)); |
|
} |
|
} else { |
|
if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { |
|
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_NEXT)); |
|
} else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NONE) { |
|
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_NONE)); |
|
} else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_UNLIMATERECEIVER) { |
|
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_UNLIMATERECEIVER)); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
static int serialize_response_call2(xmlNodePtr body, sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version, int main, xmlNodePtr *node TSRMLS_DC) |
|
{ |
xmlNodePtr method = NULL, param; |
xmlNodePtr method = NULL, param; |
sdlParamPtr parameter = NULL; |
sdlParamPtr parameter = NULL; |
int param_count; |
int param_count; |
Line 3746 static int serialize_response_call2(xmlNodePtr body, s
|
Line 3795 static int serialize_response_call2(xmlNodePtr body, s
|
if (use == SOAP_ENCODED && version == SOAP_1_2 && method != NULL) { |
if (use == SOAP_ENCODED && version == SOAP_1_2 && method != NULL) { |
xmlSetNsProp(method, body->ns, BAD_CAST("encodingStyle"), BAD_CAST(SOAP_1_2_ENC_NAMESPACE)); |
xmlSetNsProp(method, body->ns, BAD_CAST("encodingStyle"), BAD_CAST(SOAP_1_2_ENC_NAMESPACE)); |
} |
} |
|
if (node) { |
|
*node = method; |
|
} |
return use; |
return use; |
} |
} |
|
|
Line 3827 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 3879 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
} |
} |
|
|
if (headers->function) { |
if (headers->function) { |
if (serialize_response_call2(head, headers->function, Z_STRVAL(headers->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) { | if (serialize_response_call2(head, headers->function, Z_STRVAL(headers->function_name), uri, hdr_ret, version, 0, NULL TSRMLS_CC) == SOAP_ENCODED) { |
use = SOAP_ENCODED; |
use = SOAP_ENCODED; |
} |
} |
} else { |
} else { |
Line 3897 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 3949 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
|
|
if (version == SOAP_1_1) { |
if (version == SOAP_1_1) { |
if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) { |
if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) { |
int new_len; | size_t new_len; |
xmlNodePtr node = xmlNewNode(NULL, BAD_CAST("faultcode")); |
xmlNodePtr node = xmlNewNode(NULL, BAD_CAST("faultcode")); |
char *str = php_escape_html_entities((unsigned char*)Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC); |
char *str = php_escape_html_entities((unsigned char*)Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC); |
xmlAddChild(param, node); |
xmlAddChild(param, node); |
Line 3907 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 3959 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
xmlNodeSetContent(node, code); |
xmlNodeSetContent(node, code); |
xmlFree(code); |
xmlFree(code); |
} else { |
} else { |
xmlNodeSetContentLen(node, BAD_CAST(str), new_len); | xmlNodeSetContentLen(node, BAD_CAST(str), (int)new_len); |
} |
} |
efree(str); |
efree(str); |
} |
} |
Line 3922 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 3974 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
detail_name = "detail"; |
detail_name = "detail"; |
} else { |
} else { |
if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) { |
if (zend_hash_find(prop, "faultcode", sizeof("faultcode"), (void**)&tmp) == SUCCESS) { |
int new_len; | size_t new_len; |
xmlNodePtr node = xmlNewChild(param, ns, BAD_CAST("Code"), NULL); |
xmlNodePtr node = xmlNewChild(param, ns, BAD_CAST("Code"), NULL); |
char *str = php_escape_html_entities((unsigned char*)Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC); |
char *str = php_escape_html_entities((unsigned char*)Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), &new_len, 0, 0, NULL TSRMLS_CC); |
node = xmlNewChild(node, ns, BAD_CAST("Value"), NULL); |
node = xmlNewChild(node, ns, BAD_CAST("Value"), NULL); |
Line 3932 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 3984 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
xmlNodeSetContent(node, code); |
xmlNodeSetContent(node, code); |
xmlFree(code); |
xmlFree(code); |
} else { |
} else { |
xmlNodeSetContentLen(node, BAD_CAST(str), new_len); | xmlNodeSetContentLen(node, BAD_CAST(str), (int)new_len); |
} |
} |
efree(str); |
efree(str); |
} |
} |
Line 4013 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 4065 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
zval *hdr_ret = &h->retval; |
zval *hdr_ret = &h->retval; |
char *hdr_ns = h->hdr?h->hdr->ns:NULL; |
char *hdr_ns = h->hdr?h->hdr->ns:NULL; |
char *hdr_name = Z_STRVAL(h->function_name); |
char *hdr_name = Z_STRVAL(h->function_name); |
|
HashTable *ht = NULL; |
|
|
|
|
if (Z_TYPE(h->retval) == IS_OBJECT && |
if (Z_TYPE(h->retval) == IS_OBJECT && |
instanceof_function(Z_OBJCE(h->retval), soap_header_class_entry TSRMLS_CC)) { |
instanceof_function(Z_OBJCE(h->retval), soap_header_class_entry TSRMLS_CC)) { |
HashTable* ht = Z_OBJPROP(h->retval); |
|
zval **tmp; |
zval **tmp; |
sdlSoapBindingFunctionHeaderPtr *hdr; |
sdlSoapBindingFunctionHeaderPtr *hdr; |
smart_str key = {0}; |
smart_str key = {0}; |
|
|
|
ht = Z_OBJPROP(h->retval); |
if (zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&tmp) == SUCCESS && |
if (zend_hash_find(ht, "namespace", sizeof("namespace"), (void**)&tmp) == SUCCESS && |
Z_TYPE_PP(tmp) == IS_STRING) { |
Z_TYPE_PP(tmp) == IS_STRING) { |
smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); |
smart_str_appendl(&key, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); |
Line 4052 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 4104 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
} |
} |
|
|
if (h->function) { |
if (h->function) { |
if (serialize_response_call2(head, h->function, Z_STRVAL(h->function_name), uri, hdr_ret, version, 0 TSRMLS_CC) == SOAP_ENCODED) { | xmlNodePtr xmlHdr = NULL; |
| |
| if (serialize_response_call2(head, h->function, Z_STRVAL(h->function_name), uri, hdr_ret, version, 0, &xmlHdr TSRMLS_CC) == SOAP_ENCODED) { |
use = SOAP_ENCODED; |
use = SOAP_ENCODED; |
} |
} |
|
if (ht) { |
|
set_soap_header_attributes(xmlHdr, ht, version); |
|
} |
} else { |
} else { |
xmlNodePtr xmlHdr = master_to_xml(hdr_enc, hdr_ret, hdr_use, head TSRMLS_CC); |
xmlNodePtr xmlHdr = master_to_xml(hdr_enc, hdr_ret, hdr_use, head TSRMLS_CC); |
if (hdr_name) { |
if (hdr_name) { |
Line 4064 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 4121 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
xmlNsPtr nsptr = encode_add_ns(xmlHdr,hdr_ns); |
xmlNsPtr nsptr = encode_add_ns(xmlHdr,hdr_ns); |
xmlSetNs(xmlHdr, nsptr); |
xmlSetNs(xmlHdr, nsptr); |
} |
} |
|
if (ht) { |
|
set_soap_header_attributes(xmlHdr, ht, version); |
|
} |
} |
} |
} |
} |
h = h->next; |
h = h->next; |
Line 4077 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
Line 4137 static xmlDocPtr serialize_response_call(sdlFunctionPt
|
|
|
body = xmlNewChild(envelope, ns, BAD_CAST("Body"), NULL); |
body = xmlNewChild(envelope, ns, BAD_CAST("Body"), NULL); |
|
|
if (serialize_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, NULL TSRMLS_CC) == SOAP_ENCODED) { |
use = SOAP_ENCODED; |
use = SOAP_ENCODED; |
} |
} |
|
|
Line 4269 static xmlDocPtr serialize_function_call(zval *this_pt
|
Line 4329 static xmlDocPtr serialize_function_call(zval *this_pt
|
} |
} |
nsptr = encode_add_ns(h, Z_STRVAL_PP(ns)); |
nsptr = encode_add_ns(h, Z_STRVAL_PP(ns)); |
xmlSetNs(h, nsptr); |
xmlSetNs(h, nsptr); |
| set_soap_header_attributes(h, ht, version); |
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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":mustUnderstand"), BAD_CAST("1")); | |
} else { | |
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":mustUnderstand"), BAD_CAST("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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":actor"), BAD_CAST(Z_STRVAL_PP(tmp))); | |
} else { | |
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(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, BAD_CAST(SOAP_1_1_ENV_NS_PREFIX":actor"), BAD_CAST(SOAP_1_1_ACTOR_NEXT)); | |
} | |
} else { | |
if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NEXT) { | |
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_NEXT)); | |
} else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_NONE) { | |
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_NONE)); | |
} else if (Z_LVAL_PP(tmp) == SOAP_ACTOR_UNLIMATERECEIVER) { | |
xmlSetProp(h, BAD_CAST(SOAP_1_2_ENV_NS_PREFIX":role"), BAD_CAST(SOAP_1_2_ACTOR_UNLIMATERECEIVER)); | |
} | |
} | |
} | |
} | |
} |
} |
zend_hash_move_forward(soap_headers); |
zend_hash_move_forward(soap_headers); |
} |
} |