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/19 08:16:24 UTC

svn commit: r423381 - in /webservices/sandesha/trunk/c: include/sandesha2/sandesha2_in_order_invoker.h include/sandesha2_sender.h src/workers/sender.c

Author: sahan
Date: Tue Jul 18 23:16:24 2006
New Revision: 423381

URL: http://svn.apache.org/viewvc?rev=423381&view=rev
Log:
Adding sender code

Modified:
    webservices/sandesha/trunk/c/include/sandesha2/sandesha2_in_order_invoker.h
    webservices/sandesha/trunk/c/include/sandesha2_sender.h
    webservices/sandesha/trunk/c/src/workers/sender.c

Modified: webservices/sandesha/trunk/c/include/sandesha2/sandesha2_in_order_invoker.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2/sandesha2_in_order_invoker.h?rev=423381&r1=423380&r2=423381&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2/sandesha2_in_order_invoker.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2/sandesha2_in_order_invoker.h Tue Jul 18 23:16:24 2006
@@ -97,7 +97,7 @@
 #define SANDESHA2_IN_ORDER_INVOKER_FREE(invoker, env) \
     ((invoker)->ops->free (invoker, env))
     
-#define SANDESHA2_IN_ORDER_INVOKER_STOP_INVOKER_FOR_SEQ(invoker, env, id) \
+#define SANDESHA2_IN_ORDER_INVOKER_STOP_FOR_SEQ(invoker, env, id) \
     ((invoker)->ops->stop_invoker_for_seq(invoker, env, id))
     
 #define SANDESHA2_IN_ORDER_INVOKER_STOP_INVOKING(invoker, env) \
@@ -106,7 +106,7 @@
 #define SANDESHA2_IN_ORDER_INVOKER_IS_INVOKER_STARTED(invoker, env) \
     ((invoker)->ops->is_invoker_started(invoker, env))
     
-#define SANDESHA2_IN_ORDER_INVOKER_RUN_INVOKER_FOR_SEQ(invoker, env, \
+#define SANDESHA2_IN_ORDER_INVOKER_RUN_FOR_SEQ(invoker, env, \
     conf_ctx, id) \
     ((invoker)->ops->run_invoker_for_seq(invoker, env, conf_ctx, id))
 

Modified: webservices/sandesha/trunk/c/include/sandesha2_sender.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_sender.h?rev=423381&r1=423380&r2=423381&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_sender.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_sender.h Tue Jul 18 23:16:24 2006
@@ -50,7 +50,7 @@
      */
     axis2_status_t (AXIS2_CALL *
     free) (
-            void *sender,
+            sandesha2_sender_t *sender,
             const axis2_env_t *env);
      
     axis2_status_t (AXIS2_CALL *
@@ -94,7 +94,7 @@
 #define SANDESHA2_SENDER_FREE(sender, env) \
       (((sandesha2_sender_t *) sender)->ops->free (sender, env))
 
-#define SANDESHA2_SENDER_STOP_SENDER_FOR_SEQ(sender, env, \
+#define SANDESHA2_SENDER_STOP_FOR_SEQ(sender, env, \
         seq_id) \
       (((sandesha2_sender_t *) sender)->ops->\
       stop_for_seq (sender, env, seq_id))
@@ -111,7 +111,7 @@
       (((sandesha2_sender_t *) sender)->ops->\
       run (sender, env))
 
-#define SANDESHA2_SENDER_RUN_SENDER_FOR_SEQ(sender, env, conf_ctx, seq_id) \
+#define SANDESHA2_SENDER_RUN_FOR_SEQ(sender, env, conf_ctx, seq_id) \
       (((sandesha2_sender_t *) sender)->ops->\
       run_for_seq (sender, env, conf_ctx, seq_id))
 

Modified: webservices/sandesha/trunk/c/src/workers/sender.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/workers/sender.c?rev=423381&r1=423380&r2=423381&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/workers/sender.c (original)
+++ webservices/sandesha/trunk/c/src/workers/sender.c Tue Jul 18 23:16:24 2006
@@ -25,6 +25,11 @@
 #include <axis2_addr.h>
 #include <axis2_engine.h>
 #include <stdio.h>
