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 2006/07/17 05:41:55 UTC

svn commit: r422611 - in /webservices/sandesha/trunk/c: include/ include/sandesha2/ src/ src/client/ src/util/

Author: damitha
Date: Sun Jul 16 20:41:52 2006
New Revision: 422611

URL: http://svn.apache.org/viewvc?rev=422611&view=rev
Log:
Client code is compiling now

Modified:
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_spec_specific_consts.h
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_utils.h
    webservices/sandesha/trunk/c/include/sandesha2_ack_mgr.h
    webservices/sandesha/trunk/c/src/Makefile.am
    webservices/sandesha/trunk/c/src/client/Makefile.am
    webservices/sandesha/trunk/c/src/client/client.c
    webservices/sandesha/trunk/c/src/util/ack_mgr.c
    webservices/sandesha/trunk/c/src/util/error.c
    webservices/sandesha/trunk/c/src/util/spec_specific_consts.c
    webservices/sandesha/trunk/c/src/util/utils.c

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_error.h Sun Jul 16 20:41:52 2006
@@ -60,9 +60,9 @@
         /* Ack Final now allowed in the spec */
         SANDESHA2_ERROR_ACK_FINAL_NOT_ALLOWED,
         /* 'To' address is not set */
-        SANDESHA2_ERROR_TO_ADDRESS_IS_NOT_SET,
+        SANDESHA2_ERROR_TO_ADDRESS_NOT_SET,
         /* Service Context is NULL */
-        SANDESHA2_ERROR_SVC_CTX_IS_NULL,
+        SANDESHA2_ERROR_SVC_CTX_NULL,
         /* Result is not unique */
         SANDESHA2_ERROR_NON_UNIQUE_RESULT,
         /* Key is NULL. Cannot insert */
@@ -117,6 +117,8 @@
         SANDESHA2_ERROR_CLOSE_SEQ_FEATURE_ONLY_AVAILABLE_FOR_WSRM1_1,
         /* Cannnot find a seq report for the given data */
         SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_DATA, 
+        /* Cannnot find a seq report for the given sequence id */
+        SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_SEQ_ID, 
         /* Sequence is not in a active state. Either create seq response has not
          * being received or seq has been terminated, cannot get seqID
          */
@@ -133,6 +135,22 @@
         SANDESHA2_ERROR_SPEC_VERSION_DOES_NOT_DEFINE_A_ACK_REQUEST_ACTION,
         /* Invalid endpoint reference */
         SANDESHA2_ERROR_INVALID_EPR,
+        /* Cannot find the sequence id */
+        SANDESHA2_ERROR_CANNOT_FIND_SEQ_ID,
+        /* This RM version does not allow sequence closing */
+        SANDESHA2_ERROR_RM_VERSION_DOES_NOT_ALLOW_SEQ_CLOSING,
+        /* "Not a valid terminated sequence. Internal sequence Bean is not
+         * available for the given sequence
+         */
+        NOT_A_VALID_TERMINATED_SEQ,
+        /* "Not a valid timedout sequence. Internal sequence Bean is not
+         * available for the given sequence
+         */
+        NOT_A_VALID_TIMEDOUT_SEQ,
+        /* Completed messages bean is null, for the sequence */
+        SANDESHA2_ERROR_COMPLETED_MSGS_BEAN_IS_NULL,
+        /* Sequence id is not recoreded */
+        SANDESHA2_ERROR_UNRECORDED_SEQ_ID,
         /** The following has to be the last error value all the time.
             All other error codes should appear above this.
             SANDESHA_ERROR_LAST is used to track the number of error codes present

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_spec_specific_consts.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_spec_specific_consts.h?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_spec_specific_consts.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_spec_specific_consts.h Sun Jul 16 20:41:52 2006
@@ -74,14 +74,20 @@
 sandesha2_spec_specific_consts_get_ack_request_action(
         const axis2_env_t *env,
         axis2_char_t *spec_version);
-
+	
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+sandesha2_spec_specific_consts_is_seq_closing_allowed(
+        const axis2_env_t *env,
+        axis2_char_t *spec_version);
 
 AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-sandesha2_spec_specific_consts_get_default_spec_version(const axis2_env_t *env);
+sandesha2_spec_specific_consts_get_default_spec_version(
+        const axis2_env_t *env);
 
 AXIS2_EXTERN axis2_char_t* AXIS2_CALL
-sandesha2_spec_specific_consts_get_anon_uri(const axis2_env_t *env,
-                        axis2_char_t *addr_ns_val);
+sandesha2_spec_specific_consts_get_anon_uri(
+        const axis2_env_t *env,
+        axis2_char_t *addr_ns_val);
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_utils.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_utils.h?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_utils.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_utils.h Sun Jul 16 20:41:52 2006
@@ -118,6 +118,19 @@
 sandesha2_utils_get_svr_side_incoming_seq_id(const axis2_env_t *env,
                         axis2_char_t *incoming_seq_id);
 
+/**
+ * Caller must free the returned string.
+ * @param to
+ * @param seq_key
+ *
+ * @return internal_seq_id
+ */
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+sandesha2_utils_get_internal_seq_id(
+        const axis2_env_t *env,
+        axis2_char_t *to,
+        axis2_char_t *seq_key);
+
 AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL
 sandesha2_utils_create_new_related_msg_ctx(const axis2_env_t *env,
                         sandesha2_msg_ctx_t *ref_rm_msg,

Modified: webservices/sandesha/trunk/c/include/sandesha2_ack_mgr.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_ack_mgr.h?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_ack_mgr.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_ack_mgr.h Sun Jul 16 20:41:52 2006
@@ -42,6 +42,26 @@
                         axis2_char_t *seq_id,
                         sandesha2_storage_mgr_t *storage_mgr);
 
