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 sa...@apache.org on 2006/07/20 14:31:25 UTC

svn commit: r423915 - in /webservices/sandesha/trunk/c: include/ include/sandesha2/ src/util/ src/workers/ src/wsrm/

Author: sahan
Date: Thu Jul 20 05:31:24 2006
New Revision: 423915

URL: http://svn.apache.org/viewvc?rev=423915&view=rev
Log:
chaniging sender

Modified:
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_constants.h
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_property_bean.h
    webservices/sandesha/trunk/c/include/sandesha2_msg_init.h
    webservices/sandesha/trunk/c/include/sandesha2_sender.h
    webservices/sandesha/trunk/c/src/util/Makefile.am
    webservices/sandesha/trunk/c/src/workers/sender.c
    webservices/sandesha/trunk/c/src/wsrm/rm_elements.c

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_constants.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_constants.h?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_constants.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_constants.h Thu Jul 20 05:31:24 2006
@@ -361,11 +361,11 @@
 			
 	#define SANDESHA2_DEF_VAL_ACK_INTERVAL  4000
 			
-	#define SANDESHA2_DEF_VAL_EXP_BACKOFF  true
+	#define SANDESHA2_DEF_VAL_EXP_BACKOFF  AXIS2_TRUE
 			
 	#define SANDESHA2_DEF_VAL_INACTIVETIMEOUT  -1
-			
-	#define SANDESHA2_DEF_VAL_INACTIVETIMEOUT_MEASURE  "seconds"   //this can be - seconds,minutes,hours,days
+	/*  this can be - seconds,minutes,hours,days */		
+	#define SANDESHA2_DEF_VAL_INACTIVETIMEOUT_MEASURE  "seconds"   
 			
 	#define SANDESHA2_DEF_VAL_STORAGE_MGR  "InMemoryStorageManager"
 		
@@ -373,9 +373,9 @@
 			
 	#define SANDESHA2_DEF_VAL_PERM_STORAGE_MGR  "InMemoryStorageManager"
 			
-	#define SANDESHA2_DEF_VAL_INORDER_INVOCATION  true
+	#define SANDESHA2_DEF_VAL_INORDER_INVOCATION  AXIS2_TRUE
 			
-	#define SANDESHA2_DEF_VAL_MSG_TYPES_TO_DROP  VALUE_NONE
+	#define SANDESHA2_DEF_VAL_MSG_TYPES_TO_DROP  "none"
 			
 	#define SANDESHA2_DEF_VAL_RETR_COUNT  8
 			

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_property_bean.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_property_bean.h?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_property_bean.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_property_bean.h Thu Jul 20 05:31:24 2006
@@ -219,7 +219,7 @@
     ((bean)->ops->get_permanent_storage_mgr(bean, env))
     
 #define SANDESHA2_PROPERTY_BEAN_SET_PERMENENT_STORAGE_MGR(bean, env, mgr)\
-    ((bean)->ops->get_permanent_storage_mgr(bean, env, mgr))
+    ((bean)->ops->set_permanent_storage_mgr(bean, env, mgr))
     
 #define SANDESHA2_PROPERTY_BEAN_IS_IN_ORDER(bean, env)\
     ((bean)->ops->is_in_order(bean, env))

Modified: webservices/sandesha/trunk/c/include/sandesha2_msg_init.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_msg_init.h?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_msg_init.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_msg_init.h Thu Jul 20 05:31:24 2006
@@ -30,7 +30,7 @@
 #include <axis2_string.h>
 #include <axis2_utils.h>
 #include <sandesha2_storage_mgr.h>
-#include <sandesha2_msg_ctx.h>
+#include <sandesha2/sandesha2_msg_ctx.h>
 #include <axis2_msg_ctx.h>
 
 #ifdef __cplusplus

Modified: webservices/sandesha/trunk/c/include/sandesha2_sender.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_sender.h?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_sender.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_sender.h Thu Jul 20 05:31:24 2006
@@ -54,7 +54,7 @@
             const axis2_env_t *env);
      
     axis2_status_t (AXIS2_CALL *
-    stop_sender_for_seq) (
+    stop_for_seq) (
             sandesha2_sender_t *sender,
             const axis2_env_t *env,
             axis2_char_t *seq_id);