+#include <axis2_http_transport.h>
+#include <axis2_http_transport_utils.h>
+#include <axiom_soap_const.h>
+#include <axiom_soap_fault.h>
+#include <axiom_soap_body.h>
 
 
 /** 
@@ -302,13 +307,76 @@
                         const axis2_env_t *env, axis2_msg_ctx_t *msg_ctx)
 {
     axis2_property_t *property = NULL;
+    axis2_msg_ctx_t *res_msg_ctx = NULL;
+    axis2_op_ctx_t *req_op_ctx = NULL;
+    axiom_soap_envelope_t *res_envelope = NULL;
+    axis2_char_t *soap_ns_uri = NULL;
     
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
     
     property = AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env, AXIS2_TRANSPORT_IN,
                     AXIS2_FALSE);
-    
+    if(NULL == property)
+        return AXIS2_SUCCESS;
+        
+    res_msg_ctx = axis2_msg_ctx_create(env, AXIS2_MSG_CTX_GET_CONF_CTX(msg_ctx,
+                    env), AXIS2_MSG_CTX_GET_TRANSPORT_IN_DESC(
+                    msg_ctx, env), AXIS2_MSG_CTX_GET_TRANSPORT_OUT_DESC(msg_ctx,
+                    env));
+    AXIS2_MSG_CTX_SET_SVR_SIDE(res_msg_ctx, env, AXIS2_FALSE);
+    AXIS2_MSG_CTX_SET_PROPERTY(res_msg_ctx, env, AXIS2_TRANSPORT_IN,
+                    AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env, AXIS2_TRANSPORT_IN,
+                    AXIS2_FALSE), AXIS2_FALSE);
+    AXIS2_MSG_CTX_SET_SVC_CTX(res_msg_ctx, env, AXIS2_MSG_CTX_GET_SVC_CTX(
+                    msg_ctx, env));
+    AXIS2_MSG_CTX_SET_SVC_GRP_CTX(res_msg_ctx, env, 
+                    AXIS2_MSG_CTX_GET_SVC_GRP_CTX(msg_ctx, env));
+    req_op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env);
+    if(NULL != req_op_ctx)
+    {
+        axis2_ctx_t *ctx = NULL;
+        ctx = AXIS2_OP_CTX_GET_BASE(req_op_ctx, env);
+        if(NULL != AXIS2_CTX_GET_PROPERTY(ctx, env, MTOM_RECIVED_CONTENT_TYPE, 
+                    AXIS2_FALSE))
+        {
+            AXIS2_MSG_CTX_SET_PROPERTY(res_msg_ctx, env, 
+                    MTOM_RECIVED_CONTENT_TYPE, AXIS2_CTX_GET_PROPERTY(ctx, env, 
+                    MTOM_RECIVED_CONTENT_TYPE, AXIS2_FALSE), AXIS2_FALSE);
+        }
+        if(NULL != AXIS2_CTX_GET_PROPERTY(ctx, env, AXIS2_HTTP_CHAR_SET_ENCODING, 
+                    AXIS2_FALSE))
+        {
+            AXIS2_MSG_CTX_SET_PROPERTY(res_msg_ctx, env, 
+                    AXIS2_HTTP_CHAR_SET_ENCODING, AXIS2_CTX_GET_PROPERTY(ctx, env, 
+                    AXIS2_HTTP_CHAR_SET_ENCODING, AXIS2_FALSE), AXIS2_FALSE);
+        }
+    }
+    AXIS2_MSG_CTX_SET_DOING_REST(res_msg_ctx, env, AXIS2_MSG_CTX_GET_DOING_REST(
+                    msg_ctx, env));
+    soap_ns_uri = AXIS2_MSG_CTX_GET_IS_SOAP_11(msg_ctx, env) ?
+                    AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI:
+                    AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI;
+
+    res_envelope = axis2_http_transport_utils_create_soap_msg(env, msg_ctx,
+                    soap_ns_uri);
+   
+    AXIS2_MSG_CTX_SET_PROPERTY(res_msg_ctx, env, SANDESHA2_WITHIN_TRANSACTION,
+                    AXIS2_MSG_CTX_GET_PROPERTY(msg_ctx, env,
+                    SANDESHA2_WITHIN_TRANSACTION, AXIS2_FALSE), AXIS2_FALSE);
+    if(NULL != res_envelope)
+    {
+        axis2_engine_t *engine = NULL;
+        AXIS2_MSG_CTX_SET_SOAP_ENVELOPE(res_msg_ctx, env, res_envelope);
+        
+        engine = axis2_engine_create(env, AXIS2_MSG_CTX_GET_CONF_CTX(msg_ctx, 
+                    env));
+        if(AXIS2_FALSE == sandesha2_sender_is_fault_envelope(sender, env, 
+                    res_envelope))
+            AXIS2_ENGINE_RECIEVE_FAULT(engine, env, res_msg_ctx);
+        else
+            AXIS2_ENGINE_RECIEVE(engine, env, res_msg_ctx);        
+    }
     return AXIS2_SUCCESS;
 }
 
@@ -320,9 +388,11 @@
 {
     
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
-        
     
-    return AXIS2_FALSE;
+    if(SANDESHA2_MSG_TYPE_ACK == msg_type)
+        return AXIS2_FALSE;
+    
+    return AXIS2_TRUE;
 }
 
 axis2_bool_t AXIS2_CALL
@@ -334,6 +404,9 @@
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, rm_msg_ctx, AXIS2_FAILURE);
     
+    if(NULL != SANDESHA2_MSG_CTX_GET_MSG_PART(rm_msg_ctx, env, 
+                        SANDESHA2_MSG_PART_SEQ_ACKNOWLEDGEMENT))
+        return AXIS2_TRUE;
     
     return AXIS2_FALSE;
 }
@@ -344,10 +417,15 @@
                         const axis2_env_t *env, 
                         axiom_soap_envelope_t *soap_envelope)
 {
+    axiom_soap_fault_t *fault = NULL;
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
     AXIS2_PARAM_CHECK(env->error, soap_envelope, AXIS2_FAILURE);
     
-    
+    fault = AXIOM_SOAP_BODY_GET_FAULT(AXIOM_SOAP_ENVELOPE_GET_BODY(soap_envelope,
+                        env), env);
+    if(NULL != fault)
+        return AXIS2_TRUE;
+        
     return AXIS2_FALSE;
 }
 
@@ -361,18 +439,22 @@
     sandesha2_sender_t *sender = NULL;
     sandesha2_sender_args_t *args;
     axis2_env_t *env = NULL;
+    sandesha2_storage_mgr_t *storage_mgr = NULL;
     
     args = (sandesha2_sender_args_t*)data;
     env = args->env;
     sender_impl = args->impl;
     sender = (sandesha2_sender_t*)sender_impl;
     
+    storage_mgr = sandesha2_utils_get_storage_mgr(env, 
+                        sender_impl->conf_ctx, 
+                        AXIS2_CONF_CTX_GET_CONF(sender_impl->conf_ctx, env));
+                        
     while(AXIS2_TRUE == sender_impl->run_sender)
     {
         sandesha2_transaction_t *transaction = NULL;
         /* Use when transaction handling is done 
         axis2_bool_t rollbacked = AXIS2_FALSE;*/
-        sandesha2_storage_mgr_t *storage_mgr = NULL;
         sandesha2_next_msg_mgr_t *next_msg_mgr = NULL;
         sandesha2_sender_mgr_t *storage_map_mgr = NULL;
         sandesha2_seq_property_mgr_t *seq_prop_mgr = NULL;
@@ -380,10 +462,7 @@
         axis2_array_list_t *all_seq_list = NULL;
         int i = 0;
         
-        sleep(1);
-        storage_mgr = sandesha2_utils_get_storage_mgr(env, 
-                        sender_impl->conf_ctx, 
-                        AXIS2_CONF_CTX_GET_CONF(sender_impl->conf_ctx, env));
+        
         next_msg_mgr = SANDESHA2_STORAGE_MGR_GET_NEXT_MSG_MGR(
                         storage_mgr, env);
         storage_map_mgr = SANDESHA2_STORAGE_MGR_GET_STORAGE_MAP_MGR



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