You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by da...@apache.org on 2008/08/29 08:56:38 UTC

svn commit: r690127 [2/11] - in /webservices/sandesha/trunk/c: ./ build/win32/ config/ ides/vc8/sandesha2/sandesha2/ include/ include/sandesha2/ samples/ samples/RMSampleService/ samples/rm_echo_1_0/ samples/rm_echo_1_0_large_sequence/ samples/rm_echo_...

Modified: webservices/sandesha/trunk/c/src/client/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/client/Makefile.am?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/client/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/client/Makefile.am Thu Aug 28 23:56:29 2008
@@ -6,6 +6,8 @@
 							report.c \
 							client.c
 
+libsandesha2_client_la_LIBADD = ../core/libsandesha2.la
+
 INCLUDES = -I$(top_builddir)/include \
 		   	@AXIS2INC@ \
 		   	@AXIOMINC@ \

Modified: webservices/sandesha/trunk/c/src/client/client.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/client/client.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/client/client.c (original)
+++ webservices/sandesha/trunk/c/src/client/client.c Thu Aug 28 23:56:29 2008
@@ -17,9 +17,11 @@
 #include <sandesha2_client.h>
 #include <sandesha2_storage_mgr.h>
 #include <sandesha2_seq_property_mgr.h>
+#include <sandesha2_sender_mgr.h>
 #include <sandesha2_create_seq_mgr.h>
 #include <sandesha2_next_msg_mgr.h>
 #include <sandesha2_permanent_seq_property_mgr.h>
+#include <sandesha2_permanent_sender_mgr.h>
 #include <sandesha2_permanent_create_seq_mgr.h>
 #include <sandesha2_permanent_next_msg_mgr.h>
 #include "sandesha2_client_constants.h"
@@ -30,6 +32,7 @@
 #include <sandesha2_close_seq.h>
 #include <sandesha2_terminate_seq.h>
 #include <sandesha2_ack_mgr.h>
+#include <sandesha2_msg_init.h>
 #include <sandesha2_constants.h>
 
 #include <axis2_callback_recv.h>
@@ -58,6 +61,16 @@
  *
  * @return internal_seq_id
  */
+
+static void
+sandesha2_client_fire_and_forget(
+    const axutil_env_t *env,
+    axis2_svc_client_t *svc_client,
+    axis2_options_t *options,
+    axutil_qname_t *op_qname,
+    axis2_callback_t *callback,
+    axiom_node_t *payload);
+
 static axis2_char_t *
 sandesha2_client_get_internal_seq_id(
         const axutil_env_t *env,
@@ -89,13 +102,6 @@
         axis2_char_t *internal_seq_id,
         sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-/*static axis2_status_t
-sandesha2_client_fill_timedout_outgoing_seq_info(
-        const axutil_env_t *env,
-        sandesha2_seq_report_t *report,
-        axis2_char_t *internal_seq_id,
-        sandesha2_seq_property_mgr_t *seq_prop_mgr);*/
-
 static axis2_status_t
 sandesha2_client_fill_outgoing_seq_info(
         const axutil_env_t *env,
@@ -126,7 +132,8 @@
 sandesha2_client_configure_terminate_seq(
     const axutil_env_t *env,
     axis2_options_t *options, 
-    axis2_conf_ctx_t *conf_ctx);
+    axis2_conf_ctx_t *conf_ctx,
+    sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
 static axis2_bool_t
 fill_soap_envelope(
@@ -213,7 +220,7 @@
     AXIS2_PARAM_CHECK(env->error, seq_key, NULL);
     AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL);
 
-    internal_seq_id = sandesha2_utils_get_internal_seq_id(env, to, seq_key);
+    internal_seq_id = sandesha2_utils_get_client_internal_sequence_id(env, to, seq_key);
     return (sandesha2_seq_report_t *) 
         sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(env, 
         internal_seq_id, conf_ctx);
@@ -251,8 +258,7 @@
     ctx = axis2_conf_ctx_get_base(conf_ctx, env);
     sandesha2_seq_report_set_internal_seq_id(seq_report, env, internal_seq_id);
     create_seq_find_bean = sandesha2_create_seq_bean_create(env);
-    sandesha2_create_seq_bean_set_internal_seq_id(create_seq_find_bean, 
-        env, internal_seq_id);
+    sandesha2_create_seq_bean_set_internal_sequence_id(create_seq_find_bean, env, internal_seq_id);
     create_seq_bean = sandesha2_create_seq_mgr_find_unique(create_seq_mgr, env, 
         create_seq_find_bean);
 	/* if data is not available seq has to be terminated or timedOut.*/
@@ -306,7 +312,7 @@
             sandesha2_storage_mgr_free(storage_mgr, env);
         return seq_report;
     }
-    out_seq_id = sandesha2_create_seq_bean_get_seq_id(create_seq_bean, env);
+    out_seq_id = sandesha2_create_seq_bean_get_rms_sequence_id(create_seq_bean, env);
     if(!out_seq_id)
     {
         sandesha2_seq_report_set_internal_seq_id(seq_report, env, 
@@ -419,7 +425,7 @@
     ctx = axis2_conf_ctx_get_base(conf_ctx, env);
     if(internal_seq_find_bean) 
         sandesha2_seq_property_bean_set_name(internal_seq_find_bean, env, 
-            SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
+            SANDESHA2_SEQUENCE_PROPERTY_RMS_INTERNAL_SEQ_ID);
     if (seq_prop_mgr)
     {
         collection = sandesha2_seq_property_mgr_find(seq_prop_mgr, env, 
@@ -602,8 +608,7 @@
 sandesha2_client_terminate_seq_with_svc_client(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
-    axis2_callback_t *callback,
-    axis2_listener_manager_t *listener_manager)
+    axis2_callback_t *callback)
 {
     axis2_svc_ctx_t *svc_ctx = NULL;
     axis2_options_t *options = NULL;
@@ -620,66 +625,140 @@
     axiom_element_t *terminate_body_element = NULL;
     axiom_element_t *element = NULL;
     axutil_qname_t *qname = NULL;
+    sandesha2_storage_mgr_t *storage_mgr = NULL;
+    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
+    sandesha2_sender_mgr_t *sender_mgr = NULL;
+    axis2_char_t *dbname = NULL;
 
     if(!svc_client)
+    {
         return AXIS2_FAILURE;
-    svc_ctx = (axis2_svc_ctx_t *) axis2_svc_client_get_svc_ctx(svc_client, 
-        env);
+    }
+
+    svc_ctx = (axis2_svc_ctx_t *) axis2_svc_client_get_svc_ctx(svc_client, env);
     if(!svc_ctx)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, 
-                AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     options = (axis2_options_t *) axis2_svc_client_get_options(svc_client, env);
     if(!options)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_OPTIONS_OBJECT_NOT_SET, 
-                AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_OPTIONS_OBJECT_NOT_SET, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
     property = (axutil_property_t *) axis2_options_get_property(options, env, 
             SANDESHA2_CLIENT_RM_SPEC_VERSION);
     if(property)
+    {
         rm_spec_version = axutil_property_get_value(property, env);
+    }
+
     if(!rm_spec_version)
     {
-        rm_spec_version = 
-            sandesha2_spec_specific_consts_get_default_spec_version(env);
+        rm_spec_version = sandesha2_spec_specific_consts_get_default_spec_version(env);
     }
-    rm_namespc_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, 
-            rm_spec_version);
+    rm_namespc_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, rm_spec_version);
     conf_ctx =  axis2_svc_ctx_get_conf_ctx(svc_ctx, env);
-    terminate_envelope = sandesha2_client_configure_terminate_seq(env, options, 
-            conf_ctx);
+
+    dbname = sandesha2_util_get_dbname(env, conf_ctx);
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, dbname);
+    if(storage_mgr)
+    {
+        seq_prop_mgr = sandesha2_permanent_seq_property_mgr_create(env, dbname);
+        sender_mgr = sandesha2_permanent_sender_mgr_create(env, dbname);
+    }
+
+    terminate_envelope = sandesha2_client_configure_terminate_seq(env, options, conf_ctx, 
+            seq_prop_mgr);
+
     if (!terminate_envelope)
+    {
+        if(sender_mgr)
+        {
+            sandesha2_sender_mgr_free(sender_mgr, env);
+        }
+        
+        if(seq_prop_mgr)
+        {
+            sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+        }
+
+        if(storage_mgr)
+        {
+            sandesha2_storage_mgr_free(storage_mgr, env);
+        }
+
         return AXIS2_FAILURE;
+    }
+
     body = axiom_soap_envelope_get_body(terminate_envelope, env);
     node = axiom_soap_body_get_base_node(body, env);
     element = axiom_node_get_data_element(node, env);
-    qname = axutil_qname_create(env, SANDESHA2_WSRM_COMMON_TERMINATE_SEQ, 
-        rm_namespc_value, NULL);
-    terminate_body_element = axiom_element_get_first_child_with_qname(element, 
-        env, qname, node, &terminate_body_node);
+    qname = axutil_qname_create(env, SANDESHA2_WSRM_COMMON_TERMINATE_SEQ, rm_namespc_value, NULL);
+    terminate_body_element = axiom_element_get_first_child_with_qname(element, env, qname, node, 
+            &terminate_body_node);
+
     if(qname)
+    {
         axutil_qname_free(qname, env);
+    }
+
     old_action = axutil_strdup(env, axis2_options_get_action(options, env));
-    action = sandesha2_spec_specific_consts_get_terminate_seq_action(env, 
-            rm_spec_version);
+    action = sandesha2_spec_specific_consts_get_terminate_seq_action(env, rm_spec_version);
     if(action)
+    {
         axis2_options_set_action(options, env, action);
-    sandesha2_client_fire_and_forget(env, svc_client, options, NULL, callback, 
-        terminate_body_node, listener_manager);
+    }
+
+    sandesha2_client_fire_and_forget(env, svc_client, options, NULL, callback, terminate_body_node);
+
     if(!AXIS2_ERROR_GET_STATUS_CODE(env->error))
     {
-        AXIS2_ERROR_SET(env->error, 
-            SANDESHA2_ERROR_COULD_NOT_SEND_TERMINATE_MESSAGE, AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_COULD_NOT_SEND_TERMINATE_MESSAGE, AXIS2_FAILURE);
         axis2_options_set_action(options, env, old_action);
+
+        if(sender_mgr)
+        {
+            sandesha2_sender_mgr_free(sender_mgr, env);
+        }
+        
+        if(seq_prop_mgr)
+        {
+            sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+        }
+
+        if(storage_mgr)
+        {
+            sandesha2_storage_mgr_free(storage_mgr, env);
+        }
+
         return AXIS2_FAILURE;
     }
+
     if(old_action)
+    {
         axis2_options_set_action(options, env, old_action);
+    }
+
+    if(sender_mgr)
+    {
+        sandesha2_sender_mgr_free(sender_mgr, env);
+    }
+    
+    if(seq_prop_mgr)
+    {
+        sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+    }
+
+    if(storage_mgr)
+    {
+        sandesha2_storage_mgr_free(storage_mgr, env);
+    }
+
     AXIS2_FREE(env->allocator, old_action);
+
     return AXIS2_SUCCESS;
 }
 
@@ -704,7 +783,7 @@
         SANDESHA2_CLIENT_SEQ_KEY);
     property = axutil_property_create_with_args(env, 0, 0, 0, seq_key);
     axis2_options_set_property(options, env, SANDESHA2_CLIENT_SEQ_KEY, property);