+/**
+ * This is used to get the acked messages of a sequence. If this is an outgoing 
+ * message the sequence_identifier should be the internal sequenceID.
+ * 
+ * @param sequence_identifier
+ * @param out_going_msg
+ * @return
+ */
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
+sandesha2_ack_mgr_get_client_completed_msgs_list(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
+ 
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
+sandesha2_ack_mgr_get_svr_completed_msgs_list(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
+
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/sandesha/trunk/c/src/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/Makefile.am?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/Makefile.am Sun Jul 16 20:41:52 2006
@@ -1,4 +1,4 @@
-SUBDIRS = wsrm storage util transport workers
+SUBDIRS = wsrm storage util transport workers client
 noinst_LTLIBRARIES = libsandesha2.la
 
 libsandesha2_la_SOURCES = msg_ctx.c

Modified: webservices/sandesha/trunk/c/src/client/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/client/Makefile.am?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/client/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/client/Makefile.am Sun Jul 16 20:41:52 2006
@@ -2,7 +2,11 @@
 
 libsandesha_client_la_SOURCES = \
 							sequence_report.c \
-							report.c
+							report.c \
+							client.c
 
 INCLUDES = -I$(top_builddir)/include \
-			@UTILINC@
+			-I$(top_builddir)/include/sandesha2 \
+			@UTILINC@ \
+			@AXIOMINC@ \
+			@AXIS2INC@

Modified: webservices/sandesha/trunk/c/src/client/client.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/client/client.c?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/client/client.c (original)
+++ webservices/sandesha/trunk/c/src/client/client.c Sun Jul 16 20:41:52 2006
@@ -15,7 +15,6 @@
  */
  
 #include <sandesha2_client.h>
-#include <sandesha2_seq_report.h>
 #include <sandesha2_storage_mgr.h>
 #include <sandesha2_seq_property_mgr.h>
 #include <sandesha2_create_seq_mgr.h>
@@ -25,94 +24,101 @@
 #include <sandesha2_utils.h>
 #include <sandesha2_ack_requested.h>
 #include <sandesha2_identifier.h>
+#include <sandesha2_close_seq.h>
+#include <sandesha2_terminate_seq.h>
+#include <sandesha2_ack_mgr.h>
+#include <sandesha2_constants.h>
 
-#include <axis2_svc_client.h>
 #include <axis2_svc_ctx.h>
 #include <axis2_conf_ctx.h>
 #include <axis2_ctx.h>
 #include <axis2_property.h>
 #include <axis2_log.h>
 #include <axis2_options.h>
+#include <axis2_uuid_gen.h>
 #include <axiom_soap_envelope.h>
 #include <axiom_soap_body.h>
+#include <axiom_soap_header.h>
 #include <axiom_node.h>
 #include <axiom_element.h>
 #include <axiom_soap_const.h>
 
-typedef struct sandesha2_client_impl sandesha2_client_impl_t;
-
-/** 
- * @brief Schema Struct Impl
- *   Axis2 Schema  
- */ 
-struct sandesha2_client_impl
-{
-    sandesha2_client_t client;
+/**
+ * Caller must free the returned internal_seq_id
+ * @param to
+ * @param seq_key
+ *
+ * @return internal_seq_id
+ */
+static axis2_char_t *
+sandesha2_client_get_internal_seq_id(
+        const axis2_env_t *env,
+        axis2_char_t *to,
+        axis2_char_t *seq_key);
 
-};
+static axiom_soap_envelope_t *
+sandesha2_client_configure_close_seq(
+        const axis2_env_t *env,
+        axis2_options_t *options, 
+        axis2_conf_ctx_t *conf_ctx);
 
-#define SANDESHA2_INTF_TO_IMPL(client) ((sandesha2_client_impl_t *) client)
+static axis2_bool_t
+sandesha2_client_is_seq_terminated(
+        const axis2_env_t *env,
+        axis2_char_t *internal_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-axis2_status_t AXIS2_CALL 
-sandesha2_client_free(
-        void *client,
-        const axis2_env_t *envv);
+static axis2_bool_t
+sandesha2_client_is_seq_timedout(
+        const axis2_env_t *env,
+        axis2_char_t *internal_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-AXIS2_EXTERN sandesha2_client_t * AXIS2_CALL
-sandesha2_client_create(
-        const axis2_env_t *env)
-{
-    sandesha2_client_impl_t *client_impl = NULL;
-    
-    AXIS2_ENV_CHECK(env, NULL);
-    client_impl = AXIS2_MALLOC(env->allocator, 
-                    sizeof(sandesha2_client_impl_t));
+static axis2_status_t
+sandesha2_client_fill_terminated_outgoing_seq_info(
+        const axis2_env_t *env,
+        sandesha2_seq_report_t *report,
+        axis2_char_t *internal_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-    client_impl->f_ = ;
+static axis2_status_t
+sandesha2_client_fill_timedout_outgoing_seq_info(
+        const axis2_env_t *env,
+        sandesha2_seq_report_t *report,
+        axis2_char_t *internal_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-    client_impl->client.ops = AXIS2_MALLOC(env->allocator, 
-                    sizeof(sandesha2_client_ops_t)); 
-    
-    client_impl->super = axis2_hash_make(env);
-    if(!client_impl->super) 
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
-        return NULL;
-    }
-    client_impl->client.ops->free = sandesha2_client_free;
+static axis2_status_t
+sandesha2_client_fill_outgoing_seq_info(
+        const axis2_env_t *env,
+        sandesha2_seq_report_t *report,
+        axis2_char_t *out_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr);
 
-    return &(client_impl->client);
-}
+static axis2_char_t
+sandesha2_client_get_svr_seq_status(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_storage_mgr_t *storage_mgr);
 
-axis2_status_t AXIS2_CALL
-sandesha2_client_free(
-        void *client,
-        const axis2_env_t *env)
-{
-    sandesha2_client_impl_t *client_impl = NULL;
+static axis2_char_t *
+sandesha2_client_generate_internal_seq_id_for_the_client_side(
+        const axis2_env_t *env,
+        axis2_char_t *to_epr,
+        axis2_char_t *seq_key);
 
-    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-    client_impl = SANDESHA2_INTF_TO_IMPL(client);
+static sandesha2_seq_report_t *
+sandesha2_client_get_incoming_seq_report(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        axis2_conf_ctx_t *conf_ctx);
 
-    if(client_impl->f_namespc)
-    {
-        AXIS2_URI_FREE(client_impl->f_namespc, env);
-        client_impl->f_namespc = NULL;
-    }
-    
-    if((&(client_impl->client))->ops)
-    {
-        AXIS2_FREE(env->allocator, (&(client_impl->client))->ops);
-        (&(client_impl->client))->ops = NULL;
-    }
+static axiom_soap_envelope_t *
+sandesha2_client_configure_terminate_seq(
+        const axis2_env_t *env,
+        axis2_options_t *options, 
+        axis2_conf_ctx_t *conf_ctx);
 
-    if(client_impl)
-    {
-        AXIS2_FREE(env->allocator, client_impl);
-        client_impl = NULL;
-    }
-    return AXIS2_SUCCESS;
-}
 
 /**
  * Users can get a seq_report of the seq defined by the information
@@ -132,14 +138,15 @@
     axis2_char_t *seq_key = NULL;
     axis2_svc_ctx_t *svc_ctx = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_char_t *internal_seq_id = NULL;
     
     AXIS2_ENV_CHECK(env, NULL);
     AXIS2_PARAM_CHECK(env->error, svc_client, NULL);
 
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    options = (axis2_options_t *) AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
     if(options == NULL)
     {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_OPTIONS_OBJECT_NOT_SET, 
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_OPTIONS_OBJECT_NOT_SET, 
                 AXIS2_FAILURE);
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
                 "Options object of the service client not set.");
@@ -149,17 +156,17 @@
     if(to_epr == NULL)
     {
         AXIS2_SANDESHA2_ERROR_SET(env->error, 
-                AXIS2_SANDESHA2_ERROR_TO_ADDRESS_NOT_SET, AXIS2_FAILURE);
+                SANDESHA2_ERROR_TO_ADDRESS_NOT_SET, AXIS2_FAILURE);
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
                 "To address is not set.");
     }
     to = AXIS2_ENDPOINT_REF_GET_ADDRESS(to_epr, env);
     seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
             SANDESHA2_CLIENT_SEQ_KEY);
-    svc_ctx = AXIS2_SVC_CLIET_GET_SVC_CTX(svc_client, env);
+    svc_ctx = (axis2_svc_ctx_t *)AXIS2_SVC_CLIENT_GET_SVC_CTX(svc_client, env);
     if(svc_ctx == NULL)
     {
-        AXIS2_SANDESHA2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_IS_NULL, 
+        AXIS2_SANDESHA2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, 
                 AXIS2_FAILURE);
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
                 "Service Context is NULL.");
@@ -169,9 +176,9 @@
     internal_seq_id = sandesha2_client_get_internal_seq_id(
             env, to, seq_key);
 
-    return 
-        sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(
-            env, internal_seq_id, conf_ctx); 
+    return (sandesha2_seq_report_t *) 
+            sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(env, 
+            internal_seq_id, conf_ctx);
 
 }
 
@@ -189,9 +196,9 @@
     AXIS2_PARAM_CHECK(env->error, seq_key, NULL);
     AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL);
 
-    internal_seq_id = SANDESHA2_UTIL_GET_INTERNAL_SEQ_ID(to, 
-            seq_key);
-    return sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(env, 
+    internal_seq_id = sandesha2_utils_get_internal_seq_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);
 }
 
@@ -211,8 +218,9 @@
     axis2_ctx_t *ctx = NULL;
     axis2_property_t *property = NULL;
     axis2_bool_t within_transaction = AXIS2_FALSE;
-    axis2_bool_t rolled_back = AXIS2_FALSE;
     sandesha2_transaction_t *report_transaction = NULL;
+    axis2_char_t *within_transaction_str = NULL;
+    axis2_char_t *out_seq_id = NULL;
     
     AXIS2_ENV_CHECK(env, NULL);
     AXIS2_PARAM_CHECK(env->error, internal_seq_id, NULL);
@@ -227,7 +235,7 @@
     seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env); 
     create_seq_mgr = SANDESHA2_STORAGE_MGR_GET_CREATE_SEQ_MGR(storage_mgr, env); 
     ctx = AXIS2_CONF_CTX_GET_BASE(conf_ctx, env);
-    property = AXIS2_CTX_GET_PROPERTY(ctx, env);
+    property = AXIS2_CTX_GET_PROPERTY(ctx, env, SANDESHA2_WITHIN_TRANSACTION, AXIS2_FALSE);
     within_transaction_str = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
     if(within_transaction_str && 0 == AXIS2_STRCMP(within_transaction_str, 
                 SANDESHA2_VALUE_TRUE))
@@ -254,7 +262,7 @@
                     internal_seq_id, seq_prop_mgr);
             return seq_report;
         }
-        if(AXIS2_TRUE == sandesha2_client_is_seq_timeout(env, internal_seq_id, 
+        if(AXIS2_TRUE == sandesha2_client_is_seq_timedout(env, internal_seq_id, 
                     seq_prop_mgr))
         {
             sandesha2_client_fill_timeout_outgoing_seq_info(env, seq_report, 
@@ -279,7 +287,7 @@
     out_seq_id = SANDESHA2_CREATE_SEQ_BEAN_GET_SEQ_ID(create_seq_bean, env);
     if(!out_seq_id)
     {
-        SANDESHA2_SEQ_REPORT_SET_INTERNAL_SEQ_ID(seq_report, nev, 
+        SANDESHA2_SEQ_REPORT_SET_INTERNAL_SEQ_ID(seq_report, env, 
                 internal_seq_id);
         SANDESHA2_SEQ_REPORT_SET_SEQ_STATUS(seq_report, env, 
                 SANDESHA2_SEQ_STATUS_INITIAL);
@@ -360,7 +368,7 @@
     axis2_conf_t *conf = NULL;
     sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
     sandesha2_report_t *sandesha2_report = NULL;
-    sandesha2_seq_property_bean_t *internla_seq_find_bean = NULL;
+    sandesha2_seq_property_bean_t *internal_seq_find_bean = NULL;
     axis2_char_t *within_transaction_str = NULL;
     axis2_bool_t within_transaction = AXIS2_FALSE;
     sandesha2_transaction_t *report_transaction = NULL;
@@ -368,7 +376,7 @@
     axis2_array_list_t *collection = NULL;
     axis2_array_list_t *svr_completed_msgs_beans = NULL;
     int i = 0, size = 0;
-    sandesha2_seq_property_bean_t *svc_completed_msgs_find_bean = NULL;
+    sandesha2_seq_property_bean_t *svr_completed_msgs_find_bean = NULL;
     axis2_ctx_t *ctx = NULL;
     axis2_property_t *property = NULL;
 
@@ -379,10 +387,10 @@
     internal_seq_find_bean = sandesha2_seq_property_bean_create(env);
     ctx = AXIS2_CONF_CTX_GET_BASE(conf_ctx, env);
     property = (axis2_property_t *) AXIS2_CTX_GET_PROPERTY(ctx, env, 
-            SANDESHA2_WITHIN_TRANSACTION);
-    withing_transaction_str = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+            SANDESHA2_WITHIN_TRANSACTION, AXIS2_FALSE);
+    within_transaction_str = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
     if(within_transaction_str && 0 == AXIS2_STRCMP(within_transaction_str, 
-                SANDEHSA2_VALUE_TRUE))
+                SANDESHA2_VALUE_TRUE))
     {
         within_transaction = AXIS2_TRUE;
     }
@@ -421,28 +429,28 @@
         axis2_char_t status = -1;
 
         bean = (sandesha2_seq_property_bean_t *) AXIS2_ARRAY_LIST_GET(
-                collection, env i);
+                collection, env, i);
         seq_id = SANDESHA2_SEQ_PROPERTY_BEAN_GET_SEQ_ID(bean, env);
         SANDESHA2_REPORT_ADD_TO_OUTGOING_SEQ_LIST(sandesha2_report, env, seq_id);
         value = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(bean, env);
-        SANDESHA2_REPORT_ADD_TO_OUTGOING_INTERNAL_SEQ_MAP(sandesha2_report, 
+        SANDESHA2_REPORT_ADD_TO_OUTGOING_INTERNAL_SEQ_MAP(sandesha2_report, env,  
                 seq_id, value);
         report = sandesha2_client_get_outgoing_seq_report_with_internal_seq_id(
                 env, value, conf_ctx);
         completed_msgs = SANDESHA2_SEQ_REPORT_GET_COMPLETED_MSGS(report, env);
         if(completed_msgs)
             no_of_msgs = AXIS2_ARRAY_LIST_SIZE(completed_msgs, env);
-        SANDESHA2_REPORT_ADD_TO_NO_OF_COMPLETED_MSGS_MAP(sandesha2_report, 
+        SANDESHA2_REPORT_ADD_TO_NO_OF_COMPLETED_MSGS_MAP(sandesha2_report, env, 
                 seq_id, no_of_msgs);
         status = SANDESHA2_SEQ_REPORT_GET_SEQ_STATUS(report, env);
-        SANDESHA2_REPORT_ADD_TO_SEQ_STATUS_MAP(sandesha2_report, seq_id, status);
+        SANDESHA2_REPORT_ADD_TO_SEQ_STATUS_MAP(sandesha2_report, env, seq_id, status);
     }
 	/* incoming sequences */
     svr_completed_msgs_find_bean = sandesha2_seq_property_bean_create(env);
     if(svr_completed_msgs_find_bean)
         SANDESHA2_SEQ_PROPERTY_BEAN_SET_NAME(svr_completed_msgs_find_bean, env, 
                 SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
-    svr_completed_msgs_beans = SANDESHA2_SEQ_PROPERTY_MGR_FIND(seq_pro_mgr, 
+    svr_completed_msgs_beans = SANDESHA2_SEQ_PROPERTY_MGR_FIND(seq_prop_mgr, 
             env, svr_completed_msgs_find_bean);
     if(AXIS2_SUCCESS != SANDESHA2_ERROR_GET_STATUS_CODE(env->error))
     {
@@ -471,7 +479,7 @@
         axis2_char_t status = -1;
 
         svr_completed_msgs_bean = (sandesha2_seq_property_bean_t *) 
-            AXIS2_ARRAY_LIST_GET(svr_completed_msgs_beans, env i);
+            AXIS2_ARRAY_LIST_GET(svr_completed_msgs_beans, env, i);
         seq_id = SANDESHA2_SEQ_PROPERTY_BEAN_GET_SEQ_ID(svr_completed_msgs_bean, 
                 env);
         SANDESHA2_REPORT_ADD_TO_INCOMING_SEQ_LIST(sandesha2_report, env, seq_id);
@@ -482,10 +490,10 @@
         completed_msgs = SANDESHA2_SEQ_REPORT_GET_COMPLETED_MSGS(seq_report, env);
         if(completed_msgs)
             no_of_msgs = AXIS2_ARRAY_LIST_SIZE(completed_msgs, env);
-        SANDESHA2_REPORT_ADD_TO_NO_OF_COMPLETED_MSGS_MAP(sandesha2_report, 
+        SANDESHA2_REPORT_ADD_TO_NO_OF_COMPLETED_MSGS_MAP(sandesha2_report, env, 
                 seq_id, no_of_msgs);
         status = SANDESHA2_SEQ_REPORT_GET_SEQ_STATUS(seq_report, env);
-        SANDESHA2_REPORT_ADD_TO_SEQ_STATUS_MAP(sandesha2_report, seq_id, status);
+        SANDESHA2_REPORT_ADD_TO_SEQ_STATUS_MAP(sandesha2_report, env, seq_id, status);
     }
     if (AXIS2_TRUE != within_transaction && AXIS2_TRUE != rolled_back && 
                 report_transaction != NULL) 
@@ -499,14 +507,14 @@
 sandesha2_client_create_seq_with_svc_client(
         const axis2_env_t *env,
         axis2_svc_client_t *svc_client,
-        axis2_bool_t *offer)
+        axis2_bool_t offer)
 {
     axis2_options_t *options = NULL;
     axis2_endpoint_ref_t *to_epr = NULL;
     axis2_char_t *to = NULL;
     axis2_char_t *seq_key = NULL;
 
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -563,7 +571,7 @@
     axis2_options_t *options = NULL;
     axis2_char_t *old_seq_key = NULL;
 
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -604,14 +612,14 @@
     axiom_element_t *element = NULL;
     axis2_qname_t *qname = NULL;
 
-    svc_ctx = AXIS2_SVC_CLIENT_GET_SVC_CONTEXT(svc_client, env);
+    svc_ctx = (axis2_svc_ctx_t *) AXIS2_SVC_CLIENT_GET_SVC_CONTEXT(svc_client, env);
     if(!svc_ctx)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_IS_NULL, 
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, 
                 AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -630,8 +638,8 @@
     conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
     terminate_envelope = sandesha2_client_configure_terminate_seq(env, options, 
             conf_ctx);
-    body = AXIOM_ENVELOPE_GET_BODY(terminate_envelope, env);
-    node = AXIOM_BODY_GET_BASE_NODE(body, env);
+    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 = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_TERMINATE_SEQ, 
             rm_namespc_value, NULL);
@@ -663,7 +671,7 @@
     axis2_options_t *options = NULL;
     axis2_char_t *old_seq_key = NULL;
     
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -674,7 +682,7 @@
             SANDESHA2_CLIENT_SEQ_KEY);
     AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, seq_key);
     sandesha2_client_terminate_seq_with_svc_client(env, svc_client);
-    AXIS2_OPTIONS_SET_PROPERTY(options, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
     return AXIS2_SUCCESS;
 }
 
@@ -703,15 +711,15 @@
     axiom_element_t *element = NULL;
     axis2_qname_t *qname = NULL;
     
-    svc_ctx = AXIS2_SVC_CLIENT_GET_SVC_CONTEXT(svc_client, env);
+    svc_ctx = (axis2_svc_ctx_t *) AXIS2_SVC_CLIENT_GET_SVC_CONTEXT(svc_client, env);
     if(!svc_ctx)
     {
-        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_IS_NULL, 
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, 
                 AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
 
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -730,8 +738,8 @@
     conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
     close_envelope = sandesha2_client_configure_close_seq(env, options, 
             conf_ctx);
-    body = AXIOM_ENVELOPE_GET_BODY(close_envelope, env);
-    node = AXIOM_BODY_GET_BASE_NODE(body, env);
+    body = AXIOM_SOAP_ENVELOPE_GET_BODY(close_envelope, env);
+    node = AXIOM_SOAP_BODY_GET_BASE_NODE(body, env);
     element = AXIOM_NODE_GET_DATA_ELEMENT(node, env);
     qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_CLOSE_SEQ, 
             rm_namespc_value, NULL);
@@ -765,7 +773,7 @@
     axis2_char_t *spec_version = NULL;
     axis2_char_t *old_seq_key = NULL;
     
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -774,18 +782,18 @@
     }
     spec_version = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
             SANDESHA2_CLIENT_RM_SPEC_VERSION);
-    if(0 != SANDESHA2_SPEC_VERSION_1_1, spec_version)
+    if(0 != AXIS2_STRCMP(SANDESHA2_SPEC_VERSION_1_1, spec_version))
     {
         AXIS2_ERROR_SET(env->error, 
                 SANDESHA2_ERROR_CLOSE_SEQ_FEATURE_ONLY_AVAILABLE_FOR_WSRM1_1, 
                 AXIS2_FAILURE);
-        return AXIS2_FAILURE
+        return AXIS2_FAILURE;
     }
     old_seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
             SANDESHA2_CLIENT_SEQ_KEY);
     AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, seq_key);
     sandesha2_client_close_seq_with_svc_client(env, svc_client);
-    AXIS2_OPTIONS_SET_PROPERTY(options, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
     return AXIS2_SUCCESS;
 }
 
@@ -812,7 +820,7 @@
     axis2_options_t *options = NULL;
     axis2_char_t *old_seq_key = NULL;
     
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -823,7 +831,7 @@
             SANDESHA2_CLIENT_SEQ_KEY);
     AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, seq_key);
     sandesha2_client_wait_until_seq_completed_with_svc_client(env, svc_client);
