[wsf-c-dev] svn commit r387 - wsf/php/src

svn at wso2.com svn at wso2.com
Wed Jan 10 03:40:54 PST 2007


Author: nandika
Date: Wed Jan 10 03:40:34 2007
New Revision: 387

Modified:
   wsf/php/src/util.c
Log:
options setting refactored


Modified: wsf/php/src/util.c
==============================================================================
--- wsf/php/src/util.c	(original)
+++ wsf/php/src/util.c	Wed Jan 10 03:40:34 2007
@@ -1153,4 +1153,376 @@
 	AXIOM_NODE_SERIALIZE (ret_node, env, om_output);
 	doc = (xmlDocPtr)AXIOM_XML_WRITER_GET_XML(writer, env);
 	return doc;
-}  
+}
+
+static void wsf_util_set_security_options(zval *zval_client, zval *zval_msg, 
+	axis2_env_t *env, axis2_options_t *client_options, axis2_svc_client_t *svc_client TSRMLS_DC)
+{
+	zval **tmp = NULL;
+	zval **msg_tmp = NULL;
+	
+	int username_present = AXIS2_FALSE;
+	int password_present = AXIS2_FALSE;
+	int timestamp_present = AXIS2_FALSE;
+	
+	if(zval_msg){
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "user", sizeof("user"), (void **)&msg_tmp) == SUCCESS && 
+				Z_TYPE_PP(msg_tmp) == IS_STRING){
+				char *username = NULL;
+				axis2_property_t *property = NULL;
+				username = Z_STRVAL_PP(msg_tmp);                
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, username);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "user" ,property);
+				username_present = AXIS2_TRUE;
+		}
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "password", sizeof("password"), (void **)&msg_tmp) == SUCCESS && 
+			Z_TYPE_PP(msg_tmp) == IS_STRING){
+			char *password = NULL;
+			axis2_property_t *property = NULL;
+			property = axis2_property_create(env);
+			password = Z_STRVAL_PP(msg_tmp);
+			AXIS2_PROPERTY_SET_VALUE(property,env, password);
+			AXIS2_OPTIONS_SET_PROPERTY(client_options,  env, "password", property);
+			password_present = AXIS2_TRUE;
+		}
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "digest", sizeof("digest"), (void **)&msg_tmp) == SUCCESS && 
+			Z_TYPE_PP(msg_tmp) == IS_BOOL){
+			int use_digest = 0;
+			char *password_type = NULL;
+			axis2_property_t *property = NULL;
+			use_digest = Z_BVAL_PP(msg_tmp);
+			if(use_digest){
+				password_type = "passwordDigest";
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, password_type);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "passwordType" ,property);
+			}
+			
+		}
+		else if(password_present){
+			char *password_type = NULL;
+				axis2_property_t *property = NULL;
+				password_type = "passwordText";
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, password_type);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "passwordType" ,property);
+		}	
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "timeToLive", sizeof("timeToLive"), 
+			(void **)&msg_tmp) == SUCCESS && Z_TYPE_PP(msg_tmp) == IS_STRING){
+			char *timeto_live = NULL;
+			axis2_property_t *property = NULL;
+			timeto_live = Z_STRVAL_PP(msg_tmp);
+			if(timeto_live){
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, get_time_to_live(timeto_live, env));
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "timeToLive" ,property);
+			}
+			timestamp_present = AXIS2_TRUE;
+		}
+		if(username_present && password_present){
+			axis2_property_t *sec_prop = NULL;
+			sec_prop = axis2_property_create(env);
+			if(timestamp_present)
+				AXIS2_PROPERTY_SET_VALUE(sec_prop, env, "UsernameToken Timestamp");        
+			else {
+				AXIS2_PROPERTY_SET_VALUE(sec_prop, env, "UsernameToken");            
+			}			
+			AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "items", sec_prop);
+			AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client , env, "rampart");
+		}		
+	}else{
+		username_present = AXIS2_FALSE;
+		password_present = AXIS2_FALSE;
+		
+		if(zend_hash_find(Z_OBJPROP_P(zval_client), "user", sizeof("user"), 
+			(void **)&tmp) == SUCCESS && Z_TYPE_PP(tmp) == IS_STRING){
+				char *username = NULL;
+				axis2_property_t *property = NULL;
+				username = Z_STRVAL_PP(tmp);                
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, username);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "user" ,property);
+				username_present = AXIS2_TRUE;
+		}
+		if(zend_hash_find(Z_OBJPROP_P(zval_client), "password", sizeof("password"), (void **)&msg_tmp) == SUCCESS && 
+			Z_TYPE_PP(tmp) == IS_STRING){
+			char *password = NULL;
+			axis2_property_t *property = NULL;
+			property = axis2_property_create(env);
+			password = Z_STRVAL_PP(tmp);
+			AXIS2_PROPERTY_SET_VALUE(property,env, password);
+			AXIS2_OPTIONS_SET_PROPERTY(client_options,  env, "password", property);
+			password_present = AXIS2_TRUE;
+		}
+		
+		if(zend_hash_find(Z_OBJPROP_P(zval_client), "digest", sizeof("digest"), (void **)&tmp) == SUCCESS && 
+			Z_TYPE_PP(tmp) == IS_BOOL){
+			int use_digest = 0;
+			char *password_type = NULL;
+			axis2_property_t *property = NULL;
+			use_digest = Z_BVAL_PP(tmp);
+			if(use_digest){
+				password_type = "passwordDigest";
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, password_type);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "passwordType" ,property);
+			}
+		}else if(password_present){
+				char *password_type = NULL;
+			axis2_property_t *property = NULL;		
+				password_type = "passwordText";
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, password_type);
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "passwordType" ,property);
+		}
+		
+		if(zend_hash_find(Z_OBJPROP_P(zval_client), "timeToLive", sizeof("timeToLive"), 
+			(void **)&tmp) == SUCCESS && Z_TYPE_PP(tmp) == IS_STRING)
+		{
+			char *timeto_live = NULL;
+			axis2_property_t *property = NULL;
+			timeto_live = Z_STRVAL_PP(tmp);
+			if(timeto_live){
+				property = axis2_property_create(env);
+				AXIS2_PROPERTY_SET_VALUE(property, env, get_time_to_live(timeto_live, env));
+				AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "timeToLive" ,property);
+			}
+			timestamp_present = AXIS2_TRUE;
+		}                    
+		if(username_present && password_present){
+			axis2_property_t *sec_prop = NULL;
+			sec_prop = axis2_property_create(env);
+			if(timestamp_present){
+				AXIS2_PROPERTY_SET_VALUE(sec_prop, env, "UsernameToken Timestamp");        
+			}else{
+				AXIS2_PROPERTY_SET_VALUE(sec_prop, env, "UsernameToken");
+			}            
+			AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "items", sec_prop);
+			AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client , env, "rampart");
+		}
+	}
+}
+
+static int wsf_util_set_addr_options(zval *zval_client, zval *zval_msg, axis2_env_t *env,
+    axis2_options_t *client_options, axis2_svc_client_t *svc_client  TSRMLS_DC){
+		
+	zval **tmp = NULL;
+    int is_addressing_engaged = AXIS2_FALSE;
+	int addr_action_present = AXIS2_FALSE;
+	char *value = NULL;	
+	
+	if(zend_hash_find(Z_OBJPROP_P(zval_client), "useWSA", sizeof("useWSA"), 
+        (void**)&tmp) == SUCCESS) {
+        if((Z_TYPE_PP(tmp) == IS_BOOL && Z_BVAL_PP(tmp) == 1) ||
+            Z_TYPE_PP(tmp) == IS_STRING){ 
+                if(Z_TYPE_PP(tmp) == IS_BOOL){
+            	    value = "1.0";
+            	} else if(Z_TYPE_PP(tmp) == IS_STRING){
+                	value = Z_STRVAL_PP(tmp);
+            	}
+			}				
+	}else{
+		return AXIS2_FALSE;	
+	}
+	
+    if(zval_msg){
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "action", sizeof("action"), 
+					(void**)&tmp) == SUCCESS) {
+				AXIS2_OPTIONS_SET_ACTION(client_options, env, Z_STRVAL_PP(tmp));
+				addr_action_present = AXIS2_TRUE;   
+		}
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "replyTo", sizeof("replyTo"), 
+					(void**)&tmp) == SUCCESS) {
+				axis2_endpoint_ref_t *replyto_epr = NULL;
+				char *replyto = Z_STRVAL_PP(tmp);
+				replyto_epr = axis2_endpoint_ref_create(env, replyto);
+				AXIS2_OPTIONS_SET_REPLY_TO(client_options, env, replyto_epr);
+		}
+		if(zend_hash_find(Z_OBJPROP_P(zval_msg), "faultTo", sizeof("faultTo"), 
+					(void**)&tmp) == SUCCESS) {
+				axis2_endpoint_ref_t *faultto_epr = NULL;
+				char *faultto = Z_STRVAL_PP(tmp);
+				faultto_epr = axis2_endpoint_ref_create(env, faultto);
+				AXIS2_OPTIONS_SET_FAULT_TO(client_options, env, faultto_epr);
+		}
+				if(zend_hash_find(Z_OBJPROP_P(zval_msg), "from", sizeof("from"), 
+					(void**)&tmp) == SUCCESS) {
+				axis2_endpoint_ref_t *from_epr = NULL;
+				char *from = Z_STRVAL_PP(tmp);
+				from_epr = axis2_endpoint_ref_create(env, from);
+				AXIS2_OPTIONS_SET_REPLY_TO(client_options, env, from_epr);
+		}
+		if(addr_action_present == AXIS2_TRUE){
+				is_addressing_engaged = AXIS2_TRUE;
+				AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, env, "addressing");
+				if(strcmp(value,"submission") == 0){
+					axis2_property_t *property = NULL;
+					property = axis2_property_create(env);
+					AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_REQUEST);
+					AXIS2_PROPERTY_SET_VALUE(property, env, 
+						AXIS2_STRDUP(AXIS2_WSA_NAMESPACE_SUBMISSION, env));
+					AXIS2_OPTIONS_SET_PROPERTY(client_options, env, AXIS2_WSA_VERSION, property);
+				}
+		}
+	}				
+    else{
+			if(zend_hash_find(Z_OBJPROP_P(zval_client), "action", sizeof("action"), 
+                (void**)&tmp) == SUCCESS) {
+                AXIS2_OPTIONS_SET_ACTION(client_options, env, Z_STRVAL_PP(tmp));
+                addr_action_present = AXIS2_TRUE;   
+            }
+            if(zend_hash_find(Z_OBJPROP_P(zval_client), "replyTo", sizeof("replyTo"), 
+                (void**)&tmp) == SUCCESS) {
+                axis2_endpoint_ref_t *replyto_epr = NULL;
+                char *replyto = Z_STRVAL_PP(tmp);
+                replyto_epr = axis2_endpoint_ref_create(env, replyto);
+                AXIS2_OPTIONS_SET_REPLY_TO(client_options, env, replyto_epr);
+            }
+            if(zend_hash_find(Z_OBJPROP_P(zval_client), "faultTo", sizeof("faultTo"), 
+                (void**)&tmp) == SUCCESS) {
+                axis2_endpoint_ref_t *faultto_epr = NULL;
+                char *faultto = Z_STRVAL_PP(tmp);
+                faultto_epr = axis2_endpoint_ref_create(env, faultto);
+                AXIS2_OPTIONS_SET_FAULT_TO(client_options, env, faultto_epr);
+            }
+            if(zend_hash_find(Z_OBJPROP_P(zval_client), "from", sizeof("from"), 
+                (void**)&tmp) == SUCCESS) {
+                axis2_endpoint_ref_t *from_epr = NULL;
+                char *from = Z_STRVAL_PP(tmp);
+                from_epr = axis2_endpoint_ref_create(env, from);
+                AXIS2_OPTIONS_SET_REPLY_TO(client_options, env, from_epr);
+            }
+            if(addr_action_present == AXIS2_TRUE){
+				is_addressing_engaged = AXIS2_TRUE;
+				
+                AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, env, "addressing");
+				if(strcmp(value,"submission") == 0){
+                    axis2_property_t *property = NULL;
+                    property = axis2_property_create(env);
+				    AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_REQUEST);
+				    AXIS2_PROPERTY_SET_VALUE(property, env, 
+					AXIS2_STRDUP(AXIS2_WSA_NAMESPACE_SUBMISSION, env));
+				    AXIS2_OPTIONS_SET_PROPERTY(client_options, env, AXIS2_WSA_VERSION, property);
+                }
+            }   
+		}    
+	return is_addressing_engaged;
+}
+
+int wsf_util_set_options(zval *zval_client, zval *zval_msg, axis2_env_t *env,
+        axis2_options_t *client_options, axis2_svc_client_t *svc_client, int is_send TSRMLS_DC)
+{
+    zval **tmp = NULL;
+    zval **msg_tmp = NULL;
+    int username_present = AXIS2_FALSE;
+    int password_present = AXIS2_FALSE;
+    int timestamp_present = AXIS2_FALSE;
+    int use_soap = 0;
+	int is_addressing_engaged = AXIS2_FALSE;
+	int is_rm_enabled = AXIS2_FALSE;
+
+    if(zend_hash_find(Z_OBJPROP_P(zval_client), "useSOAP", sizeof("useSOAP"), 
+        (void **)&tmp) == SUCCESS){
+        if(Z_TYPE_PP(tmp) == IS_STRING){
+            char *value = NULL;
+            value = Z_STRVAL_PP(tmp);
+            if(value && strcmp(value,"1.2") == 0){
+                AXIS2_OPTIONS_SET_SOAP_VERSION(client_options, env, AXIOM_SOAP12);
+            }
+            else if(value && strcmp(value,"1.1") == 0){
+                AXIS2_OPTIONS_SET_SOAP_VERSION(client_options, env, AXIOM_SOAP11);
+            }
+            else if(value && strcmp(value, "false") == 0) {
+                use_soap = 0;
+            }
+        }else if(Z_TYPE_PP(tmp) == IS_DOUBLE){
+            double val = Z_DVAL_PP(tmp);
+            if(val == 1.2){
+                AXIS2_OPTIONS_SET_SOAP_VERSION(client_options, env, AXIOM_SOAP12);
+            }else if(val == 1.1){
+                AXIS2_OPTIONS_SET_SOAP_VERSION(client_options, env, AXIOM_SOAP11);
+            }
+        }else if(Z_TYPE_PP(tmp) == IS_BOOL){
+            int bval = Z_BVAL_PP(tmp);
+            if(bval == 1){
+                AXIS2_OPTIONS_SET_SOAP_VERSION(client_options, env, AXIOM_SOAP12);
+            }else if(bval == 0){
+                use_soap = 0;
+            }    
+        }
+    }else
+    {
+        use_soap = 0;
+    }
+    if(zend_hash_find(Z_OBJPROP_P(zval_client), "HTTPMethod", sizeof("HTTPMethod"), 
+        (void **)&tmp) == SUCCESS){
+        if(use_soap == 0){
+            char *value = NULL;
+            value = Z_STRVAL_PP(tmp);
+            AXIS2_OPTIONS_SET_PROPERTY(client_options, env, AXIS2_ENABLE_REST,
+                AXIS2_VALUE_TRUE);
+            if(value && strcmp(value, "GET") == 0){
+                AXIS2_OPTIONS_SET_PROPERTY(client_options, env, AXIS2_HTTP_METHOD,
+                    AXIS2_HTTP_HEADER_GET);  
+            }
+        }       
+    }
+    
+    if(zend_hash_find(Z_OBJPROP_P(zval_client), "useMTOM", sizeof("useMTOM"), 
+        (void **)&tmp) == SUCCESS){
+        if(Z_TYPE_PP(tmp) == IS_BOOL){
+            int val = Z_BVAL_PP(tmp);
+            if(val == 0){
+                AXIS2_OPTIONS_SET_ENABLE_MTOM(client_options, env, AXIS2_FALSE);
+            }else{
+                AXIS2_OPTIONS_SET_ENABLE_MTOM(client_options, env, AXIS2_TRUE);
+            }
+        }                
+    }
+    if(zval_msg && zend_hash_find(Z_OBJPROP_P(zval_msg), "to", sizeof("to"), 
+        (void**)&msg_tmp) == SUCCESS) {
+        axis2_endpoint_ref_t *to_epr = NULL;
+        char *to = Z_STRVAL_PP(msg_tmp);
+        to_epr = axis2_endpoint_ref_create(env, to);
+        AXIS2_OPTIONS_SET_TO(client_options, env, to_epr);
+    }else if(zend_hash_find(Z_OBJPROP_P(zval_client), "to", sizeof("to"), 
+        (void**)&msg_tmp) == SUCCESS) {
+        axis2_endpoint_ref_t *to_epr = NULL;
+        char *to = Z_STRVAL_PP(msg_tmp);
+        to_epr = axis2_endpoint_ref_create(env, to);
+        AXIS2_OPTIONS_SET_TO(client_options, env, to_epr);
+    }
+    else
+    {
+        return AXIS2_FAILURE;
+    }
+			
+	is_addressing_engaged = wsf_util_set_addr_options(zval_client, zval_msg,
+				env, client_options, svc_client TSRMLS_CC);
+
+	wsf_util_set_security_options(zval_client, zval_msg, env, client_options, svc_client TSRMLS_CC);
+	
+    
+	if(zend_hash_find(Z_OBJPROP_P(zval_msg), "reliable", sizeof("reliable"), (void**)&msg_tmp) == SUCCESS
+		&& Z_TYPE_PP(msg_tmp) == IS_BOOL){
+			is_rm_enabled = Z_BVAL_PP(tmp);
+			
+	}else if(zend_hash_find(Z_OBJPROP_P(zval_client), "reliable", sizeof("reliable"),(void**)&tmp) == SUCCESS 
+		&& Z_TYPE_PP(tmp) == IS_BOOL){
+			is_rm_enabled = Z_BVAL_PP(tmp);
+	}
+	
+	if(is_rm_enabled && is_addressing_engaged){
+		axis2_property_t *rmprop = NULL;
+		rmprop = axis2_property_create(env);
+		AXIS2_PROPERTY_SET_SCOPE(rmprop, env, AXIS2_SCOPE_APPLICATION);
+		AXIS2_PROPERTY_SET_VALUE(rmprop, env, AXIS2_VALUE_TRUE);
+		AXIS2_OPTIONS_SET_PROPERTY(client_options, env, "Sandesha2LastMessage", rmprop);
+        if(!is_send){
+        AXIS2_OPTIONS_SET_USE_SEPARATE_LISTENER(client_options, env, AXIS2_TRUE);
+        }
+		AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, env, "sandesha2");
+	}
+    return AXIS2_SUCCESS;
+}




More information about the Wsf-c-dev mailing list