-    sandesha2_client_terminate_seq_with_svc_client(env, svc_client, NULL, NULL);
+    sandesha2_client_terminate_seq_with_svc_client(env, svc_client, NULL);
     axis2_options_set_property(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_property);
     return AXIS2_SUCCESS;
 }
@@ -1011,7 +1090,7 @@
     storage_mgr = sandesha2_utils_get_storage_mgr(env, dbname);
     seq_prop_mgr = sandesha2_permanent_seq_property_mgr_create(env, dbname);
     seq_id_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, 
-            internal_seq_id, SANDESHA2_SEQ_PROP_OUT_SEQ_ID);
+            internal_seq_id, SANDESHA2_SEQUENCE_PROPERTY_RMS_SEQ_ID);
     if(!seq_id_bean)
     {
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_ID_BEAN_NOT_SET, 
@@ -1196,7 +1275,7 @@
     axis2_char_t *to,
     axis2_char_t *seq_key)
 {
-    return (axis2_char_t *) sandesha2_utils_get_internal_seq_id(env, to, seq_key);
+    return (axis2_char_t *) sandesha2_utils_get_client_internal_sequence_id(env, to, seq_key);
 }
 
 static axiom_soap_envelope_t *
@@ -1242,7 +1321,7 @@
     property = (axutil_property_t *) axis2_options_get_property(options, env, 
             SANDESHA2_CLIENT_SEQ_KEY);
     seq_key = axutil_property_get_value(property, env);
-    internal_seq_id = sandesha2_utils_get_internal_seq_id(env, to, seq_key);
+    internal_seq_id = sandesha2_utils_get_client_internal_sequence_id(env, to, seq_key);
 
     seq_report = sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(
             env, internal_seq_id, conf_ctx);
@@ -1264,7 +1343,7 @@
     storage_mgr = sandesha2_utils_get_storage_mgr(env, dbname);
     seq_prop_mgr = sandesha2_permanent_seq_property_mgr_create(env, dbname);
     seq_id_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, 
-            internal_seq_id, SANDESHA2_SEQ_PROP_OUT_SEQ_ID);
+            internal_seq_id, SANDESHA2_SEQUENCE_PROPERTY_RMS_SEQ_ID);
     if(!seq_id_bean)
     {
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_ID_BEAN_NOT_SET, 
@@ -1354,7 +1433,7 @@
     sandesha2_seq_property_bean_set_value(internal_seq_find_bean, env, 
             internal_seq_id);
     sandesha2_seq_property_bean_set_name(internal_seq_find_bean, env, 
-           SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
+           SANDESHA2_SEQUENCE_PROPERTY_RMS_INTERNAL_SEQ_ID);
     internal_seq_bean = sandesha2_seq_property_mgr_find_unique(seq_prop_mgr, 
             env, internal_seq_find_bean);
     if(!internal_seq_bean)
@@ -1399,7 +1478,7 @@
     sandesha2_seq_property_bean_set_value(internal_seq_find_bean, env, 
             internal_seq_id);
     sandesha2_seq_property_bean_set_name(internal_seq_find_bean, env, 
-           SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
+           SANDESHA2_SEQUENCE_PROPERTY_RMS_INTERNAL_SEQ_ID);
     internal_seq_bean = sandesha2_seq_property_mgr_find_unique(seq_prop_mgr, 
             env, internal_seq_find_bean);
     if(!internal_seq_bean)
@@ -1441,7 +1520,7 @@
     sandesha2_seq_property_bean_set_value(internal_seq_find_bean, env, 
             internal_seq_id);
     sandesha2_seq_property_bean_set_name(internal_seq_find_bean, env, 
-           SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
+           SANDESHA2_SEQUENCE_PROPERTY_RMS_INTERNAL_SEQ_ID);
     internal_seq_bean = sandesha2_seq_property_mgr_find_unique(seq_prop_mgr, 
             env, internal_seq_find_bean);
     if(!internal_seq_bean)
@@ -1459,44 +1538,6 @@
     return AXIS2_SUCCESS; 
 }
 
-/*static axis2_status_t
-sandesha2_client_fill_timedout_outgoing_seq_info(
-    const axutil_env_t *env,
-    sandesha2_seq_report_t *report,
-    axis2_char_t *internal_seq_id,
-    sandesha2_seq_property_mgr_t *seq_prop_mgr)
-{
-    sandesha2_seq_property_bean_t *internal_seq_find_bean = NULL;
-    sandesha2_seq_property_bean_t *internal_seq_bean = NULL;
-    axis2_char_t *out_seq_id = NULL;
-
-    internal_seq_find_bean =sandesha2_seq_property_bean_create(env);
-    if(!internal_seq_find_bean)
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-        return AXIS2_FALSE;
-    }
-    sandesha2_seq_property_bean_set_value(internal_seq_find_bean, env, 
-            internal_seq_id);
-    sandesha2_seq_property_bean_set_name(internal_seq_find_bean, env, 
-           SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
-    internal_seq_bean = sandesha2_seq_property_mgr_find_UNIQUE(seq_prop_mgr, 
-            env, internal_seq_find_bean);
-    if(!internal_seq_bean)
-    {
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-                "Not a valid terminated sequence. Internal sequence bean is not \
-                available for the given sequence.");
-        AXIS2_ERROR_SET(env->error, NOT_A_VALID_TERMINATED_SEQ, AXIS2_FAILURE); 
-        return AXIS2_FAILURE;
-    }
-    sandesha2_seq_report_set_seq_status(report, env, 
-            SANDESHA2_SEQ_STATUS_TIMED_OUT);
-    out_seq_id = sandesha2_seq_property_bean_get_seq_id(internal_seq_bean, env);
-    sandesha2_client_fill_outgoing_seq_info(env, report, out_seq_id, seq_prop_mgr);
-    return AXIS2_SUCCESS; 
-}*/
-
 static axis2_status_t
 sandesha2_client_fill_outgoing_seq_info(
     const axutil_env_t *env,
@@ -1561,7 +1602,7 @@
     axis2_char_t *to_epr,
     axis2_char_t *seq_key)
 {
-    return sandesha2_utils_get_internal_seq_id(env, to_epr, seq_key); 
+    return sandesha2_utils_get_client_internal_sequence_id(env, to_epr, seq_key); 
 }
 
 static sandesha2_seq_report_t *
@@ -1608,16 +1649,23 @@
         incoming side internal_seq_id = seq_id*/
     sandesha2_seq_report_set_seq_direction(seq_report, env, 
         SANDESHA2_SEQ_DIRECTION_IN);
-    status = sandesha2_client_get_svr_seq_status(env, seq_id, seq_prop_mgr, 
-        next_msg_mgr);
-    sandesha2_seq_report_set_seq_status(seq_report, env, 
-        status);
+    status = sandesha2_client_get_svr_seq_status(env, seq_id, seq_prop_mgr, next_msg_mgr);
+    sandesha2_seq_report_set_seq_status(seq_report, env, status);
     if(seq_prop_mgr)
+    {
         sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+    }
+
     if(next_msg_mgr)
+    {
         sandesha2_next_msg_mgr_free(next_msg_mgr, env);
+    }
+
     if(storage_mgr)
+    {
         sandesha2_storage_mgr_free(storage_mgr, env);
+    }
+
     return seq_report;
 }
 
@@ -1625,7 +1673,8 @@
 sandesha2_client_configure_terminate_seq(
     const axutil_env_t *env,
     axis2_options_t *options, 
-    axis2_conf_ctx_t *conf_ctx)
+    axis2_conf_ctx_t *conf_ctx,
+    sandesha2_seq_property_mgr_t *seq_prop_mgr)
 {
     axis2_endpoint_ref_t *to_epr = NULL;
     axis2_char_t *to = NULL;
@@ -1638,41 +1687,44 @@
     sandesha2_seq_report_t *seq_report = NULL;
     axis2_conf_t *conf = NULL;
     axutil_property_t *property = NULL;
-    axis2_char_t *dbname = NULL;
+
     if(!options)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_OPTIONS_OBJECT_NOT_SET, 
-                AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_OPTIONS_OBJECT_NOT_SET, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     to_epr = axis2_options_get_to(options, env);
+
     if(!to_epr)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_TO_EPR_NOT_SET, 
-                AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_TO_EPR_NOT_SET, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     to = (axis2_char_t*)axis2_endpoint_ref_get_address(to_epr, env);
     property = (axutil_property_t *) axis2_options_get_property(options, env, 
-        SANDESHA2_CLIENT_SEQ_KEY);
+            SANDESHA2_CLIENT_SEQ_KEY);
     if(property)
+    {
         seq_key = axutil_property_get_value(property, env);
-    internal_seq_id = sandesha2_utils_get_internal_seq_id(env, to, seq_key);
+    }
 