-    AXIS2_OPTIONS_SET_PROPERTY(options, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
     return AXIS2_SUCCESS;
 }
 
@@ -870,6 +878,7 @@
                 done = AXIS2_TRUE;
         }
     }
+    return AXIS2_SUCCESS;
 }
 
 axis2_status_t AXIS2_CALL
@@ -882,7 +891,7 @@
     axis2_options_t *options = NULL;
     axis2_char_t *old_seq_key = NULL;
     
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -894,7 +903,7 @@
     AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, seq_key);
     sandesha2_client_wait_until_seq_completed_with_svc_client_and_max_waiting_time(
             env, svc_client, max_waiting_time);
-    AXIS2_OPTIONS_SET_PROPERTY(options, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
     return AXIS2_SUCCESS;
 }
 
@@ -919,8 +928,9 @@
     sandesha2_seq_property_bean_t *seq_id_bean = NULL;
     axis2_char_t *seq_id = NULL;
     axis2_char_t status = -1;
+    axis2_conf_t *conf = NULL;
 
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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, 
@@ -937,10 +947,10 @@
     to = AXIS2_ENDPOINT_REF_GET_ADDRESS(to_epr, env);
     seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
             SANDESHA2_CLIENT_SEQ_KEY);
-   svc_ctx = 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_SVC_CTX_NOT_SET, AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, AXIS2_FAILURE);
         return NULL;
    }
    conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