@@ -97,7 +97,7 @@
 #define SANDESHA2_SENDER_STOP_FOR_SEQ(sender, env, \
         seq_id) \
       (((sandesha2_sender_t *) sender)->ops->\
-      stop_sender_for_seq (sender, env, seq_id))
+      stop_for_seq (sender, env, seq_id))
 
 #define SANDESHA2_SENDER_STOP_SENDING(sender, env) \
       (((sandesha2_sender_t *) sender)->ops->\

Modified: webservices/sandesha/trunk/c/src/util/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/util/Makefile.am?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/util/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/util/Makefile.am Thu Jul 20 05:31:24 2006
@@ -10,7 +10,8 @@
 							seq_mgr.c \
                             terminate_mgr.c \
 							msg_init.c \
-							msg_creator.c
+							msg_creator.c\
+                            property_mgr.c
 
 INCLUDES = -I$(top_builddir)/include \
 			-I$(top_builddir)/include/sandesha2 \

Modified: webservices/sandesha/trunk/c/src/workers/sender.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/workers/sender.c?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/workers/sender.c (original)
+++ webservices/sandesha/trunk/c/src/workers/sender.c Thu Jul 20 05:31:24 2006
@@ -30,6 +30,7 @@
 #include <axiom_soap_const.h>
 #include <axiom_soap_fault.h>
 #include <axiom_soap_body.h>
+#include <sandesha2_msg_init.h>
 
 
 /** 
@@ -146,13 +147,13 @@
     sender_impl->mutex = axis2_thread_mutex_create(env->allocator,
                         AXIS2_THREAD_MUTEX_DEFAULT);
                         
-    sender_impl->sender.ops->stop_sender_for_seq = 
+    sender_impl->sender.ops->stop_for_seq = 
                         sandesha2_sender_stop_sender_for_seq;
     sender_impl->sender.ops->stop_sending = 
                         sandesha2_sender_stop_sending;
     sender_impl->sender.ops->is_sender_started = 
                         sandesha2_sender_is_sender_started;
-    sender_impl->sender.ops->run_sender_for_seq = 
+    sender_impl->sender.ops->run_for_seq = 
                         sandesha2_sender_run_sender_for_seq;
     sender_impl->sender.ops->run = sandesha2_sender_run;
     sender_impl->sender.ops->free = sandesha2_sender_free;
@@ -455,162 +456,83 @@
         sandesha2_transaction_t *transaction = NULL;
         /* Use when transaction handling is done 
         axis2_bool_t rollbacked = AXIS2_FALSE;*/
-        sandesha2_next_msg_mgr_t *next_msg_mgr = NULL;
-        sandesha2_sender_mgr_t *storage_map_mgr = NULL;
+        sandesha2_sender_mgr_t *mgr = NULL;
+        sandesha2_sender_bean_t *sender_bean = NULL;
         sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
-        sandesha2_seq_property_bean_t *all_seq_bean = NULL;
-        axis2_array_list_t *all_seq_list = NULL;
         int i = 0;
+        axis2_char_t *key = NULL;
+        axis2_msg_ctx_t *msg_ctx = NULL;
+        axis2_property_t *property = NULL;
+        axis2_bool_t continue_sending = AXIS2_TRUE;
+        axis2_char_t *qualified_for_sending = NULL;
+        sandesha2_msg_ctx_t *rm_msg_ctx = NULL;
+        sandesha2_property_bean_t *prop_bean = NULL;
+        axis2_array_list_t *msgs_not_to_send = NULL;
         
-        
-        next_msg_mgr = SANDESHA2_STORAGE_MGR_GET_NEXT_MSG_MGR(
-                        storage_mgr, env);
-        storage_map_mgr = SANDESHA2_STORAGE_MGR_GET_STORAGE_MAP_MGR
-                        (storage_mgr, env);
-        seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(
-                        storage_mgr, env);
+        sleep(1);
         transaction = SANDESHA2_STORAGE_MGR_GET_TRANSACTION(storage_mgr,
                         env);
-        all_seq_bean = SANDESHA2_SEQ_PROPERTY_MGR_RETRIEVE(seq_prop_mgr,
-                        env, SANDESHA2_SEQ_PROP_ALL_SEQS, 
-                        SANDESHA2_SEQ_PROP_INCOMING_SEQ_LIST);
-        if(NULL == all_seq_bean)
+        mgr = SANDESHA2_STORAGE_MGR_GET_RETRANS_MGR(storage_mgr, env);
+        seq_prop_mgr = SANDESHA2_STORAGE_MGR_GET_SEQ_PROPERTY_MGR(
+                        storage_mgr, env);
+                        
+        sender_bean = SANDESHA2_SENDER_MGR_GET_NEXT_MSG_TO_SEND(mgr, env);
+        if(NULL == sender_bean)
             continue;
-        all_seq_list = sandesha2_utils_get_array_list_from_string(env,
-                        SANDESHA2_SEQ_PROPERTY_BEAN_GET_VALUE(all_seq_bean, env));
-        if(NULL == all_seq_list)
+            
+        key = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(sender_bean, env);
+        msg_ctx = SANDESHA2_STORAGE_MGR_RETRIEVE_MSG_CTX(storage_mgr, env, key, 
+                        sender_impl->conf_ctx);
+        if(NULL == msg_ctx)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] msg_ctx is "
+                        "not present in the store");
+            break;
+        }
+        property = axis2_property_create(env);
+        AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_REQUEST);
+        AXIS2_PROPERTY_SET_VALUE(property, env, AXIS2_STRDUP(
+                        SANDESHA2_VALUE_TRUE, env));
+        AXIS2_MSG_CTX_SET_PROPERTY(msg_ctx, env, SANDESHA2_WITHIN_TRANSACTION,
+                        property, AXIS2_FALSE);
+        continue_sending = sandesha2_msg_retrans_adjuster_adjust_retrans(env,
+                        sender, sender_impl->conf_ctx, storage_mgr);
+        if(AXIS2_FALSE == continue_sending)
             continue;