-    seq_report = sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(
-            env, internal_seq_id, conf_ctx);
+    internal_seq_id = sandesha2_utils_get_client_internal_sequence_id(env, to, seq_key);
+
+    seq_report = sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(env, internal_seq_id, 
+            conf_ctx);
     if(!seq_report)
     {
-        AXIS2_ERROR_SET(env->error, 
-                SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_SEQ_ID, 
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_SEQ_ID, 
                 AXIS2_FAILURE);
         return NULL;
     }
+
     status = sandesha2_seq_report_get_seq_status(seq_report, env);
     if(status != SANDESHA2_SEQ_STATUS_ESTABLISHED)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_NOT_IN_ACTIVE_STATE, 
-            AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_NOT_IN_ACTIVE_STATE, AXIS2_FAILURE);
         return NULL;
     }
     if(conf_ctx)
@@ -1684,85 +1736,74 @@
         sandesha2_identifier_t *identifier = NULL;
         sandesha2_seq_property_bean_t *seq_id_bean = NULL;
         axis2_char_t *seq_id = NULL;
-        sandesha2_storage_mgr_t *storage_mgr = NULL;
-        sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
 
         conf = axis2_conf_ctx_get_conf(conf_ctx, env);
-        dbname = sandesha2_util_get_dbname(env, conf_ctx);
-        storage_mgr = sandesha2_utils_get_storage_mgr(env, dbname);
-        if(storage_mgr)
+    
+        if(seq_prop_mgr)
         {
-            seq_prop_mgr = sandesha2_permanent_seq_property_mgr_create(env, dbname);
+            seq_id_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, internal_seq_id, 
+                    SANDESHA2_SEQUENCE_PROPERTY_RMS_SEQ_ID);
         }
-        if(seq_prop_mgr)
-            seq_id_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, 
-                internal_seq_id, SANDESHA2_SEQ_PROP_OUT_SEQ_ID);
+
         if(!seq_id_bean)
         {
-            AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_ID_BEAN_NOT_SET, 
-                AXIS2_FAILURE);
-            if(seq_prop_mgr)
-                sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
-            if(storage_mgr)
-                sandesha2_storage_mgr_free(storage_mgr, env);
+            AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SEQ_ID_BEAN_NOT_SET, AXIS2_FAILURE);
+
             return NULL;
         }
+
         seq_id = sandesha2_seq_property_bean_get_value(seq_id_bean, env);
         if(!seq_id)
         {
-            AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CANNOT_FIND_SEQ_ID, 
-                AXIS2_FAILURE);
-            if(seq_prop_mgr)
-                sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
-            if(storage_mgr)
-                sandesha2_storage_mgr_free(storage_mgr, env);
+            AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CANNOT_FIND_SEQ_ID, AXIS2_FAILURE);
+
             return NULL;
         }
-        property = axis2_options_get_property(options, env, 
-            SANDESHA2_CLIENT_RM_SPEC_VERSION);
+
+        property = axis2_options_get_property(options, env, SANDESHA2_CLIENT_RM_SPEC_VERSION);
         if(property)
+        {
             rm_spec_version = axutil_property_get_value(property, env);
+        }
+
         if(!rm_spec_version)
         {
-            rm_spec_version = 
-                sandesha2_spec_specific_consts_get_default_spec_version(env);
+            rm_spec_version = sandesha2_spec_specific_consts_get_default_spec_version(env);
         }
-        action = sandesha2_spec_specific_consts_get_terminate_seq_action(env, 
-            rm_spec_version);
+
+        action = sandesha2_spec_specific_consts_get_terminate_seq_action(env, rm_spec_version);
         axis2_options_set_action(options, env, action);
-        soap_ns_uri = (axis2_char_t *) axis2_options_get_soap_version_uri(options, 
-            env);
-        if(0 == axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, soap_ns_uri))
+        soap_ns_uri = (axis2_char_t *) axis2_options_get_soap_version_uri(options, env);
+        if(!axutil_strcmp(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, soap_ns_uri))
         {
-            dummy_envelope = axiom_soap_envelope_create_default_soap_envelope(env, 
-                AXIOM_SOAP12); 
+            dummy_envelope = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP12); 
         }
         else
         {
-            dummy_envelope = axiom_soap_envelope_create_default_soap_envelope(env, 
-                AXIOM_SOAP11); 
+            dummy_envelope = axiom_soap_envelope_create_default_soap_envelope(env, AXIOM_SOAP11); 
         }
-        rm_ns_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, 
-            rm_spec_version);
+
+        rm_ns_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, rm_spec_version);
         terminate_seq = sandesha2_terminate_seq_create(env, rm_ns_value);
         identifier = sandesha2_identifier_create(env, rm_ns_value);
         if(identifier)
+        {
             sandesha2_identifier_set_identifier(identifier, env, seq_id);
+        }
+
         if(terminate_seq)
         {
-            sandesha2_terminate_seq_set_identifier(terminate_seq, env, 
-                identifier);
-            sandesha2_terminate_seq_to_soap_envelope(terminate_seq, env, 
-                dummy_envelope);
+            sandesha2_terminate_seq_set_identifier(terminate_seq, env, identifier);
+            sandesha2_terminate_seq_to_soap_envelope(terminate_seq, env, dummy_envelope);
         }
-        if(seq_prop_mgr)
-            sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
-        if(storage_mgr)
-            sandesha2_storage_mgr_free(storage_mgr, env);
+
         return dummy_envelope;
     }
+
     else
+    {
         return NULL;
+    }
 }
 
 axis2_status_t AXIS2_CALL
@@ -1799,8 +1840,12 @@
     {
         return AXIS2_FAILURE;
     }
+
     if (!fill_soap_envelope(env, msg_ctx, options, payload))
+    {
         return AXIS2_FAILURE;
+    }
+
     axis2_op_client_set_callback(op_client, env, callback);
     axis2_op_client_add_out_msg_ctx(op_client, env, msg_ctx);
     transport_in_protocol = axis2_options_get_transport_in_protocol(
@@ -1820,15 +1865,14 @@
     return axis2_op_client_execute(op_client, env, AXIS2_FALSE);
 }
 
-void AXIS2_CALL
+static void AXIS2_CALL
 sandesha2_client_fire_and_forget(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
     axis2_options_t *options,
     axutil_qname_t *op_qname,
     axis2_callback_t *callback,
-    axiom_node_t *payload,
-    axis2_listener_manager_t *listener_manager)
+    axiom_node_t *payload)
 {
     axis2_op_client_t *op_client = NULL;
     axis2_svc_ctx_t *svc_ctx = NULL;
@@ -1844,40 +1888,44 @@
     {
         op_qname = axutil_qname_create(env, AXIS2_ANON_OUT_ONLY_OP, NULL, NULL);
     }
+
     svc_ctx = axis2_svc_client_get_svc_ctx(svc_client, env);
     conf_ctx =  axis2_svc_ctx_get_conf_ctx(svc_ctx, env);
+
     msg_ctx = axis2_msg_ctx_create(env, conf_ctx, NULL, NULL);
 	svc = axis2_svc_client_get_svc(svc_client, env);
     op = axis2_svc_get_op_with_qname(svc, env, op_qname);
     if(op_qname)
+    {
         axutil_qname_free(op_qname, env);
+    }
+
     if (!fill_soap_envelope(env, msg_ctx, options, payload))
     {
         return;
     }
+
     op_client = axis2_op_client_create(env, op, svc_ctx, options);
     if (!op_client)
     {
         return;
     }
+
     if(callback)
     {
         axis2_op_client_set_callback(op_client, env, callback);
-        /*axis2_op_client_add_out_msg_ctx(op_client, env, msg_ctx);*/
-        transport_in_protocol = axis2_options_get_transport_in_protocol(
-            options, env);
-        axis2_listener_manager_make_sure_started(listener_manager, env,
-            transport_in_protocol, conf_ctx);
+        transport_in_protocol = axis2_options_get_transport_in_protocol(options, env);
         callback_recv = axis2_callback_recv_create(env);
         if (!(callback_recv))
         {
             axis2_svc_client_free(svc_client, env);
         }
-        axis2_op_set_msg_recv(op, env, AXIS2_CALLBACK_RECV_GET_BASE(callback_recv, 
-            env));
+
+        axis2_op_set_msg_recv(op, env, AXIS2_CALLBACK_RECV_GET_BASE(callback_recv, env));
         axis2_op_client_set_callback_recv(op_client, env, callback_recv);
         block = AXIS2_FALSE;
     }
+
     axis2_op_client_add_out_msg_ctx(op_client, env, msg_ctx);
     axis2_op_client_execute(op_client, env, block);
 }
@@ -1900,18 +1948,21 @@
         return AXIS2_FALSE;
     }
 
-    if (axutil_strcmp(soap_version_uri,
-            AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI) == 0)
+    if (!axutil_strcmp(soap_version_uri, AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI))
+    {
         soap_version = AXIOM_SOAP11;
+    }
     else
+    {
         soap_version = AXIOM_SOAP12;
+    }
 
-    envelope = axiom_soap_envelope_create_default_soap_envelope(env,
-            soap_version);
+    envelope = axiom_soap_envelope_create_default_soap_envelope(env, soap_version);
     if (!envelope)
     {
         return AXIS2_FALSE;
     }
+
     if (payload)
     {
         axiom_soap_body_t *soap_body = NULL;
@@ -1919,6 +1970,7 @@
         if (soap_body)
         {
             axiom_node_t *node = NULL;
+
             node = axiom_soap_body_get_base_node(soap_body, env);
             if (node)
             {
@@ -1926,6 +1978,7 @@
             }
         }
     }
+
     axis2_msg_ctx_set_soap_envelope(msg_ctx, env, envelope);
 
     return AXIS2_TRUE;

Modified: webservices/sandesha/trunk/c/src/core/mod_sandesha2.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/core/mod_sandesha2.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/core/mod_sandesha2.c (original)
+++ webservices/sandesha/trunk/c/src/core/mod_sandesha2.c Thu Aug 28 23:56:29 2008
@@ -21,7 +21,6 @@
 #include <sandesha2_constants.h>
 #include <sandesha2_permanent_storage_mgr.h>
 