@@ -962,7 +972,7 @@
         return NULL;
     }
     conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
-    storage_mgr = sandesha2_util_get_storage_mgr(env, conf_ctx, conf);
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, conf_ctx, conf);
     seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env);
     seq_id_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
             internal_seq_id, SANDESHA2_SEQ_PROP_OUT_SEQ_ID);
@@ -977,7 +987,7 @@
 }
 
 axis2_status_t AXIS2_CALL
-sandesha2_client_send_ack_request(
+sandesha2_client_send_ack_request_with_svc_client(
         const axis2_env_t *env,
         axis2_svc_client_t *svc_client)
 {
@@ -989,10 +999,6 @@
     axis2_svc_ctx_t *svc_ctx = NULL;
     axis2_char_t *internal_seq_id = NULL;
     sandesha2_seq_report_t *seq_report = NULL;
-    sandesha2_storage_mgr_t *storage_mgr = NULL;
-    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
-    sandesha2_seq_property_bean_t *seq_id_bean = NULL;
-    axis2_char_t *seq_id = NULL;
     axis2_char_t status = -1;
     axis2_char_t *out_seq_id = NULL;
     axis2_char_t *soap_ns_uri = NULL;
@@ -1010,17 +1016,17 @@
     axis2_char_t *old_action = NULL;
     axis2_char_t *action = NULL;
     
-    options = AXIS2_SVC_CLIENT_GET_OPTIONS(svc_client, env);
+    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);
         return AXIS2_FAILURE;
     }
