diff options
-rw-r--r-- | ext/soap/php_packet_soap.c | 33 | ||||
-rw-r--r-- | ext/soap/php_schema.c | 25 | ||||
-rw-r--r-- | ext/soap/php_schema.h | 3 | ||||
-rw-r--r-- | ext/soap/php_sdl.c | 58 | ||||
-rw-r--r-- | ext/soap/php_sdl.h | 14 | ||||
-rw-r--r-- | ext/soap/php_soap.h | 154 | ||||
-rw-r--r-- | ext/soap/php_xml.h | 32 | ||||
-rw-r--r-- | ext/soap/soap.c | 182 |
8 files changed, 187 insertions, 314 deletions
diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c index 76d1ccdf93..0179ff1828 100644 --- a/ext/soap/php_packet_soap.c +++ b/ext/soap/php_packet_soap.c @@ -116,19 +116,21 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction } /* Parse content of <Body> element */ + array_init(return_value); resp = body->children; - if (fn != NULL) { - /* Function has WSDL description */ - sdlParamPtr *h_param, param = NULL; - xmlNodePtr val = NULL; - char *name, *ns = NULL; - zval* tmp; - - if (fn->binding->bindingType == BINDING_SOAP) { + while (resp != NULL && resp->type != XML_ELEMENT_NODE) { + resp = resp->next; + } + if (resp != NULL) { + if (fn != NULL && fn->binding && fn->binding->bindingType == BINDING_SOAP) { + /* Function has WSDL description */ + sdlParamPtr *h_param, param = NULL; + xmlNodePtr val = NULL; + char *name, *ns = NULL; + zval* tmp; sdlSoapBindingFunctionPtr fnb = (sdlSoapBindingFunctionPtr)fn->bindingAttributes; int res_count = zend_hash_num_elements(fn->responseParameters); - array_init(return_value); zend_hash_internal_pointer_reset(fn->responseParameters); while (zend_hash_get_current_data(fn->responseParameters, (void **)&h_param) == SUCCESS) { param = (*h_param); @@ -184,17 +186,10 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction zend_hash_move_forward(fn->responseParameters); } - } - } else { - /* Function hasn't WSDL description */ - cur = resp; - array_init(return_value); - while (cur && cur->type != XML_ELEMENT_NODE) { - cur = cur->next; - } - if (cur != NULL) { + } else { + /* Function hasn't WSDL description */ xmlNodePtr val; - val = cur->children; + val = resp->children; while (val != NULL) { while (val && val->type != XML_ELEMENT_NODE) { val = val->next; diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c index 054b5085cc..4d2e3a373f 100644 --- a/ext/soap/php_schema.c +++ b/ext/soap/php_schema.c @@ -447,17 +447,6 @@ static int schema_restriction_var_int(xmlNodePtr val, sdlRestrictionIntPtr *valp return TRUE; } -void delete_restriction_var_int(void *rvi) -{ - sdlRestrictionIntPtr ptr = *((sdlRestrictionIntPtr*)rvi); - if (ptr) { - if (ptr->id) { - free(ptr->id); - } - free(ptr); - } -} - static int schema_restriction_var_char(xmlNodePtr val, sdlRestrictionCharPtr *valptr) { xmlAttrPtr fixed, value, id; @@ -490,20 +479,6 @@ static int schema_restriction_var_char(xmlNodePtr val, sdlRestrictionCharPtr *va return TRUE; } -void delete_schema_restriction_var_char(void *srvc) -{ - sdlRestrictionCharPtr ptr = *((sdlRestrictionCharPtr*)srvc); - if (ptr) { - if (ptr->id) { - free(ptr->id); - } - if (ptr->value) { - free(ptr->value); - } - free(ptr); - } -} - /* From simpleContent (not supported): <extension diff --git a/ext/soap/php_schema.h b/ext/soap/php_schema.h index a0c874c0dc..e094b5f3ea 100644 --- a/ext/soap/php_schema.h +++ b/ext/soap/php_schema.h @@ -3,7 +3,4 @@ int load_schema(sdlPtr *sdl,xmlNodePtr schema); -void delete_restriction_var_int(void *rvi); -void delete_schema_restriction_var_char(void *srvc); - #endif diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index 9919a0f96d..f73001eccf 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -134,8 +134,9 @@ static xmlNodePtr sdl_to_xml_object(encodeType enc_type, zval *data, int style) zval **prop; tmp = *t; if (zend_hash_find(Z_OBJPROP_P(data), tmp->name, strlen(tmp->name) + 1, (void **)&prop) == FAILURE) { - if (tmp->nillable == FALSE) + if (tmp->nillable == FALSE) { php_error(E_ERROR, "Error encoding object to xml missing property \"%s\"", tmp->name); + } } else { xmlNodePtr newNode; encodePtr enc; @@ -588,17 +589,19 @@ static sdlPtr load_wsdl(char *struri) zend_hash_internal_pointer_reset(&ctx.services); for (i = 0; i < n; i++) { xmlNodePtr *tmp, service; +/* xmlAttrPtr name; +*/ xmlNodePtr trav, port; zend_hash_get_current_data(&ctx.services, (void **)&tmp); service = *tmp; - +/* name = get_attribute(service->properties, "name"); if (!name) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: No name associated with service"); } - +*/ trav = service->children; FOREACHNODE(trav, "port", port) { xmlAttrPtr type, name, bindingAttr, location; @@ -609,12 +612,12 @@ static sdlPtr load_wsdl(char *struri) tmpbinding = malloc(sizeof(sdlBinding)); memset(tmpbinding, 0, sizeof(sdlBinding)); - +/* name = get_attribute(port->properties, "name"); if (!name) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: No name associated with port"); } - +*/ bindingAttr = get_attribute(port->properties, "binding"); if (bindingAttr == NULL) { php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: No binding associated with port"); @@ -637,6 +640,12 @@ static sdlPtr load_wsdl(char *struri) tmpbinding->bindingType = BINDING_SOAP; } else if (address->ns && !strcmp(address->ns->href, WSDL_HTTP_NAMESPACE)) { tmpbinding->bindingType = BINDING_HTTP; + } else { + if (address->ns) { + php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: PHP-SOAP doesn't support binding '%s'",address->ns->href); + } else { + php_error(E_ERROR, "SOAP-ERROR: Parsing WSDL: Unknown binding type"); + } } parse_namespace(bindingAttr->children->content, &ctype, &ns); @@ -655,14 +664,13 @@ static sdlPtr load_wsdl(char *struri) soapBinding = malloc(sizeof(sdlSoapBinding)); memset(soapBinding, 0, sizeof(sdlSoapBinding)); + soapBinding->style = SOAP_RPC; soapBindingNode = get_node_ex(binding->children, "binding", WSDL_SOAP_NAMESPACE); if (soapBindingNode) { tmp = get_attribute(soapBindingNode->properties, "style"); if (tmp && !strcmp(tmp->children->content, "document")) { soapBinding->style = SOAP_DOCUMENT; - } else { - soapBinding->style = SOAP_RPC; } tmp = get_attribute(soapBindingNode->properties, "transport"); @@ -672,15 +680,14 @@ static sdlPtr load_wsdl(char *struri) } soapBinding->transport = strdup(tmp->children->content); } - tmpbinding->bindingAttributes = (void *)soapBinding; } + tmpbinding->bindingAttributes = (void *)soapBinding; } name = get_attribute(binding->properties, "name"); if (name == NULL) { php_error(E_ERROR, "Error parsing wsdl (Missing \"name\" attribute for \"binding\")"); } - tmpbinding->name = strdup(name->children->content); type = get_attribute(binding->properties, "type"); @@ -763,6 +770,7 @@ static sdlPtr load_wsdl(char *struri) php_error(E_ERROR, "Error parsing wsdl (Missing name for \"input\" of \"%s\")", op_name->children->content); } + /* FIXME: may be input message name */ function->requestName = strdup(function->functionName); function->requestParameters = malloc(sizeof(HashTable)); zend_hash_init(function->requestParameters, 0, NULL, delete_paramater, 1); @@ -840,7 +848,7 @@ static sdlPtr load_wsdl(char *struri) paramOrder = get_attribute(portTypeOperation->properties, "parameterOrder"); if (paramOrder) { - + /* FIXME: */ } } @@ -850,6 +858,7 @@ static sdlPtr load_wsdl(char *struri) xmlNodePtr part, trav3; char *ns, *ctype; + /* FIXME: may be output message name */ function->responseName = malloc(strlen(function->functionName) + strlen("Response") + 1); sprintf(function->responseName, "%sResponse", function->functionName); function->responseParameters = malloc(sizeof(HashTable)); @@ -1020,7 +1029,9 @@ static void delete_binding(void *data) if (binding->bindingType == BINDING_SOAP) { sdlSoapBindingPtr soapBind = binding->bindingAttributes; - free(soapBind->transport); + if (soapBind && soapBind->transport) { + free(soapBind->transport); + } } } @@ -1186,6 +1197,31 @@ void delete_attribute(void *attribute) } } +void delete_restriction_var_int(void *rvi) +{ + sdlRestrictionIntPtr ptr = *((sdlRestrictionIntPtr*)rvi); + if (ptr) { + if (ptr->id) { + free(ptr->id); + } + free(ptr); + } +} + +void delete_schema_restriction_var_char(void *srvc) +{ + sdlRestrictionCharPtr ptr = *((sdlRestrictionCharPtr*)srvc); + if (ptr) { + if (ptr->id) { + free(ptr->id); + } + if (ptr->value) { + free(ptr->value); + } + free(ptr); + } +} + static void delete_document(void *doc_ptr) { xmlDocPtr doc = *((xmlDocPtr*)doc_ptr); diff --git a/ext/soap/php_sdl.h b/ext/soap/php_sdl.h index f644efa3f0..1e7baf7273 100644 --- a/ext/soap/php_sdl.h +++ b/ext/soap/php_sdl.h @@ -15,11 +15,11 @@ #define SOAP_LITERAL 2 struct _sdl { - HashTable docs; /* pointer to the parsed xml file */ - HashTable functions; /* array of sdlFunction */ - HashTable *types; /* array of sdlTypesPtr */ - HashTable *encoders; /* array of encodePtr */ - HashTable *bindings; /* array of sdlBindings (key'd by name) */ + HashTable docs; /* pointer to the parsed xml file */ + HashTable functions; /* array of sdlFunction */ + HashTable *types; /* array of sdlTypesPtr */ + HashTable *encoders; /* array of encodePtr */ + HashTable *bindings; /* array of sdlBindings (key'd by name) */ char *target_ns; char *source; }; @@ -113,7 +113,6 @@ struct _sdlFunction { HashTable *requestParameters; /* array of sdlParamPtr */ HashTable *responseParameters; /* array of sdlParamPtr (this should only be one) */ struct _sdlBinding* binding; -// int bindingType; void* bindingAttributes; /* sdlSoapBindingFunctionPtr */ }; @@ -147,4 +146,7 @@ void delete_sdl(void *handle); void delete_type(void *type); void delete_attribute(void *attribute); void delete_mapping(void *data); +void delete_restriction_var_int(void *rvi); +void delete_schema_restriction_var_char(void *srvc); + #endif diff --git a/ext/soap/php_soap.h b/ext/soap/php_soap.h index dad9326841..b15c57a119 100644 --- a/ext/soap/php_soap.h +++ b/ext/soap/php_soap.h @@ -52,11 +52,6 @@ typedef struct _soapService soapService, *soapServicePtr; #include "php_http.h" #include "php_packet_soap.h" -extern int le_sdl; -extern int le_http_socket; -extern int le_url; -extern int le_service; - struct _soapHeaderHandler { char *ns; int type; @@ -108,7 +103,6 @@ struct _soapService { HashTable *mapping; int type; - int enabled; char *uri; }; @@ -137,6 +131,7 @@ ZEND_BEGIN_MODULE_GLOBALS(soap) sdlPtr sdl; zend_bool use_soap_error_handler; ZEND_END_MODULE_GLOBALS(soap) + #ifdef PHP_WIN32 #define PHP_SOAP_API __declspec(dllexport) #else @@ -148,6 +143,7 @@ ZEND_END_MODULE_GLOBALS(soap) extern zend_module_entry soap_module_entry; #define soap_module_ptr &soap_module_entry +#define phpext_soap_ptr soap_module_ptr ZEND_EXTERN_MODULE_GLOBALS(soap); @@ -157,154 +153,8 @@ ZEND_EXTERN_MODULE_GLOBALS(soap); # define SOAP_GLOBAL(v) (soap_globals.v) #endif -#define DECLARE_TRACE(file) \ - FILE *trace_fp; \ - char *trace_file = file; - -#define TRACE(place) \ - trace_fp = fopen(trace_file, "a+"); \ - fwrite(place, strlen(place), 1, trace_fp); \ - fclose(trace_fp); - extern zend_class_entry* soap_var_class_entry; -PS_SERIALIZER_FUNCS(soap); - -void clear_soap_fault(zval *obj TSRMLS_DC); -void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); -sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int); -sdlFunctionPtr get_function(sdlPtr sdl, char *function_name); - -void delete_service(void *service); -void delete_http_socket(void *handle); -void delete_url(void *handle); - -#ifndef ZEND_ENGINE_2 -void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference); -zval soap_get_property_handler(zend_property_reference *property_reference); -int soap_set_property_handler(zend_property_reference *property_reference, zval *value); -#endif -void soap_destructor(void *jobject); - -void deseralize_function_call(sdlPtr sdl, xmlDocPtr request, zval *function_name, int *num_params, zval **parameters[], int *version TSRMLS_DC); -xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name,char *uri,zval *ret, int version TSRMLS_DC); -xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, int version TSRMLS_DC); -xmlNodePtr seralize_parameter(sdlParamPtr param,zval *param_val,int index,char *name, int style TSRMLS_DC); -xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style TSRMLS_DC); - -void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args); -#ifndef ZEND_ENGINE_2 -int my_call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC); -#endif - -#define phpext_soap_ptr soap_module_ptr - -#define HTTP_RAW_POST_DATA "HTTP_RAW_POST_DATA" - -#define SOAP_SERVER_BEGIN_CODE() \ - zend_bool old_handler = SOAP_GLOBAL(use_soap_error_handler);\ - SOAP_GLOBAL(use_soap_error_handler) = 1; - -#define SOAP_SERVER_END_CODE() \ - SOAP_GLOBAL(use_soap_error_handler) = old_handler - - -#define FOREACHATTRNODE(n,c,i) \ - do { \ - if (n == NULL) { \ - break; \ - } \ - if (c) { \ - i = get_attribute(n,c); \ - } else { \ - i = n; \ - } \ - if (i != NULL) { \ - n = i; - -#define FOREACHNODE(n,c,i) \ - do { \ - if (n == NULL) { \ - break; \ - } \ - if (c) { \ - i = get_node(n,c); \ - } else { \ - i = n; \ - } \ - if(i != NULL) { \ - n = i; - -#define ENDFOREACH(n) \ - } \ - } while ((n = n->next)); - -#define ZERO_PARAM() \ - if (ZEND_NUM_ARGS() != 0) \ - WRONG_PARAM_COUNT; - -#define ONE_PARAM(p) \ - if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &p) == FAILURE) \ - WRONG_PARAM_COUNT; - -#define TWO_PARAM(p,p1) \ - if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 2, &p, &p1) == FAILURE) \ - WRONG_PARAM_COUNT; - -#define THREE_PARAM(p,p1,p2) \ - if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 3, &p, &p1, &p2) == FAILURE) \ - WRONG_PARAM_COUNT; - -#define FETCH_THIS_SDL(ss) \ - { \ - zval *__thisObj,**__tmp; \ - GET_THIS_OBJECT(__thisObj) \ - if(FIND_SDL_PROPERTY(__thisObj,__tmp) != FAILURE) { \ - FETCH_SDL_RES(ss,__tmp); \ - } else { \ - ss = NULL; \ - } \ - } - -#define FIND_SDL_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "sdl", sizeof("sdl"), (void **)&tmp) -#define FETCH_SDL_RES(ss,tmp) ss = (sdlPtr) zend_fetch_resource(tmp TSRMLS_CC, -1, "sdl", NULL, 1, le_sdl) - -#define FETCH_THIS_SERVICE(ss) \ - { \ - zval *__thisObj,**__tmp; \ - GET_THIS_OBJECT(__thisObj) \ - if(FIND_SERVICE_PROPERTY(__thisObj,__tmp) != FAILURE) { \ - FETCH_SERVICE_RES(ss,__tmp); \ - } else { \ - ss = NULL; \ - } \ - } - -#define FIND_SERVICE_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "service", sizeof("service"), (void **)&tmp) -#define FETCH_SERVICE_RES(ss,tmp) ss = (soapServicePtr) zend_fetch_resource(tmp TSRMLS_CC, -1, "service", NULL, 1, le_service) - -#define FETCH_THIS_SOCKET(ss) \ - { \ - zval *__thisObj,**__tmp; \ - GET_THIS_OBJECT(__thisObj) \ - if(FIND_SOCKET_PROPERTY(__thisObj,__tmp) != FAILURE) { \ - FETCH_SOCKET_RES(ss,__tmp); \ - } else { \ - ss = NULL; \ - } \ - } - -#define FIND_SOCKET_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "httpsocket", sizeof("httpsocket"), (void **)&tmp) -#define FETCH_SOCKET_RES(ss,tmp) php_stream_from_zval_no_verify(ss,tmp) - -#define GET_THIS_OBJECT(o) \ - o = getThis(); \ - if (!o) { \ - php_error(E_WARNING, "Cannot Get Class Info"); \ - return; \ - } - - #endif diff --git a/ext/soap/php_xml.h b/ext/soap/php_xml.h index e791984231..dd8b218de6 100644 --- a/ext/soap/php_xml.h +++ b/ext/soap/php_xml.h @@ -14,7 +14,7 @@ int attr_is_equal_ex(xmlAttrPtr node, char *name, char *ns); int node_is_equal_ex(xmlNodePtr node, char *name, char *ns); xmlAttrPtr get_attribute_ex(xmlAttrPtr node,char *name, char *ns); xmlNodePtr get_node_ex(xmlNodePtr node,char *name, char *ns); -xmlNodePtr get_node_recurisve_ex(xmlNodePtr node,char *name, char *ns); +xmlNodePtr get_node_recursive_ex(xmlNodePtr node,char *name, char *ns); xmlNodePtr get_node_with_attribute_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns); xmlNodePtr get_node_with_attribute_recursive_ex(xmlNodePtr node, char *name, char *name_ns, char *attribute, char *value, char *attr_ns); int parse_namespace(const char *inval,char **value,char **namespace); @@ -25,4 +25,34 @@ void *php_stream_xmlIO_open_wrapper(const char *filename); int php_stream_xmlIO_read(void *context, char *buffer, int len); int php_stream_xmlIO_close(void *context); +#define FOREACHATTRNODE(n,c,i) \ + do { \ + if (n == NULL) { \ + break; \ + } \ + if (c) { \ + i = get_attribute(n,c); \ + } else { \ + i = n; \ + } \ + if (i != NULL) { \ + n = i; + +#define FOREACHNODE(n,c,i) \ + do { \ + if (n == NULL) { \ + break; \ + } \ + if (c) { \ + i = get_node(n,c); \ + } else { \ + i = n; \ + } \ + if(i != NULL) { \ + n = i; + +#define ENDFOREACH(n) \ + } \ + } while ((n = n->next)); + #endif diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 24155a3de8..224b4e1c98 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -4,14 +4,83 @@ #include "php_soap.h" #include "ext/session/php_session.h" -int le_sdl = 0; -int le_url = 0; -int le_service = 0; +static int le_sdl = 0; +static int le_url = 0; +static int le_service = 0; /* Local functions */ static void function_to_string(sdlFunctionPtr function, smart_str *buf); static void type_to_string(sdlTypePtr type, smart_str *buf, int level); +static void clear_soap_fault(zval *obj TSRMLS_DC); +static void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC); + +static sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int); +static sdlFunctionPtr get_function(sdlPtr sdl, char *function_name); + +static void deseralize_function_call(sdlPtr sdl, xmlDocPtr request, zval *function_name, int *num_params, zval **parameters[], int *version TSRMLS_DC); +static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name,char *uri,zval *ret, 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 TSRMLS_DC); +static xmlNodePtr seralize_parameter(sdlParamPtr param,zval *param_val,int index,char *name, int style TSRMLS_DC); +static xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style TSRMLS_DC); + +static void delete_service(void *service); +static void delete_url(void *handle); + +#ifndef ZEND_ENGINE_2 +static void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference); +#endif + +static void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args); + +#define SOAP_SERVER_BEGIN_CODE() \ + zend_bool old_handler = SOAP_GLOBAL(use_soap_error_handler);\ + SOAP_GLOBAL(use_soap_error_handler) = 1; + +#define SOAP_SERVER_END_CODE() \ + SOAP_GLOBAL(use_soap_error_handler) = old_handler + +#define HTTP_RAW_POST_DATA "HTTP_RAW_POST_DATA" + +#define ZERO_PARAM() \ + if (ZEND_NUM_ARGS() != 0) \ + WRONG_PARAM_COUNT; + +#define GET_THIS_OBJECT(o) \ + o = getThis(); \ + if (!o) { \ + php_error(E_WARNING, "Cannot Get Class Info"); \ + return; \ + } + +#define FETCH_THIS_SDL(ss) \ + { \ + zval *__thisObj,**__tmp; \ + GET_THIS_OBJECT(__thisObj) \ + if(FIND_SDL_PROPERTY(__thisObj,__tmp) != FAILURE) { \ + FETCH_SDL_RES(ss,__tmp); \ + } else { \ + ss = NULL; \ + } \ + } + +#define FIND_SDL_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "sdl", sizeof("sdl"), (void **)&tmp) +#define FETCH_SDL_RES(ss,tmp) ss = (sdlPtr) zend_fetch_resource(tmp TSRMLS_CC, -1, "sdl", NULL, 1, le_sdl) + +#define FETCH_THIS_SERVICE(ss) \ + { \ + zval *__thisObj,**__tmp; \ + GET_THIS_OBJECT(__thisObj) \ + if(FIND_SERVICE_PROPERTY(__thisObj,__tmp) != FAILURE) { \ + FETCH_SERVICE_RES(ss,__tmp); \ + } else { \ + ss = NULL; \ + } \ + } + +#define FIND_SERVICE_PROPERTY(ss,tmp) zend_hash_find(Z_OBJPROP_P(ss), "service", sizeof("service"), (void **)&tmp) +#define FETCH_SERVICE_RES(ss,tmp) ss = (soapServicePtr) zend_fetch_resource(tmp TSRMLS_CC, -1, "service", NULL, 1, le_service) + static zend_class_entry* soap_class_entry; static zend_class_entry* soap_server_class_entry; static zend_class_entry* soap_fault_class_entry; @@ -381,90 +450,9 @@ PHP_MINIT_FUNCTION(soap) old_error_handler = zend_error_cb; zend_error_cb = soap_error_handler; -#if HAVE_PHP_SESSION - php_session_register_serializer("soap", PS_SERIALIZER_ENCODE_NAME(soap), PS_SERIALIZER_DECODE_NAME(soap)); -#endif - return SUCCESS; } -#if HAVE_PHP_SESSION -PS_SERIALIZER_ENCODE_FUNC(soap) -{ -/* - char *key; - uint key_length; - ulong num_key; - zval **struc; - - wddx_packet *packet; - PS_ENCODE_VARS; - - packet = php_wddx_constructor(); - if (!packet) - return FAILURE; - - php_wddx_packet_start(packet, NULL, 0); - php_wddx_add_chunk_static(packet, WDDX_STRUCT_S); - - PS_ENCODE_LOOP( - - php_wddx_serialize_var(packet, *struc, key, key_length); - ); - - php_wddx_add_chunk_static(packet, WDDX_STRUCT_E); - php_wddx_packet_end(packet); - *newstr = php_wddx_gather(packet); - php_wddx_destructor(packet); - - if (newlen) - *newlen = strlen(*newstr); -*/ - return SUCCESS; -} - -PS_SERIALIZER_DECODE_FUNC(soap) -{ -/* zval *retval; - zval **ent; - char *key; - uint key_length; - char tmp[128]; - ulong idx; - int hash_type; - int ret; - HashPosition pos; - - if (vallen == 0) - return SUCCESS; - - MAKE_STD_ZVAL(retval); - - if ((ret = php_wddx_deserialize_ex((char *)val, vallen, retval)) == SUCCESS) { - - for (zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(retval), &pos); - zend_hash_get_current_data_ex(Z_ARRVAL_P(retval), (void **) &ent, &pos) == SUCCESS; - zend_hash_move_forward(Z_ARRVAL_P(retval), &pos)) { - hash_type = zend_hash_get_current_key_ex(Z_ARRVAL_P(retval), &key, &key_length, &idx, 0, &pos); - - switch (hash_type) { - case HASH_KEY_IS_LONG: - sprintf(tmp, "%ld", idx); - key = tmp; - case HASH_KEY_IS_STRING: - php_set_session_var(key, key_length-1, *ent, NULL TSRMLS_CC); - PS_ADD_VAR(key); - } - } - } - - zval_ptr_dtor(&retval); -*/ - return TRUE; -} -#endif - - PHP_MINFO_FUNCTION(soap) { php_info_print_table_start(); @@ -1211,7 +1199,7 @@ PHP_METHOD(soapserver, handle) SOAP_SERVER_END_CODE(); } -void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args) +static void soap_error_handler(int error_num, const char *error_filename, const uint error_lineno, const char *format, va_list args) { char buffer[1024]; int buffer_len; @@ -1659,7 +1647,7 @@ PHP_METHOD(soapobject, __getlastresponse) } #ifndef ZEND_ENGINE_2 -void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) +static void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference) { pval *object = property_reference->object; zend_overloaded_element *function_name = (zend_overloaded_element *)property_reference->elements_list->tail->data; @@ -1687,7 +1675,7 @@ void soap_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_refe } #endif -void clear_soap_fault(zval *obj TSRMLS_DC) +static void clear_soap_fault(zval *obj TSRMLS_DC) { if (obj != NULL && obj->type == IS_OBJECT) { /* zend_hash_del(obj->value.obj.properties, "__soap_fault", sizeof("__soap_fault"));*/ @@ -1707,7 +1695,7 @@ zval* add_soap_fault(zval *obj, char *fault_code, char *fault_string, char *faul return fault; } -void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC) +static void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault_actor, zval *fault_detail TSRMLS_DC) { if (Z_TYPE_P(obj) != IS_OBJECT) { object_init_ex(obj, soap_fault_class_entry); @@ -1729,7 +1717,7 @@ void set_soap_fault(zval *obj, char *fault_code, char *fault_string, char *fault } } -void deseralize_function_call(sdlPtr sdl, xmlDocPtr request, zval *function_name, int *num_params, zval ***parameters, int *version TSRMLS_DC) +static void deseralize_function_call(sdlPtr sdl, xmlDocPtr request, zval *function_name, int *num_params, zval ***parameters, int *version TSRMLS_DC) { char* envelope_ns; xmlNodePtr trav,env,head,body,func; @@ -1851,7 +1839,7 @@ void deseralize_function_call(sdlPtr sdl, xmlDocPtr request, zval *function_name (*num_params) = num_of_params; } -xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version TSRMLS_DC) +static xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name, char *uri, zval *ret, int version TSRMLS_DC) { xmlDoc *doc; xmlNode *envelope,*body,*method, *param; @@ -1959,7 +1947,7 @@ xmlDocPtr seralize_response_call(sdlFunctionPtr function, char *function_name, c return doc; } -xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, char *function_name, char *uri, zval **arguments, int arg_count, 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 TSRMLS_DC) { xmlDoc *doc; xmlNode *envelope, *body, *method; @@ -2057,7 +2045,7 @@ xmlDocPtr seralize_function_call(zval *this_ptr, sdlFunctionPtr function, char * return doc; } -xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int index, char *name, int style TSRMLS_DC) +static xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int index, char *name, int style TSRMLS_DC) { char *paramName; xmlNodePtr xmlParam; @@ -2092,7 +2080,7 @@ xmlNodePtr seralize_parameter(sdlParamPtr param, zval *param_val, int index, cha return xmlParam; } -xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style TSRMLS_DC) +static xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int style TSRMLS_DC) { xmlNodePtr xmlParam; encodePtr enc; @@ -2110,7 +2098,7 @@ xmlNodePtr seralize_zval(zval *val, sdlParamPtr param, char *paramName, int styl return xmlParam; } -sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int response) +static sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int response) { sdlParamPtr *tmp; HashTable *ht; @@ -2137,7 +2125,7 @@ sdlParamPtr get_param(sdlFunctionPtr function, char *param_name, int index, int return NULL; } -sdlFunctionPtr get_function(sdlPtr sdl, char *function_name) +static sdlFunctionPtr get_function(sdlPtr sdl, char *function_name) { sdlFunctionPtr *tmp; if (sdl != NULL) { @@ -2225,12 +2213,12 @@ static void type_to_string(sdlTypePtr type, smart_str *buf, int level) smart_str_0(buf); } -void delete_url(void *handle) +static void delete_url(void *handle) { php_url_free((php_url*)handle); } -void delete_service(void *data) +static void delete_service(void *data) { soapServicePtr service = (soapServicePtr)data; |