-/******************************************************************************/
 axis2_status_t AXIS2_CALL
 mod_sandesha2_shutdown(
     axis2_module_t *module,
@@ -46,19 +45,15 @@
     mod_sandesha2_fill_handler_create_func_map
 };
 
-/******************************************************************************/
-
 AXIS2_EXTERN axis2_module_t * AXIS2_CALL
 mod_sandesha2_create(
     const axutil_env_t *env)
 {
     axis2_module_t *module = NULL;
-    module = AXIS2_MALLOC(env->allocator, 
-        sizeof(axis2_module_t));
+    module = AXIS2_MALLOC(env->allocator, sizeof(axis2_module_t));
 
-    /*module->ops = AXIS2_MALLOC(
-        env->allocator, sizeof(axis2_module_ops_t));*/
     module->ops = &mod_sandesha2_ops_var;
+
     return module;
 }
 
@@ -74,21 +69,19 @@
     axis2_conf_t *conf = NULL;
     axis2_ctx_t *ctx = NULL;
     
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2]Entry:mod_sandesha2_init");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2] Entry:mod_sandesha2_init");
     AXIS2_PARAM_CHECK(env->error, conf_ctx, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, module_desc, AXIS2_FAILURE);
     
     sandesha2_error_init();
-    property_bean = sandesha2_property_mgr_load_properties_from_module_desc(env,
-        module_desc);
+    property_bean = sandesha2_property_mgr_load_properties_from_module_desc(env, module_desc);
     if(!property_bean)
-        property_bean = sandesha2_property_mgr_load_properties_from_def_values
-            (env);
+    {
+        property_bean = sandesha2_property_mgr_load_properties_from_def_values(env);
+    }
         
-    param = axutil_param_create(env, SANDESHA2_SANDESHA_PROPERTY_BEAN, 
-        property_bean);
-    axutil_param_set_value_free(param, env, 
-        sandesha2_property_bean_free_void_arg); 
+    param = axutil_param_create(env, SANDESHA2_SANDESHA_PROPERTY_BEAN, property_bean);
+    axutil_param_set_value_free(param, env, sandesha2_property_bean_free_void_arg); 
 
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     axis2_conf_add_param(conf, env, param);
@@ -97,17 +90,15 @@
     axis2_ctx_set_property(ctx, env, SANDESHA2_INMEMORY_STORAGE_MGR, NULL);
     axis2_ctx_set_property(ctx, env, SANDESHA2_PERMANENT_STORAGE_MGR, NULL);
     
-    /*if(!sandesha2_permanent_storage_mgr_create_db(env, conf_ctx))
-    {
-        return AXIS2_FAILURE;
-    }*/
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2]Exit:mod_sandesha2_init");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2] Exit:mod_sandesha2_init");
+
     return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
-mod_sandesha2_shutdown(axis2_module_t *module,
-                        const axutil_env_t *env)
+mod_sandesha2_shutdown(
+    axis2_module_t *module,
+    const axutil_env_t *env)
 {
 
     /* currently we don't have conf_ctx passing to shutdown. When we have that
@@ -133,22 +124,24 @@
 }
 
 axis2_status_t AXIS2_CALL
-mod_sandesha2_fill_handler_create_func_map(axis2_module_t *module,
-                                            const axutil_env_t *env)
+mod_sandesha2_fill_handler_create_func_map(
+    axis2_module_t *module,
+    const axutil_env_t *env)
 {
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     
     module->handler_create_func_map = axutil_hash_make(env);
     if(!module->handler_create_func_map)
     {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, 
-            AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
     axutil_hash_set(module->handler_create_func_map, "SandeshaGlobalInHandler", 
         AXIS2_HASH_KEY_STRING, sandesha2_global_in_handler_create);
+
     axutil_hash_set(module->handler_create_func_map, "SandeshaInHandler", 
         AXIS2_HASH_KEY_STRING, sandesha2_in_handler_create);
+
     axutil_hash_set(module->handler_create_func_map, "SandeshaOutHandler",
         AXIS2_HASH_KEY_STRING, sandesha2_out_handler_create);
     
@@ -160,8 +153,9 @@
  */
 
 AXIS2_EXPORT int 
-axis2_get_instance(axis2_module_t **inst,
-                   const axutil_env_t *env)
+axis2_get_instance(
+    axis2_module_t **inst,
+    const axutil_env_t *env)
 {
    *inst = mod_sandesha2_create(env);
     if(!(*inst))
@@ -173,13 +167,17 @@
 }
 
 AXIS2_EXPORT int 
-axis2_remove_instance(axis2_module_t *inst,
-                      const axutil_env_t *env)
+axis2_remove_instance(
+    axis2_module_t *inst,
+    const axutil_env_t *env)
 {
     axis2_status_t status = AXIS2_FAILURE;
-   if (inst)
-   {
+
+    if (inst)
+    {
         status = mod_sandesha2_shutdown(inst, env);
     }
+
     return status;
 }
+

Modified: webservices/sandesha/trunk/c/src/core/sandesha2_msg_ctx.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/core/sandesha2_msg_ctx.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/core/sandesha2_msg_ctx.c (original)
+++ webservices/sandesha/trunk/c/src/core/sandesha2_msg_ctx.c Thu Aug 28 23:56:29 2008
@@ -51,6 +51,7 @@
     sandesha2_terminate_seq_t *terminate_seq;
     sandesha2_terminate_seq_res_t *terminate_seq_res;
     sandesha2_ack_requested_t *ack_requested;
+    axis2_bool_t is_server_side;
 };
 
 AXIS2_EXTERN sandesha2_msg_ctx_t* AXIS2_CALL
@@ -60,8 +61,7 @@
 {
     sandesha2_msg_ctx_t *rm_msg_ctx = NULL;
     
-    rm_msg_ctx =  (sandesha2_msg_ctx_t *)AXIS2_MALLOC 
-        (env->allocator, sizeof(sandesha2_msg_ctx_t));
+    rm_msg_ctx =  (sandesha2_msg_ctx_t *)AXIS2_MALLOC(env->allocator, sizeof(sandesha2_msg_ctx_t));
 	
     if(!rm_msg_ctx)
 	{
@@ -86,6 +86,7 @@
     
     rm_msg_ctx->msg_type = SANDESHA2_MSG_TYPE_UNKNOWN;
     rm_msg_ctx->msg_ctx = msg_ctx;
+    rm_msg_ctx->is_server_side = AXIS2_FALSE;
 
 	return rm_msg_ctx;
 }
@@ -166,6 +167,7 @@
         sandesha2_ack_requested_free(rm_msg_ctx->ack_requested, env);
         rm_msg_ctx->ack_requested = NULL;
     }
+
 	AXIS2_FREE(env->allocator, rm_msg_ctx);
 	return AXIS2_SUCCESS;
 }
@@ -198,15 +200,16 @@
     int soap_ver = AXIOM_SOAP11;
     axiom_soap_envelope_t *soap_envelope = NULL;
     
-    if(AXIS2_FALSE == axis2_msg_ctx_get_is_soap_11(rm_msg_ctx->msg_ctx, env))
+    if(!axis2_msg_ctx_get_is_soap_11(rm_msg_ctx->msg_ctx, env))
+    {
         soap_ver = AXIOM_SOAP12;
+    }
+
     soap_envelope = axis2_msg_ctx_get_soap_envelope(rm_msg_ctx->msg_ctx, env);
-    if(NULL == soap_envelope)
+    if(!soap_envelope)
     {
-        soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env,
-                        soap_ver);
-        axis2_msg_ctx_set_soap_envelope(rm_msg_ctx->msg_ctx, env, 
-                        soap_envelope);
+        soap_envelope = axiom_soap_envelope_create_default_soap_envelope(env, soap_ver);
+        axis2_msg_ctx_set_soap_envelope(rm_msg_ctx->msg_ctx, env, soap_envelope);
     }
     
     if(rm_msg_ctx->close_seq)
@@ -214,30 +217,26 @@
         sandesha2_close_seq_to_soap_envelope(rm_msg_ctx->close_seq, env, 
             soap_envelope);
     }
+
     if(rm_msg_ctx->close_seq_res)
     {
-        sandesha2_close_seq_res_to_soap_envelope(rm_msg_ctx->close_seq_res, env, 
-            soap_envelope);
+        sandesha2_close_seq_res_to_soap_envelope(rm_msg_ctx->close_seq_res, env, soap_envelope);
     }
     if(rm_msg_ctx->create_seq)
     {
-        sandesha2_create_seq_to_soap_envelope(rm_msg_ctx->create_seq, env, 
-            soap_envelope);
+        sandesha2_create_seq_to_soap_envelope(rm_msg_ctx->create_seq, env, soap_envelope);
     }
     if(rm_msg_ctx->create_seq_res)
     {
-        sandesha2_create_seq_res_to_soap_envelope(rm_msg_ctx->create_seq_res, env, 
-            soap_envelope);
+        sandesha2_create_seq_res_to_soap_envelope(rm_msg_ctx->create_seq_res, env, soap_envelope);
     }
     if(rm_msg_ctx->make_connection)
     {
-        sandesha2_make_connection_to_soap_envelope(rm_msg_ctx->make_connection, 
-            env, soap_envelope);
+        sandesha2_make_connection_to_soap_envelope(rm_msg_ctx->make_connection, env, soap_envelope);
     }
     if(rm_msg_ctx->msg_pending)
     {
-        sandesha2_msg_pending_to_soap_envelope(rm_msg_ctx->msg_pending, env, 
-            soap_envelope);
+        sandesha2_msg_pending_to_soap_envelope(rm_msg_ctx->msg_pending, env, soap_envelope);
     }
     if(rm_msg_ctx->seq_ack)
     {
@@ -249,13 +248,11 @@
     }
     if(rm_msg_ctx->terminate_seq)
     {
-        sandesha2_terminate_seq_to_soap_envelope(rm_msg_ctx->terminate_seq, env, 
-            soap_envelope);
+        sandesha2_terminate_seq_to_soap_envelope(rm_msg_ctx->terminate_seq, env, soap_envelope);
     }
     if(rm_msg_ctx->terminate_seq_res)
     {
-        sandesha2_terminate_seq_res_to_soap_envelope(rm_msg_ctx->terminate_seq_res, 
-            env, soap_envelope);
+        sandesha2_terminate_seq_res_to_soap_envelope(rm_msg_ctx->terminate_seq_res, env, soap_envelope);
     }
     return AXIS2_SUCCESS;
 }