-    svc_ctx = 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_SVC_CTX_NOT_SET, AXIS2_FAILURE);
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_SVC_CTX_NULL, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
     conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
@@ -1047,8 +1053,8 @@
         return AXIS2_FAILURE;
     }
     internal_seq_id = sandesha2_client_get_internal_seq_id(env, to, seq_key);
-    seq_report = sandesha2_client_get_outgoing_seq_report_internal_seq_id(env, internal_seq_id, 
-            conf_ctx);
+    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, 
@@ -1065,7 +1071,7 @@
         return AXIS2_FAILURE;
     }
     out_seq_id = sandesha2_client_get_seq_id(env, svc_client);
-    soap_ns_uri = AXIS2_OPTIONS_GET_SOAP_VERSION_URI(options, env);
+    soap_ns_uri = (axis2_char_t *) AXIS2_OPTIONS_GET_SOAP_VERSION_URI(options, env);
     if(0 == AXIS2_STRCMP(AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI, soap_ns_uri))
     {
         dummy_envelope = axiom_soap_envelope_create_default_soap_envelope(env, 
@@ -1081,7 +1087,8 @@
     identifier = sandesha2_identifier_create(env, rm_ns_value);
     SANDESHA2_IDENTIFIER_SET_IDENTIFIER(identifier, env, out_seq_id);
     SANDESHA2_ACK_REQUESTED_SET_IDENTIFIER(ack_requested, env, identifier);
-    SANDESHA2_IOM_RM_PART_TO_SOAP_ENVELOPE(ack_requested, env, dummy_envelope);
+    SANDESHA2_IOM_RM_PART_TO_SOAP_ENVELOPE((sandesha2_iom_rm_part_t *) 
+            ack_requested, env, dummy_envelope);
     header = AXIOM_SOAP_ENVELOPE_GET_HEADER(dummy_envelope, env);
     node = AXIOM_SOAP_HEADER_GET_BASE_NODE(header, env);
     element = AXIOM_NODE_GET_DATA_ELEMENT(node, env);
@@ -1099,5 +1106,561 @@
     AXIS2_OPTIONS_SET_ACTION(options, env, old_action);
     
     return AXIS2_SUCCESS;
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_client_send_ack_request_with_svc_client_and_seq_key(
+        const axis2_env_t *env,
+        axis2_svc_client_t *svc_client,
+        axis2_char_t *seq_key)
+{
+    axis2_options_t *options = NULL;
+    axis2_char_t * old_seq_key = NULL;
+
+    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);
+        return AXIS2_FAILURE;
+    }
+    old_seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
+            SANDESHA2_CLIENT_SEQ_KEY);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, seq_key);
+    sandesha2_client_send_ack_request_with_svc_client(env, svc_client);
+    AXIS2_OPTIONS_SET_PROPERTY(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_seq_key);
+    return AXIS2_SUCCESS;
+}
+
+/**
+ * Caller must free the returned internal_seq_id
+ * @param to
+ * @param seq_key
+ *
+ * @return internal_seq_id
+ */
+static axis2_char_t *
+sandesha2_client_get_internal_seq_id(
+        const axis2_env_t *env,
+        axis2_char_t *to,
+        axis2_char_t *seq_key)
+{
+    return (axis2_char_t *) sandesha2_util_get_internal_seq_id(env, to, seq_key);
+}
+
+static axiom_soap_envelope_t *
+sandesha2_client_configure_close_seq(
+        const axis2_env_t *env,
+        axis2_options_t *options, 
+        axis2_conf_ctx_t *conf_ctx)
+{
+    axis2_endpoint_ref_t *to_epr = NULL;
+    axis2_char_t *to = NULL;
+    axis2_char_t *seq_key = NULL;
+    axis2_char_t *internal_seq_id = NULL;
+    sandesha2_close_seq_t *close_seq = NULL;
+    sandesha2_storage_mgr_t *storage_mgr = NULL;
+    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
+    sandesha2_seq_property_bean_t *seq_id_bean = NULL;
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t status = -1;
+    axis2_char_t *soap_ns_uri = NULL;
+    axis2_char_t *rm_ns_value = NULL;
+    axis2_char_t *rm_spec_version = NULL;
+    axiom_soap_envelope_t *dummy_envelope = NULL;
+    sandesha2_identifier_t *identifier = NULL;
+    sandesha2_seq_report_t *seq_report = NULL;
+    axis2_conf_t *conf = NULL;
+
+    if(!options)
+    {
+        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);
+        return AXIS2_FAILURE;
+    }
+    to = AXIS2_ENDPOINT_REF_GET_ADDRESS(to_epr, env);
+    seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
+            SANDESHA2_CLIENT_SEQ_KEY);
+    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);
+    if(!seq_report)
+    {
+        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);
+        return NULL;
+    }
+    conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, conf_ctx, conf);
+    seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env);
+    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);
+        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);
+        return NULL;
+    }
+    rm_spec_version = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
+            SANDESHA2_CLIENT_RM_SPEC_VERSION);
+    if(!rm_spec_version)
+    {
+        rm_spec_version = 
+            sandesha2_spec_specific_consts_get_default_spec_version(env);
+    }
+    if(AXIS2_TRUE != sandesha2_spec_specific_consts_is_seq_closing_allowed(env, 
+                rm_spec_version))
+    {
+        AXIS2_ERROR_SET(env->error, 
+                SANDESHA2_ERROR_RM_VERSION_DOES_NOT_ALLOW_SEQ_CLOSING, 
+                AXIS2_FAILURE);
+        return NULL;
+    }
+    soap_ns_uri = (axis2_char_t *) AXIS2_OPTIONS_GET_SOAP_VERSION_URI(options, env);
+    if(0 == AXIS2_STRCMP(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, soap_ns_uri))
+    {
+        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); 
+    }
+    rm_ns_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, rm_spec_version);
+    close_seq = sandesha2_close_seq_create(env, rm_ns_value);
+    identifier = sandesha2_identifier_create(env, rm_ns_value);
+    SANDESHA2_IDENTIFIER_SET_IDENTIFIER(identifier, env, seq_id);
+    SANDESHA2_CLOSE_SEQ_SET_IDENTIFIER(close_seq, env, identifier);
+    SANDESHA2_IOM_RM_PART_TO_SOAP_ENVELOPE((sandesha2_iom_rm_part_t *) close_seq, 
+            env, dummy_envelope);
+
+    return dummy_envelope;
+
+}
+
+static axis2_bool_t
+sandesha2_client_is_seq_terminated(
+        const axis2_env_t *env,
+        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;
+    sandesha2_seq_property_bean_t *seq_terminated_bean = NULL;
+    axis2_char_t *value = NULL;
+
+    internal_seq_find_bean =sandesha2_seq_property_bean_create(env);
+    if(!internal_seq_find_bean)
+    {
+        AXIS2_SET_ERROR(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, 
+                "Internal sequence bean is not available for the given sequence.");
+        return AXIS2_FALSE;
+    }
+    out_seq_id = SANDESHA2_SEQ_PROPERTY_BEAN_GET_SEQ_ID(internal_seq_bean, env);
+    seq_terminated_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
+            out_seq_id, SANDESHA2_SEQ_PROP_SEQ_TERMINATED);
+    value = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(seq_terminated_bean, env);
+    if(seq_terminated_bean != NULL && 0 == AXIS2_STRCMP(SANDESHA2_VALUE_TRUE, value))
+    {
+        return AXIS2_TRUE;
+    }
+    return AXIS2_FALSE;
+    
+}
+
+static axis2_bool_t
+sandesha2_client_is_seq_timedout(
+        const axis2_env_t *env,
+        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;
+    sandesha2_seq_property_bean_t *seq_terminated_bean = NULL;
+    axis2_char_t *value = NULL;
+
+    internal_seq_find_bean =sandesha2_seq_property_bean_create(env);
+    if(!internal_seq_find_bean)
+    {
+        AXIS2_SET_ERROR(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, 
+                "Internal sequence bean is not available for the given sequence.");
+        return AXIS2_FALSE;
+    }
+    out_seq_id = SANDESHA2_SEQ_PROPERTY_BEAN_GET_SEQ_ID(internal_seq_bean, env);
+    seq_terminated_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
+            out_seq_id, SANDESHA2_SEQ_PROP_SEQ_TIMED_OUT);
+    value = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(seq_terminated_bean, env);
+    if(seq_terminated_bean != NULL && 0 == AXIS2_STRCMP(SANDESHA2_VALUE_TRUE, value))
+    {
+        return AXIS2_TRUE;
+    }
+    return AXIS2_FALSE;
+    
+}
+
+static axis2_status_t
+sandesha2_client_fill_terminated_outgoing_seq_info(
+        const axis2_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_SET_ERROR(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_TERMINATED);
+    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_timedout_outgoing_seq_info(
+        const axis2_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_SET_ERROR(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 axis2_env_t *env,
+        sandesha2_seq_report_t *report,
+        axis2_char_t *out_seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr)
+{
+    axis2_array_list_t *completed_msg_list = NULL;
+    int i = 0, size = 0;
+    
+    SANDESHA2_REPORT_SET_SEQ_ID(report, env, out_seq_id);
+    completed_msg_list = sandesha2_ack_mgr_get_client_completed_msgs_list(env,
+            out_seq_id, seq_prop_mgr);
+    if(completed_msg_list)
+        size = AXIS2_ARRAY_LIST_SIZE(completed_msg_list, env);
+    for(i = 0; i < size; i++)
+    {
+        axis2_char_t *value = NULL;
+        long *lng = AXIS2_MALLOC(env->allocator, sizeof(long));
+        value =  AXIS2_ARRAY_LIST_GET(completed_msg_list, env, i);
+        *lng = atol(value);
+        SANDESHA2_SEQ_REPORT_ADD_COMPLETED_MSG(report, env, lng);
+    }
+    return AXIS2_SUCCESS; 
+}
+
+static axis2_char_t
+sandesha2_client_get_svr_seq_status(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_storage_mgr_t *storage_mgr)
+{
+    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
+    sandesha2_seq_property_bean_t *terminated_bean = NULL;
+    sandesha2_seq_property_bean_t *timedout_bean = NULL;
+    sandesha2_next_msg_mgr_t *next_msg_mgr = NULL;
+    sandesha2_next_msg_bean_t *next_msg_bean = NULL;
+    
+    seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env);
+    terminated_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
+            seq_id, SANDESHA2_SEQ_PROP_SEQ_TERMINATED);
+    if(terminated_bean != NULL)
+    {
+        return SANDESHA2_SEQ_STATUS_TERMINATED;
+    }
+    timedout_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
+            seq_id, SANDESHA2_SEQ_PROP_SEQ_TIMED_OUT);
+    if(timedout_bean != NULL)
+    {
+        return SANDESHA2_SEQ_STATUS_TIMED_OUT;
+    }
+    next_msg_mgr = SANDESHA2_STORAGE_MGR_GET_NEXT_MSG_MGR(storage_mgr, env);
+    next_msg_bean = SANDESHA2_NEXT_MSG_MGR_RETRIEVE(next_msg_mgr, env, seq_id);
+    if(next_msg_bean)
+    {
+        return SANDESHA2_SEQ_STATUS_ESTABLISHED;
+    }
+    AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_UNRECORDED_SEQ_ID, AXIS2_FAILURE);
+    return -1;
+}
+
+static axis2_char_t *
+sandesha2_client_generate_internal_seq_id_for_the_client_side(
+        const axis2_env_t *env,
+        axis2_char_t *to_epr,
+        axis2_char_t *seq_key)
+{
+    return sandesha2_utils_get_internal_seq_id(env, to_epr, seq_key); 
+}
+
+static sandesha2_seq_report_t *
+sandesha2_client_get_incoming_seq_report(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        axis2_conf_ctx_t *conf_ctx)
+{
+    sandesha2_seq_report_t *seq_report = NULL;
+    sandesha2_storage_mgr_t *storage_mgr = NULL;
+    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
+    axis2_conf_t *conf = NULL;
+    axis2_ctx_t *ctx = NULL;
+    axis2_property_t *property = NULL;
+    axis2_bool_t within_transaction = AXIS2_FALSE;
+    sandesha2_transaction_t *report_transaction = NULL;
+    axis2_array_list_t *completed_msg_list = NULL;
+    axis2_char_t *within_transaction_str = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, seq_id, NULL);
+    AXIS2_PARAM_CHECK(env->error, conf_ctx, NULL);
+    axis2_char_t status = -1;
+    int i = 0, size = 0;
+
+    conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, conf_ctx, conf); 
+    seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env); 
+    ctx = AXIS2_CONF_CTX_GET_BASE(conf_ctx, env);
+    property = AXIS2_CTX_GET_PROPERTY(ctx, env, SANDESHA2_WITHIN_TRANSACTION, AXIS2_FALSE);
+    within_transaction_str = (axis2_char_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+    if(within_transaction_str && 0 == AXIS2_STRCMP(within_transaction_str, 
+                SANDESHA2_VALUE_TRUE))
+    {
+        within_transaction = AXIS2_TRUE;
+    }
+    if(AXIS2_TRUE != within_transaction)
+    {
+        report_transaction = SANDESHA2_STORAGE_MGR_GET_TRANSACTION(storage_mgr, 
+                env);
+    }
+    seq_report = sandesha2_seq_report_create(env);
+    completed_msg_list = sandesha2_ack_mgr_get_svr_completed_msgs_list(env, 
+            seq_id, seq_prop_mgr);
+    if(completed_msg_list)
+        size = AXIS2_ARRAY_LIST_SIZE(completed_msg_list, env);
+    for(i = 0; i < size; i++)
+    {
+        long *lng = NULL;
+        axis2_char_t *value = AXIS2_ARRAY_LIST_GET(completed_msg_list, env, i);
+        
+        *lng = atol(value);
+        SANDESHA2_SEQ_REPORT_ADD_COMPLETED_MSG(seq_report, env, lng);
+    }
+    SANDESHA2_SEQ_REPORT_SET_SEQ_ID(seq_report, env, seq_id);
+    SANDESHA2_SEQ_REPORT_SET_INTERNAL_SEQ_ID(seq_report, env, seq_id); /* For
+                                      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, storage_mgr);
+    SANDESHA2_SEQ_REPORT_SET_SEQ_STATUS(seq_report, env, 
+            status);
+   
+    return seq_report;
+}
+
+static axiom_soap_envelope_t *
+sandesha2_client_configure_terminate_seq(
+        const axis2_env_t *env,
+        axis2_options_t *options, 
+        axis2_conf_ctx_t *conf_ctx)
+{
+    axis2_endpoint_ref_t *to_epr = NULL;
+    axis2_char_t *to = NULL;
+    axis2_char_t *seq_key = NULL;
+    axis2_char_t *internal_seq_id = NULL;
+    sandesha2_terminate_seq_t *terminate_seq = NULL;
+    sandesha2_storage_mgr_t *storage_mgr = NULL;
+    sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
+    sandesha2_seq_property_bean_t *seq_id_bean = NULL;
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t status = -1;
+    axis2_char_t *soap_ns_uri = NULL;
+    axis2_char_t *rm_ns_value = NULL;
+    axis2_char_t *rm_spec_version = NULL;
+    axiom_soap_envelope_t *dummy_envelope = NULL;
+    sandesha2_identifier_t *identifier = NULL;
+    axis2_char_t *action = NULL;
+    sandesha2_seq_report_t *seq_report = NULL;
+    axis2_conf_t *conf = NULL;
+
+    if(!options)
+    {
+        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);
+        return AXIS2_FAILURE;
+    }
+    to = AXIS2_ENDPOINT_REF_GET_ADDRESS(to_epr, env);
+    seq_key = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
+            SANDESHA2_CLIENT_SEQ_KEY);
+    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);
+    if(!seq_report)
+    {
+        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);
+        return NULL;
+    }
+    conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, conf_ctx, conf);
+    seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(storage_mgr, env);
+    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);
+        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);
+        return NULL;
+    }
+    rm_spec_version = (axis2_char_t *) AXIS2_OPTIONS_GET_PROPERTY(options, env, 
+            SANDESHA2_CLIENT_RM_SPEC_VERSION);
+    if(!rm_spec_version)
+    {
+        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);
+    AXIS2_OPTIONS_SET_ACTION(options, env, action);
+    soap_ns_uri = (axis2_char_t *) AXIS2_OPTIONS_GET_SOAP_VERSION_URI(options, 
+            env);
+    if(0 == AXIS2_STRCMP(AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI, soap_ns_uri))
+    {
+        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); 
+    }
+    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);
+    SANDESHA2_IDENTIFIER_SET_IDENTIFIER(identifier, env, seq_id);
+    SANDESHA2_TERMINATE_SEQ_SET_IDENTIFIER(terminate_seq, env, identifier);
+    SANDESHA2_IOM_RM_PART_TO_SOAP_ENVELOPE((sandesha2_iom_rm_part_t *)  
+            terminate_seq, env, dummy_envelope);
+
+    return dummy_envelope;
 }
 

Modified: webservices/sandesha/trunk/c/src/util/ack_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/util/ack_mgr.c?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/util/ack_mgr.c (original)
+++ webservices/sandesha/trunk/c/src/util/ack_mgr.c Sun Jul 16 20:41:52 2006
@@ -24,6 +24,7 @@
 #include <axis2_uuid_gen.h>
 #include <axis2_addr.h>
 #include <axis2_property.h>
+#include <axis2_array_list.h>
 
 AXIS2_EXTERN sandesha2_msg_ctx_t *AXIS2_CALL
 sandesha2_ack_mgr_generate_ack_msg(const axis2_env_t *env,
@@ -236,3 +237,87 @@
     }
     return NULL;
 }
+
+/**
+ * This is used to get the acked messages of a sequence. If this is an outgoing 
+ * message the sequence_identifier should be the internal sequenceID.
+ * 
+ * @param sequence_identifier
+ * @param out_going_msg
+ * @return
+ */
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
+sandesha2_ack_mgr_get_client_completed_msgs_list(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr)
+{
+    sandesha2_seq_property_bean_t *internal_seq_bean = NULL;
+    axis2_char_t *internal_seq_id = NULL;
+    sandesha2_seq_property_bean_t *completed_msgs_bean = NULL;
+    axis2_array_list_t *completed_msg_list = NULL;
+    
+    /* First trying to get it from the internal sequence id.*/
+    internal_seq_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, env, 
+            seq_id, SANDESHA2_SEQ_PROP_INTERNAL_SEQ_ID);
+    if(internal_seq_bean != NULL)
+    {
+        internal_seq_id = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(
+                internal_seq_bean, env);
+    }
+    if(internal_seq_id != NULL)
+    {
+        completed_msgs_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, 
+                env, internal_seq_id, 
+                SANDESHA2_SEQ_PROP_CLIENT_COMPLETED_MESSAGES);
+    }
+    if(completed_msgs_bean == NULL)
+    {
+        completed_msgs_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, 
+                env, seq_id, 
+                SANDESHA2_SEQ_PROP_CLIENT_COMPLETED_MESSAGES);
+    }
+    if(completed_msgs_bean != NULL)
+    {
+        axis2_char_t *value = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(
+                completed_msgs_bean, env);
+        completed_msg_list = sandesha2_utils_get_array_list_from_string(env, value);
+    }
+    else
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_COMPLETED_MSGS_BEAN_IS_NULL, 
+                AXIS2_FAILURE);
+        return NULL;
+    }
+    return completed_msg_list;
+}
+ 
+AXIS2_EXTERN axis2_array_list_t *AXIS2_CALL
+sandesha2_ack_mgr_get_svr_completed_msgs_list(
+        const axis2_env_t *env,
+        axis2_char_t *seq_id,
+        sandesha2_seq_property_mgr_t *seq_prop_mgr)
+{
+    sandesha2_seq_property_bean_t *internal_seq_bean = NULL;
+    axis2_char_t *internal_seq_id = NULL;
+    sandesha2_seq_property_bean_t *completed_msgs_bean = NULL;
+    axis2_array_list_t *completed_msg_list = NULL;
+    
+    completed_msgs_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr, 
+            env, seq_id, 
+            SANDESHA2_SEQ_PROP_SERVER_COMPLETED_MESSAGES);
+    if(completed_msgs_bean != NULL)
+    {
+        axis2_char_t *value = SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(
+                completed_msgs_bean, env);
+        completed_msg_list = sandesha2_utils_get_array_list_from_string(env, value);
+    }
+    else
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_COMPLETED_MSGS_BEAN_IS_NULL, 
+                AXIS2_FAILURE);
+        return NULL;
+    }
+    return completed_msg_list;
+}
+    

