summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/soap/php_packet_soap.c33
-rw-r--r--ext/soap/php_schema.c25
-rw-r--r--ext/soap/php_schema.h3
-rw-r--r--ext/soap/php_sdl.c58
-rw-r--r--ext/soap/php_sdl.h14
-rw-r--r--ext/soap/php_soap.h154
-rw-r--r--ext/soap/php_xml.h32
-rw-r--r--ext/soap/soap.c182
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;