@@ -293,7 +290,7 @@
 {
     AXIS2_PARAM_CHECK(env->error, from, AXIS2_FAILURE);
     
-    return axis2_msg_ctx_set_to(rm_msg_ctx->msg_ctx, env, from);;
+    return axis2_msg_ctx_set_from(rm_msg_ctx->msg_ctx, env, from);;
 }
     
 axis2_endpoint_ref_t *AXIS2_CALL
@@ -499,7 +496,7 @@
     rm_msg_ctx->rm_ns_val = axutil_strdup(env, ns_val);
     if(0 == axutil_strcmp(ns_val, SANDESHA2_SPEC_2005_02_NS_URI))
         rm_msg_ctx->spec_ver = axutil_strdup(env, SANDESHA2_SPEC_VERSION_1_0);
-    if(0 == axutil_strcmp(ns_val, SANDESHA2_SPEC_2006_08_NS_URI))
+    if(0 == axutil_strcmp(ns_val, SANDESHA2_SPEC_2007_02_NS_URI))
         rm_msg_ctx->spec_ver = axutil_strdup(env, SANDESHA2_SPEC_VERSION_1_1);
         
     return AXIS2_SUCCESS;
@@ -639,7 +636,13 @@
     sandesha2_create_seq_res_t *create_seq_res)
 {
     AXIS2_PARAM_CHECK(env->error, create_seq_res, AXIS2_FAILURE);
-    
+   
+    if(rm_msg_ctx->create_seq_res)
+    {
+        sandesha2_create_seq_res_free(rm_msg_ctx->create_seq_res, env);
+        rm_msg_ctx->create_seq_res = NULL;
+    }
+
     rm_msg_ctx->create_seq_res = create_seq_res;
     return AXIS2_SUCCESS;
 }
@@ -832,3 +835,20 @@
     return rm_msg_ctx->ack_requested;
 }
 
+axis2_bool_t AXIS2_CALL
+sandesha2_msg_ctx_get_server_side(
+    const sandesha2_msg_ctx_t * rm_msg_ctx,
+    const axutil_env_t * env)
+{
+    return axis2_msg_ctx_get_server_side(rm_msg_ctx->msg_ctx, env);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_msg_ctx_set_server_side(
+    const sandesha2_msg_ctx_t * rm_msg_ctx,
+    const axutil_env_t * env,
+    const axis2_bool_t server_side)
+{
+    return axis2_msg_ctx_set_server_side(rm_msg_ctx->msg_ctx, env, server_side);
+}
+

Modified: webservices/sandesha/trunk/c/src/handlers/sandesha2_global_in_handler.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/handlers/sandesha2_global_in_handler.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/handlers/sandesha2_global_in_handler.c (original)
+++ webservices/sandesha/trunk/c/src/handlers/sandesha2_global_in_handler.c Thu Aug 28 23:56:29 2008
@@ -81,9 +81,10 @@
     const axis2_char_t *wsa_action = NULL;
     const axis2_char_t *soap_action = NULL;
     axis2_bool_t is_rm_global_msg = AXIS2_FALSE;
+
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2]Entry:sandesha2_global_in_handler");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2]Entry:sandesha2_global_in_handler");
+
    /* This handler needs to identify messages which follow the WSRM 1.0 
     * convention for sending 'LastMessage' when the sender doesn't have a 
     * reliable message to piggyback the last message marker onto.
@@ -99,10 +100,9 @@
     if(wsa_action && !axutil_strcmp(wsa_action, SANDESHA2_SPEC_2005_02_SOAP_ACTION_LAST_MESSAGE))
     {
         axutil_property_t *property = NULL;
-        property = axutil_property_create_with_args(env, 0, 0, 0, 
-            AXIS2_VALUE_TRUE);
-        axis2_msg_ctx_set_property(msg_ctx, env, 
-            SANDESHA2_ISOLATED_LAST_MSG, property);
+        property = axutil_property_create_with_args(env, 0, 0, 0, AXIS2_VALUE_TRUE);
+        axis2_msg_ctx_set_property(msg_ctx, env, SANDESHA2_ISOLATED_LAST_MSG, property);
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Isolated last message");
         return AXIS2_SUCCESS;
     }
     if(!soap_action && !wsa_action)
@@ -113,63 +113,103 @@
         {
             axis2_bool_t last_msg_header = AXIS2_FALSE;
             axiom_soap_header_t *header = NULL;
+
             header = axiom_soap_envelope_get_header(envelope, env);
             if(header)
             {
                 sandesha2_seq_t *sequence = NULL;
                 axiom_node_t *seq_node = NULL;
+                axiom_node_t *header_node = NULL;
+
                 sequence = sandesha2_seq_create(env, SANDESHA2_SPEC_2005_02_NS_URI);
-                seq_node = axiom_soap_header_get_base_node(header, env);
-                sandesha2_seq_from_om_node(sequence, env, seq_node);
+                header_node = axiom_soap_header_get_base_node(header, env);
+                if(header_node)
+                {
+                    axutil_qname_t *seq_qname = NULL;
+                    axiom_element_t *header_element = NULL;
+    
+                    seq_qname = axutil_qname_create(env, SANDESHA2_WSRM_COMMON_SEQ, 
+                            SANDESHA2_SPEC_2005_02_NS_URI, NULL);
+                    if(seq_qname)
+                    {
+                        axiom_element_t *seq_element = NULL;
+
+                        header_element = axiom_node_get_data_element(header_node, env);
+                        seq_element = axiom_element_get_first_child_with_qname(header_element, env,
+                            seq_qname, header_node, &seq_node);
+
+                        axutil_qname_free(seq_qname, env);
+                    }
+                }
+
+                if(sequence && seq_node)
+                {
+                    sandesha2_seq_from_om_node(sequence, env, seq_node);
+                }
+
                 if(sandesha2_seq_get_last_msg(sequence, env))
+                {
                     last_msg_header = AXIS2_TRUE;
-                 
+                }
             }
+
             if(last_msg_header)
             {
                 axiom_soap_body_t *body = NULL;
                 axiom_node_t *body_node = NULL;
+
                 body = axiom_soap_envelope_get_body(envelope, env);
                 body_node = axiom_soap_body_get_base_node(body, env);
                 if(body && !axiom_node_get_first_element(body_node, env))
                 {
                     axutil_property_t *property = NULL;
-                    axutil_string_t *temp_soap_action = axutil_string_create(env, 
-                        SANDESHA2_SPEC_2005_02_SOAP_ACTION_LAST_MESSAGE);
-                    /* There is an empty body so we know this is the kind of message
-                     * that we are looking for.
+                    axutil_string_t *temp_soap_action = NULL;
+
+                    /* There is an empty body so we know this is the kind of message that we are 
+                     * looking for.
                      */
-                    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2]"\
-                        "Setting SOAP Action for a WSRM 1.0 last message");
-                    axis2_msg_ctx_set_soap_action(msg_ctx, env, 
-                        temp_soap_action);
-
-                    property = axutil_property_create_with_args(env, 0, 0, 0, 
-                        AXIS2_VALUE_TRUE);
-                    axis2_msg_ctx_set_property(msg_ctx, env, 
-                        SANDESHA2_ISOLATED_LAST_MSG, property);
+                    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+                            "[sandesha2] Setting SOAP Action for a WSRM 1.0 last message");
+
+                    temp_soap_action = axutil_string_create(env, 
+                            SANDESHA2_SPEC_2005_02_SOAP_ACTION_LAST_MESSAGE);
+                    if(temp_soap_action)
+                    {
+                        axis2_msg_ctx_set_soap_action(msg_ctx, env, temp_soap_action);
+                        axutil_string_free(temp_soap_action, env);
+                    }
+                    
+                    axis2_msg_ctx_set_wsa_action(msg_ctx, env, 
+                            SANDESHA2_SPEC_2005_02_SOAP_ACTION_LAST_MESSAGE);
+
+                    property = axutil_property_create_with_args(env, 0, 0, 0, AXIS2_VALUE_TRUE);
+                    axis2_msg_ctx_set_property(msg_ctx, env, SANDESHA2_ISOLATED_LAST_MSG, property);
                 }
             }
         }
+
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
             "[sandesha2]soap::action and wsa::action are NULL. So return here");
+
         return AXIS2_SUCCESS;
     }
+
     is_rm_global_msg = sandesha2_utils_is_rm_global_msg(env, msg_ctx);
     if(!is_rm_global_msg)
     {
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Not a global RM Message");
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Not a global RM Message");
         return AXIS2_SUCCESS;
     }
+
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     if(!conf_ctx)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Configuration Context is NULL");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] Configuration Context is NULL");
+
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CONF_CTX_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     /*ctx = axis2_msg_ctx_get_base(msg_ctx, env);
     if(!axis2_msg_ctx_get_server_side(msg_ctx, env))
     {
@@ -183,10 +223,10 @@
     soap_envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
     if(!soap_envelope)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2]SOAP envelope "\
-            "is NULL");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2]SOAP envelope is NULL");
         return AXIS2_FAILURE;
     }
+
     /*property = axis2_ctx_get_property(ctx, env, SANDESHA2_REINJECTED_MESSAGE);
     if(property)
         reinjected_msg = (axis2_char_t *) axutil_property_get_value(property, env); 
@@ -197,8 +237,8 @@
         return AXIS2_SUCCESS; // Reinjected Messages are not processed by 
                                  sandesha2 inflow handlers
     }*/