Modified: webservices/sandesha/trunk/c/src/util/error.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/util/error.c?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/util/error.c (original)
+++ webservices/sandesha/trunk/c/src/util/error.c Sun Jul 16 20:41:52 2006
@@ -74,10 +74,10 @@
     "Ack None now allowed in the spec";
 
     /* 'To' Address is not set */
-    sandesha2_error_messages[SANDESHA2_ERROR_TO_ADDRESS_IS_NOT_SET] = 
+    sandesha2_error_messages[SANDESHA2_ERROR_TO_ADDRESS_NOT_SET] = 
         "'To' address is not set";
     /* Service Context is NULL */
-    sandesha2_error_messages[SANDESHA2_ERROR_SVC_CTX_IS_NULL] = 
+    sandesha2_error_messages[SANDESHA2_ERROR_SVC_CTX_NULL] = 
         "Service context is NULL";
     /* Non Unique Result */
     sandesha2_error_messages[SANDESHA2_ERROR_NON_UNIQUE_RESULT] = 
@@ -113,6 +113,8 @@
         "Close Sequence feature is only available for WSRM 1.1";
     sandesha2_error_messages[SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_DATA] = 
         "Cannnot find a seq report for the given data";   
+    sandesha2_error_messages[SANDESHA2_ERROR_CANNOT_FIND_SEQ_REPORT_FOR_GIVEN_SEQ_ID] = 
+        "Cannnot find a seq report for the given sequence id";
     sandesha2_error_messages[SANDESHA2_ERROR_SEQ_NOT_IN_ACTIVE_STATE] = 
         "Sequence is not in a active state. Either create seq response has not \
             being received or seq has been terminated, cannot get seqID";
