[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