-    fault_part = axiom_soap_body_get_fault(axiom_soap_envelope_get_body(
-                        soap_envelope, env), env);
+
+    fault_part = axiom_soap_body_get_fault(axiom_soap_envelope_get_body(soap_envelope, env), env);
     if(fault_part)
     {
         axis2_relates_to_t *relates_to = NULL;
@@ -213,16 +253,13 @@
             if(op_ctx)
             {
                 axis2_msg_ctx_t *req_msg_ctx = NULL;
-                req_msg_ctx =  axis2_op_ctx_get_msg_ctx(op_ctx, env, 
-                    AXIS2_WSDL_MESSAGE_LABEL_OUT);
+                req_msg_ctx =  axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_OUT);
                 if(req_msg_ctx)
                 {
-                    if(sandesha2_utils_is_retrievable_on_faults(env,
-                        req_msg_ctx))
+                    if(sandesha2_utils_is_retrievable_on_faults(env, req_msg_ctx))
                     {
                         /* TODO we need to notify the listeners */
-                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                            "[sandesha2] soap fault generated");
+                        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] soap fault generated");
                         axis2_msg_ctx_set_paused(msg_ctx, env, AXIS2_TRUE);
                         return AXIS2_SUCCESS;
                     }
@@ -230,6 +267,7 @@
             }
         }
     }
+
     /*Process if global processing possible. - Currently none*/
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
         "[sandesha2]Exit:sandesha2_global_in_handler");

Modified: webservices/sandesha/trunk/c/src/handlers/sandesha2_in_handler.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/handlers/sandesha2_in_handler.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/handlers/sandesha2_in_handler.c (original)
+++ webservices/sandesha/trunk/c/src/handlers/sandesha2_in_handler.c Thu Aug 28 23:56:29 2008
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <axis2_engine.h>
 #include <axis2_handler_desc.h>
 #include <axutil_array_list.h>
 #include <axis2_svc.h>
@@ -32,6 +33,7 @@
 #include <sandesha2_ack_msg_processor.h>
 #include <sandesha2_ack_req_msg_processor.h>
 #include <sandesha2_msg_init.h>
+#include <sandesha2_msg_creator.h>
 #include <sandesha2_seq.h>
 #include <sandesha2_constants.h>
 #include <sandesha2_utils.h>
@@ -58,6 +60,7 @@
 sandesha2_in_handler_process_dropped_msg(
     struct axis2_handler *handler, 
     const axutil_env_t *env,
+    axis2_conf_ctx_t *conf_ctx,
     sandesha2_msg_ctx_t *rm_msg_ctx,
     sandesha2_storage_mgr_t *storage_mgr,
     sandesha2_seq_property_mgr_t *seq_prop_mgr,
@@ -111,93 +114,122 @@
     axutil_property_t *property = NULL;
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
     
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2] Start:sandesha2_in_handler_invoke");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2] Start:sandesha2_in_handler_invoke");
 
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     if(!conf_ctx)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Configuration Context is NULL");
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CONF_CTX_NULL, 
-                AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2]Configuration Context is NULL");
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CONF_CTX_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     if(!sandesha2_permanent_storage_mgr_create_db(env, conf_ctx))
     {
         return AXIS2_FAILURE;
     }
+
     ctx = axis2_msg_ctx_get_base(msg_ctx, env);
-    temp_prop = axis2_ctx_get_property(ctx, env, 
-        SANDESHA2_APPLICATION_PROCESSING_DONE);
+    temp_prop = axis2_ctx_get_property(ctx, env, SANDESHA2_APPLICATION_PROCESSING_DONE);
     if(temp_prop)
+    {
         str_done = (axis2_char_t *) axutil_property_get_value(temp_prop, env); 
-    if(str_done && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, str_done))
+    }
+
+    if(str_done && !axutil_strcmp(AXIS2_VALUE_TRUE, str_done))
     {
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Application processing done");
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Application processing done");
         return AXIS2_SUCCESS;
     }
+
     temp_prop = axis2_ctx_get_property(ctx, env, SANDESHA2_REINJECTED_MESSAGE);
     if(temp_prop)
-        reinjected_msg = (axis2_char_t *) axutil_property_get_value(temp_prop, 
-            env);
-    if(reinjected_msg && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, reinjected_msg))
-    {
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Reinjected_msg. So return here");
-        return AXIS2_SUCCESS; /* Reinjected Messages are not processed by 
-             sandesha2 inflow handlers */
+    {
+        reinjected_msg = (axis2_char_t *) axutil_property_get_value(temp_prop, env);
     }
+
+    if(reinjected_msg && !axutil_strcmp(AXIS2_VALUE_TRUE, reinjected_msg))
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Reinjected_msg. So return here");
+
+        return AXIS2_SUCCESS; /* Reinjected Messages are not processed by sandesha2 inflow handlers */
+    }
+
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     svc = axis2_msg_ctx_get_svc(msg_ctx, env);
     if(!svc)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                "[sandesha2]Axis2 Service is NULL");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] Axis2 Service is NULL");
+
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
+
     rm_msg_ctx = sandesha2_msg_init_init_msg(env, msg_ctx);
     dbname = sandesha2_util_get_dbname(env, conf_ctx);
     storage_mgr = sandesha2_utils_get_storage_mgr(env, dbname);
     seq_prop_mgr = sandesha2_permanent_seq_property_mgr_create(env, dbname);
     sender_mgr = sandesha2_permanent_sender_mgr_create(env, dbname);
-    property = axis2_msg_ctx_get_property(msg_ctx, env, 
-        SANDESHA2_ISOLATED_LAST_MSG);
+    property = axis2_msg_ctx_get_property(msg_ctx, env, SANDESHA2_ISOLATED_LAST_MSG);
     if(property)
+    {
         value = axutil_property_get_value(property, env);
-    if(value && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, value))
+    }
+
+    if(value && !axutil_strcmp(AXIS2_VALUE_TRUE, value))
+    {
         isolated_last_msg = AXIS2_TRUE;
+    }
+
     if(!isolated_last_msg)
-        dropped = sandesha2_in_handler_drop_if_duplicate(handler, env, 
-            rm_msg_ctx, storage_mgr, seq_prop_mgr, sender_mgr);
+    {
+        dropped = sandesha2_in_handler_drop_if_duplicate(handler, env, rm_msg_ctx, storage_mgr, 
+                seq_prop_mgr, sender_mgr);
+    }
+
     if(dropped)
     {
-        sandesha2_in_handler_process_dropped_msg(handler, env, 
-            rm_msg_ctx, storage_mgr, seq_prop_mgr, sender_mgr);
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]msg_ctx dropped. So return here");
+        sandesha2_in_handler_process_dropped_msg(handler, env, conf_ctx, rm_msg_ctx, storage_mgr, 
+                seq_prop_mgr, sender_mgr);
+
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] msg_ctx dropped. So return here");
+
         if(rm_msg_ctx)
+        {
             sandesha2_msg_ctx_free(rm_msg_ctx, env);
+        }
+
         if(seq_prop_mgr)
+        {
             sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+        }
+
+        if(sender_mgr)
+        {
+            sandesha2_sender_mgr_free(sender_mgr, env);
+        }
+
         if(storage_mgr)
+        {
             sandesha2_storage_mgr_free(storage_mgr, env);
+        }
+
         return AXIS2_SUCCESS;
     }
+
     /* 
      * TODO Validate the message
      * sandesha2_msg_validator_validate(env, rm_msg_ctx);
      */
-    seq_ack = sandesha2_msg_ctx_get_seq_ack(rm_msg_ctx, env);
+    /*seq_ack = sandesha2_msg_ctx_get_seq_ack(rm_msg_ctx, env);
     if(seq_ack)
     {
         sandesha2_msg_processor_t *ack_proc = NULL;
         ack_proc = sandesha2_ack_msg_processor_create(env);
         sandesha2_msg_processor_process_in_msg(ack_proc, env, rm_msg_ctx);
         sandesha2_msg_processor_free(ack_proc, env);
-    }
+    }*/
+
     ack_requested = sandesha2_msg_ctx_get_ack_requested(rm_msg_ctx, env);
     if(ack_requested)
     {
@@ -205,21 +237,45 @@
             AXIS2_FALSE);
         sandesha2_msg_ctx_add_soap_envelope(rm_msg_ctx, env);
     }
-    msg_processor = sandesha2_msg_processor_create_msg_processor(env, 
-        rm_msg_ctx);
+
+    msg_processor = sandesha2_msg_processor_create_msg_processor(env, rm_msg_ctx);
     if(msg_processor)
     {
         sandesha2_msg_processor_process_in_msg(msg_processor, env, rm_msg_ctx);
         sandesha2_msg_processor_free(msg_processor, env);
     }
+
+    seq_ack = sandesha2_msg_ctx_get_seq_ack(rm_msg_ctx, env);
+    if(seq_ack)
+    {
+        sandesha2_msg_processor_t *ack_proc = NULL;
+        ack_proc = sandesha2_ack_msg_processor_create(env);
+        sandesha2_msg_processor_process_in_msg(ack_proc, env, rm_msg_ctx);
+        sandesha2_msg_processor_free(ack_proc, env);
+    }
+
     if(rm_msg_ctx)
+    {
         sandesha2_msg_ctx_free(rm_msg_ctx, env);
+    }
+
     if(seq_prop_mgr)
+    {
         sandesha2_seq_property_mgr_free(seq_prop_mgr, env);
+    }
+
+    if(sender_mgr)
+    {
+        sandesha2_sender_mgr_free(sender_mgr, env);
+    }
+
     if(storage_mgr)
+    {
         sandesha2_storage_mgr_free(storage_mgr, env);
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2]Exit:sandesha2_in_handler_invoke");
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2] Exit:sandesha2_in_handler_invoke");
+
     return AXIS2_SUCCESS;
 }
 
@@ -234,54 +290,65 @@
 {
     axis2_bool_t drop = AXIS2_FALSE;
     
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2]Entry:sandesha2_in_handler_drop_if_duplicate");
     AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, AXIS2_FALSE);
     AXIS2_PARAM_CHECK(env->error, storage_mgr, AXIS2_FALSE);
     