@@ -126,6 +128,20 @@
         "Canot send the ackRequest message since it is not active";
     sandesha2_error_messages[SANDESHA2_ERROR_SPEC_VERSION_DOES_NOT_DEFINE_A_ACK_REQUEST_ACTION] =
         "this spec version does not define a ackRequest action";
+    sandesha2_error_messages[SANDESHA2_ERROR_CANNOT_FIND_SEQ_ID] =
+        "Cannot find the sequence id";
+    sandesha2_error_messages[SANDESHA2_ERROR_RM_VERSION_DOES_NOT_ALLOW_SEQ_CLOSING] =
+        "This RM version does not allow sequence closing";
+    sandesha2_error_messages[NOT_A_VALID_TERMINATED_SEQ] = 
+        "Not a valid terminated sequence. Internal sequence Bean is not \
+         available for the given sequence";
+    sandesha2_error_messages[NOT_A_VALID_TIMEDOUT_SEQ] =
+        "Not a valid timedout sequence. Internal sequence Bean is not \
+         available for the given sequence";
+    sandesha2_error_messages[SANDESHA2_ERROR_COMPLETED_MSGS_BEAN_IS_NULL] =
+        "Completed messages bean is null, for the sequence"; 
+    sandesha2_error_messages[SANDESHA2_ERROR_UNRECORDED_SEQ_ID] =
+        "Sequence id is not recoreded"; 
     return AXIS2_SUCCESS;
 }
 