+        
+        property = AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env, 
+                        SANDESHA2_QUALIFIED_FOR_SENDING, AXIS2_FALSE);
+        if(NULL != property)
+            qualified_for_sending = AXIS2_PROPERTY_GET_VALUE(property, env);
             
-        for(i = 0; i < AXIS2_ARRAY_LIST_SIZE(all_seq_list, env); i++)
+        if(NULL != qualified_for_sending && 0 != AXIS2_STRCMP(
+                        qualified_for_sending, SANDESHA2_VALUE_TRUE))
+            continue;
+        rm_msg_ctx = sandesha2_msg_init_init_msg(env, msg_ctx);
+        
+        prop_bean = sandesha2_utils_get_property_bean_from_op(env, 
+                        AXIS2_MSG_CTX_GET_OP(msg_ctx, env));
+        if(NULL != prop_bean)
+            msgs_not_to_send = SANDESHA2_PROPERTY_BEAN_GET_MSG_TYPES_TO_DROP(
+                        prop_bean, env);
+        if(NULL != msgs_not_to_send)
         {
-            axis2_char_t *seq_id = NULL;
-            long next_msg_no = -1;
-            sandesha2_next_msg_bean_t *next_msg_bean = NULL;
-            axis2_array_list_t *st_map_list = NULL;
-            sandesha2_sender_bean_t *find_bean = NULL;
-            axis2_bool_t invoked = AXIS2_FALSE;
             int j = 0;
-            axis2_bool_t continue_seq = AXIS2_TRUE;
-            
-            seq_id = AXIS2_ARRAY_LIST_GET(all_seq_list, env, i);
-            SANDESHA2_TRANSACTION_COMMIT(transaction, env);
-            transaction = SANDESHA2_STORAGE_MGR_GET_TRANSACTION(
-                        storage_mgr, env);
-            next_msg_bean = SANDESHA2_NEXT_MSG_MGR_RETRIEVE(
-                        next_msg_mgr, env, seq_id);
-            if(NULL == next_msg_bean)
-            {
-                axis2_char_t *str_list = NULL;
-                AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Next message not set" 
-                        " correctly. Removing invalid entry.");
-                AXIS2_ARRAY_LIST_REMOVE(all_seq_list, env, i);
-                /* We need to make sure we are not skipping element after 
-                 * removing current element
-                 */                 
-                i--;
-                str_list = sandesha2_utils_array_list_to_string(env, all_seq_list, 
-                        SANDESHA2_ARRAY_LIST_STRING);
-                SANDESHA2_SEQ_PROPERTY_BEAN_SET_VALUE(all_seq_bean, env,
-                        str_list);
-                SANDESHA2_SEQ_PROPERTY_MGR_UPDATE(seq_prop_mgr, env, 
-                        all_seq_bean);
-                continue;
-            }
-            next_msg_no = SANDESHA2_NEXT_MSG_BEAN_GET_NEXT_MSG_NO_TO_PROCESS(
-                        next_msg_bean, env);
-            if(next_msg_no < 0)
+            for(j = 0; j < AXIS2_ARRAY_LIST_SIZE(msgs_not_to_send, env); j++)
             {
-                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invalid message number"
-                        " as the Next Message Number.");
-                return data;
-            }
-            /*find_bean = sandesha2_sender_bean_create_with_data(env, NULL,
-                        next_msg_no, seq_id, AXIS2_FALSE);*/
-            st_map_list = SANDESHA2_INVOKER_MGR_FIND(storage_map_mgr,
-                        env, find_bean);
-            for(j = 0; j < AXIS2_ARRAY_LIST_SIZE(st_map_list, env); j++)
-            {
-                sandesha2_sender_bean_t *st_map_bean = NULL;
-                axis2_char_t *key = NULL;
-                axis2_msg_ctx_t *msg_to_invoke = NULL;
-                sandesha2_msg_ctx_t *rm_msg_ctx = NULL;
-                axis2_property_t *property = NULL;
-                axis2_bool_t post_failure_invocation = AXIS2_FALSE;
-                axis2_char_t *post_failure_str = NULL;
-                axis2_msg_ctx_t *msg_ctx = NULL;
-                axis2_engine_t *engine = NULL;
+                axis2_char_t *value = NULL;
+                int int_val = -1;
                 
-                st_map_bean = AXIS2_ARRAY_LIST_GET(st_map_list, env, j);
-                key = SANDESHA2_INVOKER_BEAN_GET_MSG_CONTEXT_REF_KEY(st_map_bean,
-                        env);
-                msg_to_invoke = SANDESHA2_STORAGE_MGR_RETRIEVE_MSG_CTX(
-                        storage_mgr, env, key, sender_impl->conf_ctx);
-                rm_msg_ctx = sandesha2_msg_initilizer_init_msg(env, 
-                        msg_to_invoke);
-                /* have to commit the transaction before invoking. This may get 
-                 * changed when WS-AT is available.
-                 */
-                SANDESHA2_TRANSACTION_COMMIT(transaction, env);
-                property = axis2_property_create(env);
-                AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_REQUEST);
-                AXIS2_PROPERTY_SET_VALUE(property, env, AXIS2_STRDUP(
-                        SANDESHA2_VALUE_TRUE, env));
-                AXIS2_MSG_CTX_SET_PROPERTY(msg_ctx, env, 
-                        SANDESHA2_WITHIN_TRANSACTION, property, AXIS2_FALSE);
-                        
-                property = AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env,
-                        SANDESHA2_POST_FAILURE_MESSAGE, AXIS2_FALSE);
-                if(NULL != property)
-                    post_failure_str = AXIS2_PROPERTY_GET_VALUE(property, env);
-                if(NULL != post_failure_str && 0 == AXIS2_STRCMP(
-                        post_failure_str, SANDESHA2_VALUE_TRUE))
-                    post_failure_invocation = AXIS2_TRUE;
-                engine = axis2_engine_create(env, sender_impl->conf_ctx);
-                if(AXIS2_TRUE == post_failure_invocation)
-                {
-                    sandesha2_sender_make_msg_ready_for_reinjection(
-                        sender, env, msg_to_invoke);
-                    AXIS2_ENGINE_RECIEVE(engine, env, msg_to_invoke);
-                }
-                else
-                    AXIS2_ENGINE_RESUME_RECIEVE(engine, env, msg_to_invoke);
-                invoked = AXIS2_TRUE;
-                transaction = SANDESHA2_STORAGE_MGR_GET_TRANSACTION(
-                        storage_mgr, env);
-                SANDESHA2_STORAGE_MGR_DELETE(storage_mgr, env, key);
-                msg_ctx = SANDESHA2_STORAGE_MGR_RETRIEVE_MSG_CTX(
-                        storage_mgr, env, key, sender_impl->conf_ctx);
-                if(NULL != msg_ctx)
-                    SANDESHA2_STORAGE_MGR_REMOVE_MSG_CTX(storage_mgr,
-                        env, key);
-                if(SANDESHA2_MSG_TYPE_APPLICATION == 
-                        SANDESHA2_MSG_CTX_GET_MSG_TYPE(rm_msg_ctx, env))
-                {
-                    sandesha2_seq_t *seq = NULL;
-                    seq = (sandesha2_seq_t*)_MSG_CTX_GET_MSG_PART(
-                            rm_msg_ctx, env, SANDESHA2_MSG_PART_SEQ);
-                    if(NULL != SANDESHA2_SEQ_GET_LAST_MSG(seq, env))
-                    {
-                        sandesha2_terminate_mgr_clean_recv_side_after_invocation(
-                            env, sender_impl->conf_ctx, seq_id, 
-                            storage_mgr);
-                        /* we are done with current seq */
-                        continue_seq = AXIS2_FALSE;
-                        break;
-                    }
-                }
-            }
-            if(AXIS2_FALSE == continue_seq)
-                break;
-            if(AXIS2_TRUE == invoked)
-            {
-                next_msg_no++;
-                SANDESHA2_NEXT_MSG_BEAN_SET_NEXT_MSG_NO_TO_PROCESS(next_msg_bean,
-                        env, next_msg_no);
-                SANDESHA2_NEXT_MSG_BEAN_MGR_UPDATE(next_msg_mgr, env, 
-                        next_msg_bean);
+                value = AXIS2_ARRAY_LIST_GET(msgs_not_to_send, env, j);
+                int_val = atoi(value);
+                if(SANDESHA2_MSG_CTX_GET_MSG_TYPE(rm_msg_ctx, env) == int_val)
+                    continue_sending = AXIS2_FALSE;
             }