-    if(SANDESHA2_MSG_TYPE_APPLICATION == sandesha2_msg_ctx_get_msg_type(
-        rm_msg_ctx, env))
+    if(SANDESHA2_MSG_TYPE_APPLICATION == sandesha2_msg_ctx_get_msg_type(rm_msg_ctx, env))
     {
         sandesha2_seq_t *sequence = NULL;
         long msg_no = -1;
-        axis2_char_t *seq_id = NULL;
+        axis2_char_t *rmd_sequence_id = NULL;
         
         sequence = sandesha2_msg_ctx_get_sequence(rm_msg_ctx, env);
         if(sequence)
         {
-            seq_id = sandesha2_identifier_get_identifier(
-                sandesha2_seq_get_identifier(sequence, env), env);
-            msg_no = sandesha2_msg_number_get_msg_num(sandesha2_seq_get_msg_num(
-                sequence, env), env);
+            rmd_sequence_id = sandesha2_identifier_get_identifier(sandesha2_seq_get_identifier(sequence, 
+                        env), env);
+
+            msg_no = sandesha2_msg_number_get_msg_num(sandesha2_seq_get_msg_num(sequence, env), env);
         }
-        if(seq_id && 0 < msg_no)
+        if(rmd_sequence_id && 0 < msg_no)
         {
             sandesha2_seq_property_bean_t *rcvd_msgs_bean = NULL;
             
             if(seq_prop_mgr)
-                rcvd_msgs_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr,
-                    env, seq_id, SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
+            {
+                rcvd_msgs_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, rmd_sequence_id, 
+                        SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
+            }
+
             if(rcvd_msgs_bean)
             {
                 axis2_char_t *rcvd_msgs_str = NULL;
                 axutil_array_list_t *msg_no_list = NULL;
                 int i = 0, size = 0;
                 
-                rcvd_msgs_str = sandesha2_seq_property_bean_get_value(
-                        rcvd_msgs_bean, env);
-                msg_no_list = sandesha2_utils_get_array_list_from_string(env,
-                        rcvd_msgs_str);
+                rcvd_msgs_str = sandesha2_seq_property_bean_get_value(rcvd_msgs_bean, env);
+
+                AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "rcvd_msgs_str:%s", rcvd_msgs_str);
+
+                msg_no_list = sandesha2_utils_get_array_list_from_string(env, rcvd_msgs_str);
                 if(msg_no_list)
-                    size = axutil_array_list_size(msg_no_list, env);
-                for(i = 0; i < size; i++)
                 {
-                    axis2_char_t *temp = NULL;
-                    
-                    temp = axutil_array_list_get(msg_no_list, env, i);
-                    if(atol(temp) == msg_no)
-                        drop = AXIS2_TRUE;
+                    size = axutil_array_list_size(msg_no_list, env);
+                    for(i = 0; i < size; i++)
+                    {
+                        axis2_char_t *temp = NULL;
+                        
+                        temp = axutil_array_list_get(msg_no_list, env, i);
+                        if(axutil_atol(temp) == msg_no)
+                        {
+                            drop = AXIS2_TRUE;
+                        }
+
+                        AXIS2_FREE(env->allocator, temp);
+                    }
+
+                    axutil_array_list_free(msg_no_list, env);
                 }
+
             }
+
             if(!drop)
             {
                 axiom_soap_body_t *soap_body = NULL;
@@ -290,15 +357,16 @@
                 axiom_children_iterator_t *children_iterator = NULL;
                 axis2_bool_t empty_body = AXIS2_FALSE;
             
-                soap_body = axiom_soap_envelope_get_body(
-                    sandesha2_msg_ctx_get_soap_envelope(rm_msg_ctx, env), 
-                    env);
+                soap_body = axiom_soap_envelope_get_body(sandesha2_msg_ctx_get_soap_envelope(
+                        rm_msg_ctx, env), env);
                 body_node = axiom_soap_body_get_base_node(soap_body, env);
                 body_element = axiom_node_get_data_element(body_node, env);
-                children_iterator = axiom_element_get_children(body_element, env, 
-                    body_node);
+                children_iterator = axiom_element_get_children(body_element, env, body_node);
                 if(!axiom_children_iterator_has_next(children_iterator, env))
+                {
                     empty_body = AXIS2_TRUE;
+                }
+
                 if(empty_body)
                 {
                     axis2_char_t *rcvd_msgs_str1 = NULL;
@@ -307,36 +375,40 @@
                     sandesha2_msg_processor_t *app_msg_processor = NULL;
                     
                     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-                        "[sandesha2]Empty body last msg recieved");
+                            "[sandesha2] Empty body last msg recieved");
+
                     drop = AXIS2_TRUE;
                     if(!rcvd_msgs_bean)
                     {
-                        rcvd_msgs_bean = sandesha2_seq_property_bean_create_with_data
-                            (env, seq_id, 
-                            SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES, "");
-                        sandesha2_seq_property_mgr_insert(seq_prop_mgr, env,
-                            rcvd_msgs_bean);
+                        rcvd_msgs_bean = sandesha2_seq_property_bean_create_with_data(env, 
+                                rmd_sequence_id, SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES, "");
+                        sandesha2_seq_property_mgr_insert(seq_prop_mgr, env, rcvd_msgs_bean);
                     }
-                    rcvd_msgs_str1 = sandesha2_seq_property_bean_get_value(
-                            rcvd_msgs_bean, env);
+
+                    rcvd_msgs_str1 = sandesha2_seq_property_bean_get_value(rcvd_msgs_bean, env);
                     sprintf(msg_no_str, "%ld", msg_no);
                     if(rcvd_msgs_str1 && 0 < axutil_strlen(rcvd_msgs_str1))
-                        bean_value = axutil_strcat(env, rcvd_msgs_str1, ",",
-                            msg_no_str, NULL);
+                    {
+                        bean_value = axutil_strcat(env, rcvd_msgs_str1, ",", msg_no_str, NULL);
+                    }
                     else
+                    {
                         bean_value = axutil_strdup(env, msg_no_str);
+                    }
                     
-                    sandesha2_seq_property_bean_set_value(rcvd_msgs_bean, env,
-                        bean_value);
-                    sandesha2_seq_property_mgr_update(seq_prop_mgr, env, 
-                        rcvd_msgs_bean);
+                    sandesha2_seq_property_bean_set_value(rcvd_msgs_bean, env, bean_value);
+                    sandesha2_seq_property_mgr_update(seq_prop_mgr, env, rcvd_msgs_bean);
                     app_msg_processor = sandesha2_app_msg_processor_create(env);
-                    sandesha2_app_msg_processor_send_ack_if_reqd(env, 
-                        rm_msg_ctx, bean_value, storage_mgr, sender_mgr, 
-                        seq_prop_mgr);
+                    sandesha2_app_msg_processor_send_ack_if_reqd(env, rm_msg_ctx, bean_value, 
+                            rmd_sequence_id, storage_mgr, sender_mgr, seq_prop_mgr);
                     sandesha2_msg_processor_free(app_msg_processor, env);
                 }
             }
+
+            if(rcvd_msgs_bean)
+            {
+                sandesha2_seq_property_bean_free(rcvd_msgs_bean, env);
+            }
         }        
     } 
     else if(SANDESHA2_MSG_TYPE_UNKNOWN == sandesha2_msg_ctx_get_msg_type(
@@ -359,8 +431,7 @@
                         rm_msg_ctx, env), env);
             if(!op_ctx && !op_ctx1)
             {
-                AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Dropping"
-                        " duplicate RM message");
+                AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2] Dropping duplicate RM message");
                 drop = AXIS2_TRUE;
             }
         }
@@ -370,54 +441,115 @@
         sandesha2_msg_ctx_set_paused(rm_msg_ctx, env, AXIS2_TRUE);
         return AXIS2_TRUE;
     }
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2]Exit:sandesha2_in_handler_drop_if_duplicate");
+
     return AXIS2_FALSE;
 }
 
-
+/* In this function appropriately respond for the dropeed message. In two way messaging if the
+ * response for the dropped application message is not acknowledged then take the the response
+ * message from the database and append acknowledgment for the dropped message to it.
+ * Otherwise send the acknowledgment for the dropped message.
+ */
 static axis2_status_t AXIS2_CALL
 sandesha2_in_handler_process_dropped_msg(
     struct axis2_handler *handler, 
     const axutil_env_t *env,
+    axis2_conf_ctx_t *conf_ctx,
     sandesha2_msg_ctx_t *rm_msg_ctx,
     sandesha2_storage_mgr_t *storage_mgr,
     sandesha2_seq_property_mgr_t *seq_prop_mgr,
     sandesha2_sender_mgr_t *sender_mgr)
 {
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
+        "[sandesha2] Entry:sandesha2_in_handler_process_dropped_msg");
+
     AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, AXIS2_FALSE);
     AXIS2_PARAM_CHECK(env->error, storage_mgr, AXIS2_FALSE);
     