Modified: webservices/sandesha/trunk/c/src/util/spec_specific_consts.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/util/spec_specific_consts.c?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/util/spec_specific_consts.c (original)
+++ webservices/sandesha/trunk/c/src/util/spec_specific_consts.c Sun Jul 16 20:41:52 2006
@@ -183,4 +183,21 @@
     
     return NULL;
 }
+	
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+sandesha2_spec_specific_consts_is_seq_closing_allowed(
+        const axis2_env_t *env,
+        axis2_char_t *spec_version)
+{
+    if (0 == AXIS2_STRCMP(SANDESHA2_SPEC_VERSION_1_0, spec_version)) 
+    {
+        return AXIS2_FALSE;
+    }
+    else if (0 == AXIS2_STRCMP(SANDESHA2_SPEC_VERSION_1_1, spec_version)) 
+        return AXIS2_TRUE;
+    else
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_UNKNOWN_SPEC_ERROR_MESSAGE, 
+                AXIS2_FAILURE);
+    return AXIS2_FALSE;
+} 
 

Modified: webservices/sandesha/trunk/c/src/util/utils.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/util/utils.c?rev=422611&r1=422610&r2=422611&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/util/utils.c (original)
+++ webservices/sandesha/trunk/c/src/util/utils.c Sun Jul 16 20:41:52 2006
@@ -403,6 +403,36 @@
 
 }
 
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL
+sandesha2_utils_get_internal_seq_id(
+        const axis2_env_t *env,
+        axis2_char_t *to,
+        axis2_char_t *seq_key)
+{
+    axis2_char_t *ret = NULL;
+
+    AXIS2_ENV_CHECK(env, NULL);
+
+    if(!to && !seq_key)
+    {
+        return NULL;
+    }
+    else if(!to)
+    {
+        return AXIS2_STRDUP(seq_key, env);
+    }
+    else if(!seq_key)
+    {
+        return AXIS2_STRDUP(to, env);
+    }
+    else
+    {
+        ret = axis2_strcat(SANDESHA2_INTERNAL_SEQ_PREFIX, ":", to, ":", seq_key, NULL);
+        return ret;
+    }
+    return NULL;
+}
+
 AXIS2_EXTERN axis2_msg_ctx_t *AXIS2_CALL
 sandesha2_utils_create_new_related_msg_ctx(const axis2_env_t *env,
                         sandesha2_msg_ctx_t *ref_rm_msg,
@@ -581,3 +611,4 @@
                         
     return new_msg;
 }
+



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