+            if(AXIS2_FALSE == continue_sending)
+                continue;
         }
+        
+
         SANDESHA2_TRANSACTION_COMMIT(transaction, env);
         
         /* TODO make transaction handling effective */

Modified: webservices/sandesha/trunk/c/src/wsrm/rm_elements.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/wsrm/rm_elements.c?rev=423915&r1=423914&r2=423915&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/wsrm/rm_elements.c (original)
+++ webservices/sandesha/trunk/c/src/wsrm/rm_elements.c Thu Jul 20 05:31:24 2006
@@ -19,7 +19,10 @@
 #include <axiom_soap_const.h>
 #include <sandesha2/sandesha2_iom_rm_part.h>
 #include <sandesha2/sandesha2_utils.h>
+#include <axiom_soap_header.h>
+#include <axiom_soap_body.h>
 #include <stdio.h>
+#include <axis2_addr.h>
 
 
 /** 
@@ -165,6 +168,20 @@
             (sandesha2_rm_elements_t *rm_elements,
             const axis2_env_t *env);
 
+axis2_char_t* AXIS2_CALL 
+sandesha2_rm_elements_get_rm_ns_val
+            (sandesha2_rm_elements_t *rm_elements,
+            const axis2_env_t *env,
+            axiom_soap_envelope_t *soap_envelope,
+            axis2_char_t *action);
+
+axis2_char_t* AXIS2_CALL 
+sandesha2_rm_elements_get_addr_ns_val_from_env
+            (sandesha2_rm_elements_t *rm_elements,
+            const axis2_env_t *env,
+            axiom_soap_envelope_t *soap_envelope,
+            axis2_char_t *action);
+            
 axis2_status_t AXIS2_CALL 
 sandesha2_rm_elements_free(sandesha2_rm_elements_t *mgr, 
                         const axis2_env_t *env);								
@@ -291,10 +308,180 @@
             axiom_soap_envelope_t *soap_envelope,
             axis2_char_t *action)
 {
+    int soap_version = -1;
+    sandesha2_rm_elements_impl_t *elements_impl = NULL;
+    axiom_soap_header_t *soap_header = NULL;
+    axiom_soap_body_t *soap_body = NULL;
+    axiom_node_t *header_node = NULL;
+    axiom_element_t *body_element = NULL;
+    axiom_node_t *body_node = NULL;
+    axiom_element_t *header_element = NULL;
+    axiom_element_t *seq_element = NULL;
+    axiom_node_t *seq_node = NULL;
+    axiom_element_t *seq_ack_element = NULL;
+    axiom_node_t *seq_ack_node = NULL;
+    axiom_element_t *create_seq_element = NULL;
+    axiom_node_t *create_seq_node = NULL;
+    axiom_element_t *create_seq_res_element = NULL;
+    axiom_node_t *create_seq_res_node = NULL;
+    axiom_element_t *terminate_seq_element = NULL;
+    axiom_node_t *terminate_seq_node = NULL;
+    axiom_element_t *terminate_seq_res_element = NULL;
+    axiom_node_t *terminate_seq_res_node = NULL;
+    axiom_element_t *close_seq_element = NULL;
+    axiom_node_t *close_seq_node = NULL;
+    axiom_element_t *close_seq_res_element = NULL;
+    axiom_node_t *close_seq_res_node = NULL;
+    axiom_element_t *ack_requested_element = NULL;
+    axiom_node_t *ack_requested_node = NULL;
+    axis2_qname_t *qname = NULL;
+    axis2_char_t *rm_ns_val = NULL;
+    axis2_char_t *addr_ns_val = NULL;
+    
+    
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, soap_envelope, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, action, AXIS2_FAILURE);
     
+    elements_impl = SANDESHA2_INTF_TO_IMPL(rm_elements);
+    soap_version = AXIOM_SOAP_ENVELOPE_GET_SOAP_VERSION(soap_envelope, env);
+    
+    elements_impl->rm_ns_val = sandesha2_rm_elements_get_rm_ns_val(rm_elements,
+                        env, soap_envelope, action);
+                        
+    if(NULL == elements_impl->rm_ns_val)
+        return AXIS2_SUCCESS;
+        
+    elements_impl->addr_ns_val = sandesha2_rm_elements_get_addr_ns_val_from_env(
+                        rm_elements, env, soap_envelope, action);
+                        
+    if(NULL == elements_impl->addr_ns_val)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[sandesha2] Cant find the"
+                        " addressing version");
+        return AXIS2_FAILURE;
+    }
+    soap_header = AXIOM_SOAP_ENVELOPE_GET_HEADER(soap_envelope, env);    
+    header_node = AXIOM_SOAP_HEADER_GET_BASE_NODE(soap_header, env);
+    header_element = AXIOM_NODE_GET_DATA_ELEMENT(header_node, env);
+    
+    soap_body = AXIOM_SOAP_ENVELOPE_GET_BODY(soap_envelope, env);
+    body_node = AXIOM_SOAP_BODY_GET_BASE_NODE(soap_body, env);
+    body_element = AXIOM_NODE_GET_DATA_ELEMENT(body_node, env);
+    
+    
+                        
+    rm_ns_val = elements_impl->rm_ns_val;
+    addr_ns_val = elements_impl->addr_ns_val;
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_SEQ, rm_ns_val, NULL);
+    seq_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(header_element, env,
+                        qname, header_node, &seq_node);
+    if(NULL != seq_node)
+    {
+        elements_impl->seq = sandesha2_seq_create(env, rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->seq, env, 
+                        header_node);
+    }
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_SEQ_ACK, rm_ns_val, 
+                        NULL);
+    seq_ack_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(header_element,
+                        env, qname, header_node, &seq_ack_node);
+    if(NULL != seq_ack_element)
+    {
+        elements_impl->seq_ack = sandesha2_seq_ack_create(env, rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->seq_ack, env,
+                        header_node);
+    }
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_CREATE_SEQ, rm_ns_val,
+                        NULL);
+    create_seq_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(body_element,
+                        env, qname, body_node, &create_seq_node);
+    if(NULL != create_seq_node)
+    {
+        elements_impl->create_seq = sandesha2_create_seq_create(env, rm_ns_val, 
+                        addr_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->create_seq, env,
+                        body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_CREATE_SEQ_RESPONSE, 
+                        rm_ns_val, NULL);
+    create_seq_res_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        body_element, env, qname, body_node, 
+                        &create_seq_res_node);
+    if(NULL != create_seq_res_node)
+    {
+        elements_impl->create_seq_res = sandesha2_create_seq_res_create(env, 
+                        rm_ns_val, addr_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->create_seq_res, env,
+                        body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_TERMINATE_SEQ, 
+                        rm_ns_val, NULL);
+    terminate_seq_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        body_element, env, qname, body_node, 
+                        &terminate_seq_node);
+    if(NULL != terminate_seq_node)
+    {
+        elements_impl->terminate_seq = sandesha2_terminate_seq_create(env, 
+                        rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->terminate_seq, env,
+                        body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_TERMINATE_SEQ_RESPONSE, 
+                        rm_ns_val, NULL);
+    terminate_seq_res_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        body_element, env, qname, body_node, 
+                        &terminate_seq_res_node);
+    if(NULL != terminate_seq_res_node)
+    {
+        elements_impl->terminate_seq_res = sandesha2_terminate_seq_res_create(
+                        env, rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->terminate_seq_res, 
+                        env, body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_CLOSE_SEQ, 
+                        rm_ns_val, NULL);
+    close_seq_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        body_element, env, qname, body_node, 
+                        &close_seq_node);
+    if(NULL != close_seq_node)
+    {
+        elements_impl->close_seq = sandesha2_close_seq_create(env, 
+                        rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->close_seq, env,
+                        body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_CLOSE_SEQ_RESPONSE, 
+                        rm_ns_val, NULL);
+    close_seq_res_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        body_element, env, qname, body_node, 
+                        &close_seq_res_node);
+    if(NULL != close_seq_res_node)
+    {
+        elements_impl->close_seq_res = sandesha2_close_seq_res_create(env, 
+                        rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->close_seq_res, env,
+                        body_node);
+    }
+    
+    qname = axis2_qname_create(env, SANDESHA2_WSRM_COMMON_ACK_REQUESTED, 
+                        rm_ns_val, NULL);
+    ack_requested_element = AXIOM_ELEMENT_GET_FIRST_CHILD_WITH_QNAME(
+                        header_element, env, qname, header_node, 
+                        &ack_requested_node);
+    if(NULL != ack_requested_node)
+    {
+        elements_impl->ack_requested = sandesha2_ack_requested_create(env, 
+                        rm_ns_val);
+        SANDESHA2_IOM_RM_ELEMENT_FROM_OM_NODE(elements_impl->ack_requested, env,
+                        header_node);
+    }
     return AXIS2_SUCCESS;
 }
             
@@ -304,10 +491,61 @@
             const axis2_env_t *env,
             axiom_soap_envelope_t *soap_envelope)
 {
+    sandesha2_rm_elements_impl_t *rm_elements_impl = NULL;
+    axiom_soap_header_t *soap_header = NULL;
+    axiom_soap_body_t *soap_body = NULL;
+    axiom_node_t *body_node = NULL;
+    
+    
     AXIS2_ENV_CHECK(env, NULL);
     AXIS2_PARAM_CHECK(env->error, soap_envelope, NULL);
     
-    return NULL;
+    rm_elements_impl = SANDESHA2_INTF_TO_IMPL(rm_elements);
+    soap_header = AXIOM_SOAP_ENVELOPE_GET_HEADER(soap_envelope, env);
+    soap_body = AXIOM_SOAP_ENVELOPE_GET_BODY(soap_envelope, env);
+    body_node = AXIOM_SOAP_BODY_GET_BASE_NODE(soap_body, env);
+    
+    if(NULL != rm_elements_impl->seq)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->seq, env, 
+                        soap_header);
+    }
+    if(NULL != rm_elements_impl->seq_ack)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->seq_ack, env, 
+                        soap_header);
+    }
+    if(NULL != rm_elements_impl->create_seq)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->create_seq, env, 
+                        body_node);
+    }
+    if(NULL != rm_elements_impl->create_seq_res)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->create_seq_res, 
+                        env, body_node);
+    }
+    if(NULL != rm_elements_impl->terminate_seq)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->terminate_seq, 
+                        env, body_node);
+    }
+    if(NULL != rm_elements_impl->terminate_seq_res)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->terminate_seq_res, 
+                        env, body_node);
+    }
+    if(NULL != rm_elements_impl->close_seq)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->close_seq, 
+                        env, body_node);
+    }
+    if(NULL != rm_elements_impl->close_seq_res)
+    {
+        SANDESHA2_IOM_RM_ELEMENT_TO_OM_NODE(rm_elements_impl->close_seq_res, 
+                        env, body_node);
+    }
+    return soap_envelope;
 }
             
 sandesha2_create_seq_t* AXIS2_CALL 
@@ -516,4 +754,97 @@
     AXIS2_ENV_CHECK(env, NULL);
     
     return SANDESHA2_INTF_TO_IMPL(rm_elements)->addr_ns_val;
+}
+
+axis2_char_t* AXIS2_CALL 
+sandesha2_rm_elements_get_rm_ns_val
+            (sandesha2_rm_elements_t *rm_elements,
+            const axis2_env_t *env,
+            axiom_soap_envelope_t *soap_envelope,
+            axis2_char_t *action)
+{
+    axiom_soap_header_t *soap_header = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, soap_envelope, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, action, AXIS2_FAILURE);
+    
+    soap_header = AXIOM_SOAP_ENVELOPE_GET_HEADER(soap_envelope, env);
+    if(NULL != soap_header)
+    {
+        axis2_array_list_t *headers = NULL;
+        
+        headers = AXIOM_SOAP_HEADER_GET_HEADER_BLOCKS_WITH_NAMESPACE_URI(
+                        soap_header, env, SANDESHA2_SPEC_2005_02_NS_URI);
+        if(NULL != headers && 0 < AXIS2_ARRAY_LIST_SIZE(headers, env))
+            return SANDESHA2_SPEC_2005_02_NS_URI;
+        headers = AXIOM_SOAP_HEADER_GET_HEADER_BLOCKS_WITH_NAMESPACE_URI(
+                        soap_header, env, SANDESHA2_SPEC_2005_10_NS_URI);
+                
+        if(NULL != headers && 0 < AXIS2_ARRAY_LIST_SIZE(headers, env))
+            return SANDESHA2_SPEC_2005_10_NS_URI;
+    }
+    if(NULL == action)
+        return NULL;
+    
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_02_ACTION_CREATE_SEQ))
+        return SANDESHA2_SPEC_2005_02_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_02_ACTION_CREATE_SEQ_RESPONSE))
+        return SANDESHA2_SPEC_2005_02_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_02_ACTION_SEQ_ACKNOWLEDGEMENT))
+        return SANDESHA2_SPEC_2005_02_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_02_ACTION_TERMINATE_SEQ))
+        return SANDESHA2_SPEC_2005_02_NS_URI;
+        
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_CREATE_SEQ))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_CREATE_SEQ_RESPONSE))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_SEQ_ACKNOWLEDGEMENT))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_TERMINATE_SEQ))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_CLOSE_SEQ))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_TERMINATE_SEQ_RESPONSE))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    if(0 == AXIS2_STRCMP(action, SANDESHA2_SPEC_2005_10_ACTION_CLOSE_SEQ_RESPONSE))
+        return SANDESHA2_SPEC_2005_10_NS_URI;
+    
+    return NULL;
+    
+}
+
+axis2_char_t* AXIS2_CALL 
+sandesha2_rm_elements_get_addr_ns_val_from_env
+            (sandesha2_rm_elements_t *rm_elements,
+            const axis2_env_t *env,
+            axiom_soap_envelope_t *soap_envelope,
+            axis2_char_t *action)
+{
+    axiom_soap_header_t *soap_header = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    AXIS2_PARAM_CHECK(env->error, soap_envelope, AXIS2_FAILURE);
+    AXIS2_PARAM_CHECK(env->error, action, AXIS2_FAILURE);
+    
+    soap_header = AXIOM_SOAP_ENVELOPE_GET_HEADER(soap_envelope, env);
+    if(NULL != soap_header)
+    {
+        axis2_array_list_t *headers = NULL;
+        
+        headers = AXIOM_SOAP_HEADER_GET_HEADER_BLOCKS_WITH_NAMESPACE_URI(
+                        soap_header, env, AXIS2_WSA_NAMESPACE);
+        if(NULL != headers && 0 < AXIS2_ARRAY_LIST_SIZE(headers, env))
+            return AXIS2_WSA_NAMESPACE;
+            
+        headers = AXIOM_SOAP_HEADER_GET_HEADER_BLOCKS_WITH_NAMESPACE_URI(
+                        soap_header, env, AXIS2_WSA_NAMESPACE_SUBMISSION);
+                
+        if(NULL != headers && 0 < AXIS2_ARRAY_LIST_SIZE(headers, env))
+            return AXIS2_WSA_NAMESPACE_SUBMISSION;
+    }
+    return NULL;
+    
+    
 }



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