-    if(SANDESHA2_MSG_TYPE_APPLICATION == sandesha2_msg_ctx_get_msg_type(
-        rm_msg_ctx, env))
+    if(SANDESHA2_MSG_TYPE_APPLICATION == sandesha2_msg_ctx_get_msg_type(rm_msg_ctx, env))
     {
         sandesha2_seq_t *sequence = NULL;
-        axis2_char_t *seq_id = NULL;
+        axis2_char_t *rmd_sequence_id = NULL;
         
         sequence = sandesha2_msg_ctx_get_sequence(rm_msg_ctx, env);
         if(sequence)
-            seq_id = sandesha2_identifier_get_identifier(
-                sandesha2_seq_get_identifier(sequence, env), env);
+        {
+            rmd_sequence_id = sandesha2_identifier_get_identifier(sandesha2_seq_get_identifier(sequence, 
+                        env), env);
+        }
             
-        if(seq_id)
+        if(rmd_sequence_id)
         {
             sandesha2_seq_property_bean_t *rcvd_msgs_bean = NULL;
             axis2_char_t *rcvd_msgs_str = NULL;
             sandesha2_msg_processor_t *app_msg_processor = NULL;
             
-            rcvd_msgs_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr,
-                env, seq_id, SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
+            rcvd_msgs_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, rmd_sequence_id, 
+                    SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
+
             if(rcvd_msgs_bean)
             {
-                rcvd_msgs_str = sandesha2_seq_property_bean_get_value(
-                    rcvd_msgs_bean, env);
-                app_msg_processor = sandesha2_app_msg_processor_create(env);
-                sandesha2_app_msg_processor_send_ack_if_reqd(env, rm_msg_ctx, 
-                    rcvd_msgs_str, storage_mgr, sender_mgr, seq_prop_mgr);
-                sandesha2_msg_processor_free(app_msg_processor, env);
+                sandesha2_sender_bean_t *sender_bean = NULL;
+                axis2_char_t *internal_sequence_id = NULL;
+                long msg_no = -1;
+                sandesha2_sender_bean_t *find_sender_bean = NULL;
+
+                rcvd_msgs_str = sandesha2_seq_property_bean_get_value(rcvd_msgs_bean, env);
+                
+                msg_no = sandesha2_msg_number_get_msg_num(sandesha2_seq_get_msg_num(sequence, env), env);
+                internal_sequence_id = sandesha2_utils_get_internal_sequence_id(env, rmd_sequence_id);
+                find_sender_bean = sandesha2_sender_bean_create(env);
+                sandesha2_sender_bean_set_msg_no(find_sender_bean, env, msg_no);
+                sandesha2_sender_bean_set_internal_seq_id(find_sender_bean, env, internal_sequence_id);
+                sandesha2_sender_bean_set_send(find_sender_bean, env, AXIS2_TRUE);
+
+                sender_bean = sandesha2_sender_mgr_find_unique(sender_mgr, env, find_sender_bean);
+                if(sender_bean)
+                {
+                    axis2_char_t *storage_key = NULL;
+                    axis2_msg_ctx_t *app_msg_ctx = NULL;
+                    sandesha2_msg_ctx_t *app_rm_msg_ctx = NULL;
+                    axis2_engine_t *engine = NULL;
+                    axis2_op_ctx_t *op_ctx = NULL;
+                    axis2_msg_ctx_t *in_msg_ctx = NULL;
+
+                    storage_key = sandesha2_sender_bean_get_msg_ctx_ref_key(sender_bean, env);
+                    app_msg_ctx = sandesha2_storage_mgr_retrieve_msg_ctx(storage_mgr, env, storage_key, 
+                            conf_ctx, AXIS2_TRUE);
+
+                    in_msg_ctx = sandesha2_msg_ctx_get_msg_ctx(rm_msg_ctx, env);
+
+                    axis2_msg_ctx_set_transport_out_stream(app_msg_ctx, env, 
+                            axis2_msg_ctx_get_transport_out_stream(in_msg_ctx, env));
+
+                    axis2_msg_ctx_set_out_transport_info(app_msg_ctx, env, 
+                            axis2_msg_ctx_get_out_transport_info(in_msg_ctx, env));
+
+                    op_ctx = axis2_msg_ctx_get_op_ctx(in_msg_ctx, env);
+
+                    axis2_op_ctx_set_response_written(op_ctx, env, AXIS2_TRUE);
+
+                    app_rm_msg_ctx = sandesha2_msg_init_init_msg(env, app_msg_ctx);
+                    sandesha2_msg_creator_add_ack_msg(env, app_rm_msg_ctx, rmd_sequence_id, seq_prop_mgr);
+                    engine = axis2_engine_create(env, conf_ctx);
+                    axis2_engine_send(engine, env, app_msg_ctx);
+                    sandesha2_msg_ctx_free(app_rm_msg_ctx, env);
+                }
+                else
+                {
+                    app_msg_processor = sandesha2_app_msg_processor_create(env);
+                    sandesha2_app_msg_processor_send_ack_if_reqd(env, rm_msg_ctx, rcvd_msgs_str, 
+                        rmd_sequence_id, storage_mgr, sender_mgr, seq_prop_mgr);
+                    
+                    sandesha2_msg_processor_free(app_msg_processor, env);
+                }
             }
         }
     }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
+        "[sandesha2] Exit:sandesha2_in_handler_process_dropped_msg");
+
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/sandesha/trunk/c/src/handlers/sandesha2_out_handler.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/handlers/sandesha2_out_handler.c?rev=690127&r1=690126&r2=690127&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/handlers/sandesha2_out_handler.c (original)
+++ webservices/sandesha/trunk/c/src/handlers/sandesha2_out_handler.c Thu Aug 28 23:56:29 2008
@@ -39,8 +39,6 @@
     const axutil_env_t *env,
     struct axis2_msg_ctx *msg_ctx);
                                          
-/******************************************************************************/                         
-
 AXIS2_EXTERN axis2_handler_t* AXIS2_CALL
 sandesha2_out_handler_create(
     const axutil_env_t *env, 
@@ -82,22 +80,29 @@
     int msg_type = -1;
 
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI,  
-        "[sandesha2]Entry:sandesha2_out_handler_invoke");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2] Entry:sandesha2_out_handler_invoke");
+            
+    temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, SANDESHA2_SEQ_PROP_MAKE_CONNECTION_OUT_PATH);
+    if (temp_prop)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+            "[sandesha2] In make connection out path. So return here.");
+        return AXIS2_SUCCESS;
+        temp_prop = NULL;
+    }
+
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     if(!conf_ctx)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Configuration Context is NULL");
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CONF_CTX_NULL, 
-            AXIS2_FAILURE);
+            "[sandesha2] Configuration Context is NULL");
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CONF_CTX_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
     svc = axis2_msg_ctx_get_svc(msg_ctx, env);
     if(!svc)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Axis2 Service is NULL");
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2]Axis2 Service is NULL");
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
@@ -105,40 +110,52 @@
     if(!axis2_svc_is_module_engaged(svc, env, module_qname))
     {
         if(module_qname)
+        {
             axutil_qname_free(module_qname, env);
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]RM is not engaged. So return here");
+        }
+
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[sandesha2]RM is not engaged. So return here");
         return AXIS2_SUCCESS;
     }
+
     if(module_qname)
+    {
         axutil_qname_free(module_qname, env);
-    temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, 
-            SANDESHA2_APPLICATION_PROCESSING_DONE);
+    }
+    temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, SANDESHA2_APPLICATION_PROCESSING_DONE);
     if(temp_prop)
+    {
         str_done = (axis2_char_t *) axutil_property_get_value(temp_prop, env); 
+    }
+
     if(str_done && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, str_done))
     {
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
             "[sandesha2]Application Processing Done. So return here.");
         return AXIS2_SUCCESS; 
     }
+
     temp_prop = axutil_property_create_with_args(env, 0, 0, 0, AXIS2_VALUE_TRUE);
-    axis2_msg_ctx_set_property(msg_ctx, env, 
-        SANDESHA2_APPLICATION_PROCESSING_DONE, temp_prop);
+    axis2_msg_ctx_set_property(msg_ctx, env, SANDESHA2_APPLICATION_PROCESSING_DONE, temp_prop);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     if(!sandesha2_permanent_storage_mgr_create_db(env, conf_ctx))
     {
         return AXIS2_FAILURE;
     }
+
     /* Getting rm message */ 
     rm_msg_ctx = sandesha2_msg_init_init_msg(env, msg_ctx);
     temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, SANDESHA2_CLIENT_DUMMY_MESSAGE);
     if(NULL != temp_prop)
+    {
         dummy_msg_str = (axis2_char_t *) axutil_property_get_value(temp_prop, env); 
+    }
+
     if(dummy_msg_str && 0 == axutil_strcmp(AXIS2_VALUE_TRUE, dummy_msg_str))
     {
         dummy_msg = AXIS2_TRUE;
     }
+
     msg_type = sandesha2_msg_ctx_get_msg_type(rm_msg_ctx, env);
     if(msg_type == SANDESHA2_MSG_TYPE_UNKNOWN)
     {
@@ -146,8 +163,7 @@
         axis2_op_ctx_t *op_ctx = NULL;
 
         op_ctx = axis2_msg_ctx_get_op_ctx(msg_ctx, env);
-        req_msg_ctx =  axis2_op_ctx_get_msg_ctx(op_ctx, env, 
-            AXIS2_WSDL_MESSAGE_LABEL_IN);
+        req_msg_ctx =  axis2_op_ctx_get_msg_ctx(op_ctx, env, AXIS2_WSDL_MESSAGE_LABEL_IN);
         if(req_msg_ctx) /* For the server side */
         {
             sandesha2_msg_ctx_t *req_rm_msg_ctx = NULL;
@@ -165,14 +181,12 @@
         }
         else if(!axis2_msg_ctx_get_server_side(msg_ctx, env))
         {
-            msg_processor = (sandesha2_msg_processor_t *) 
-            sandesha2_app_msg_processor_create(env);
+            msg_processor = (sandesha2_msg_processor_t *) sandesha2_app_msg_processor_create(env);
         }
     }
     else
     {
-        msg_processor = sandesha2_msg_processor_create_msg_processor(env, 
-            rm_msg_ctx);
+        msg_processor = sandesha2_msg_processor_create_msg_processor(env, rm_msg_ctx);
     }
     if(msg_processor)
     {
@@ -182,24 +196,30 @@
     if(AXIS2_SUCCESS != AXIS2_ERROR_GET_STATUS_CODE(env->error))
     {
         /* Message should not be sent in an exception situation */
+
         axis2_msg_ctx_set_paused(msg_ctx, env, AXIS2_TRUE);
         if(rm_msg_ctx)
+        {
             sandesha2_msg_ctx_free(rm_msg_ctx, env);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[sandesha2]Error in processing the message");
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CANNOT_PROCESS_MSG, 
-                AXIS2_FAILURE);
+        }
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] Error in processing the message");
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_CANNOT_PROCESS_MSG, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
     
-    temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, 
-            SANDESHA2_APPLICATION_PROCESSING_DONE);
+    temp_prop = axis2_msg_ctx_get_property(msg_ctx, env, SANDESHA2_APPLICATION_PROCESSING_DONE);
     if(temp_prop)
+    {
         axutil_property_set_value(temp_prop, env, AXIS2_VALUE_FALSE);
+    }
+
     if(rm_msg_ctx)
+    {
         sandesha2_msg_ctx_free(rm_msg_ctx, env);
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
-        "[sandesha2]Exit:sandesha2_out_handler_invoke");
+    }
+
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[sandesha2]Exit:sandesha2_out_handler_invoke");
+
     return AXIS2_SUCCESS;
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org