You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by sa...@apache.org on 2006/04/03 14:35:28 UTC
svn commit: r391034 - in /webservices/axis2/trunk/c/modules:
core/clientapi/call.c core/clientapi/listener_manager.c core/engine/conf.c
util/network_handler.c
Author: samisa
Date: Mon Apr 3 05:35:27 2006
New Revision: 391034
URL: http://svn.apache.org/viewcvs?rev=391034&view=rev
Log:
Fixes to get seperate listner working with client
Modified:
webservices/axis2/trunk/c/modules/core/clientapi/call.c
webservices/axis2/trunk/c/modules/core/clientapi/listener_manager.c
webservices/axis2/trunk/c/modules/core/engine/conf.c
webservices/axis2/trunk/c/modules/util/network_handler.c
Modified: webservices/axis2/trunk/c/modules/core/clientapi/call.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/clientapi/call.c?rev=391034&r1=391033&r2=391034&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/call.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/call.c Mon Apr 3 05:35:27 2006
@@ -241,6 +241,13 @@
return NULL;
}
+ call_impl->listener_manager = axis2_listener_manager_create(env);
+ if (!(call_impl->listener_manager))
+ {
+ axis2_call_free(&(call_impl->call), env);
+ return NULL;
+ }
+
/* initialize ops */
call_impl->call.ops = AXIS2_MALLOC( (*env)->allocator, sizeof(axis2_call_ops_t) );
if (!call_impl->call.ops)
@@ -589,7 +596,7 @@
{
axis2_char_t *svc_name = NULL, *temp = NULL;
axis2_qname_t *svc_qname = AXIS2_SVC_GET_QNAME(svc, env);
- axis2_qname_t *op_qname = AXIS2_OP_GET_QNAME(svc, env);
+ axis2_qname_t *op_qname = AXIS2_OP_GET_QNAME(op, env);
axis2_qname_t *transport_qname = AXIS2_TRANSPORT_IN_DESC_GET_QNAME(call_impl->listener_transport, env);
axis2_endpoint_ref_t *epr = NULL;
@@ -598,12 +605,12 @@
if (temp)
AXIS2_FREE((*env)->allocator, temp);
- epr = AXIS2_LISTNER_MANAGER_REPLY_TO_EPR(call_impl->listener_manager, env, svc_name,
+ /*epr = AXIS2_LISTNER_MANAGER_REPLY_TO_EPR(call_impl->listener_manager, env, svc_name,
AXIS2_QNAME_GET_LOCALPART(transport_qname, env));
if (epr)
{
AXIS2_MSG_CTX_SET_REPLY_TO(msg_ctx, env, epr);
- }
+ }*/
if (svc_name)
AXIS2_FREE((*env)->allocator, svc_name);
@@ -611,7 +618,7 @@
}
- AXIS2_MSG_CTX_SET_TO(msg_ctx, env, call_impl->to);
+ /*AXIS2_MSG_CTX_SET_TO(msg_ctx, env, call_impl->to);*/
/* create and set the Operation context */
AXIS2_MSG_CTX_SET_OP_CTX(msg_ctx, env, AXIS2_OP_FIND_OP_CTX(op, env, msg_ctx, svc_ctx));
AXIS2_MSG_CTX_SET_SVC_CTX(msg_ctx, env, svc_ctx);
Modified: webservices/axis2/trunk/c/modules/core/clientapi/listener_manager.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/clientapi/listener_manager.c?rev=391034&r1=391033&r2=391034&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/listener_manager.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/listener_manager.c Mon Apr 3 05:35:27 2006
@@ -40,6 +40,15 @@
} axis2_transport_listener_state_t;
+typedef struct axis2_listener_manager_worker_func_args
+{
+ axis2_env_t **env;
+ axis2_listener_manager_impl_t *listner_manager;
+ axis2_transport_receiver_t *listener;
+} axis2_listener_manager_worker_func_args_t;
+
+void * AXIS2_THREAD_FUNC
+axis2_listener_manager_worker_func(axis2_thread_t *thd, void *data);
/** Interface to implementation conversion macro */
#define AXIS2_INTF_TO_IMPL(listener_manager) ((axis2_listener_manager_impl_t *)listener_manager)
@@ -180,7 +189,37 @@
listener = AXIS2_TRANSPORT_IN_DESC_GET_RECV(transport_in, env);
if (listener)
{
- AXIS2_TRANSPORT_RECEIVER_START(listener, env);
+ axis2_thread_t *worker_thread = NULL;
+ axis2_listener_manager_worker_func_args_t *arg_list = NULL;
+ arg_list = AXIS2_MALLOC((*env)->allocator,
+ sizeof(axis2_listener_manager_worker_func_args_t));
+ if(NULL == arg_list)
+ {
+ return AXIS2_FAILURE;
+ }
+ arg_list->env = env;
+ arg_list->listner_manager = listener_manager_impl;
+ arg_list->listener = listener;
+#ifdef AXIS2_SVR_MULTI_THREADED
+ if ((*env)->thread_pool)
+ {
+ worker_thread = AXIS2_THREAD_POOL_GET_THREAD((*env)->thread_pool,
+ axis2_listener_manager_worker_func, (void*)arg_list);
+ if(NULL == worker_thread)
+ {
+ AXIS2_LOG_ERROR((*env)->log, AXIS2_LOG_SI, "Thread creation failed"
+ "call invoke non blocking");
+ }
+ AXIS2_THREAD_POOL_THREAD_DETACH((*env)->thread_pool, worker_thread);
+ }
+ else
+ {
+ AXIS2_LOG_ERROR((*env)->log, AXIS2_LOG_SI, "Thread pool not set in envioronment."
+ " Cannot invoke call non blocking");
+ }
+#else
+ axis2_listener_manager_worker_func(NULL, (void*)arg_list);
+#endif
tl_state = AXIS2_MALLOC( (*env)->allocator,
sizeof(axis2_transport_listener_state_t) );
@@ -300,4 +339,21 @@
{
AXIS2_ENV_CHECK(env, NULL);
return AXIS2_INTF_TO_IMPL(listener_manager)->conf_ctx;
+}
+
+void * AXIS2_THREAD_FUNC
+axis2_listener_manager_worker_func(axis2_thread_t *thd, void *data)
+{
+ axis2_listener_manager_worker_func_args_t *args_list = NULL;
+
+ args_list = (axis2_listener_manager_worker_func_args_t *) data;
+ if (!args_list)
+ return NULL;
+
+ AXIS2_ENV_CHECK(args_list->env, AXIS2_FAILURE);
+ if (args_list->listener)
+ {
+ AXIS2_TRANSPORT_RECEIVER_START(args_list->listener, args_list->env);
+ }
+ return NULL;
}
Modified: webservices/axis2/trunk/c/modules/core/engine/conf.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/engine/conf.c?rev=391034&r1=391033&r2=391034&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/engine/conf.c (original)
+++ webservices/axis2/trunk/c/modules/core/engine/conf.c Mon Apr 3 05:35:27 2006
@@ -1429,11 +1429,27 @@
axis2_env_t **env,
axis2_qname_t *module_name)
{
+ axis2_conf_impl_t *config_impl = NULL;
+ int i = 0;
+ int size = 0;
AXIS2_ENV_CHECK(env, AXIS2_FALSE);
AXIS2_PARAM_CHECK((*env)->error, module_name, AXIS2_FALSE);
-
- return AXIS2_ARRAY_LIST_CONTAINS(AXIS2_INTF_TO_IMPL(conf)->
- engaged_modules, env, module_name);
+ config_impl = AXIS2_INTF_TO_IMPL(conf);
+
+
+ size = AXIS2_ARRAY_LIST_SIZE(config_impl->engaged_modules, env);
+ for(i = 0; i < size; i++)
+ {
+ axis2_qname_t *qname = NULL;
+
+ qname = (axis2_qname_t *) AXIS2_ARRAY_LIST_GET(config_impl->
+ engaged_modules, env, i);
+ if(AXIS2_TRUE == AXIS2_QNAME_EQUALS(module_name, env, qname))
+ {
+ return AXIS2_TRUE;
+ }
+ }
+ return AXIS2_FALSE;
}
axis2_phases_info_t *AXIS2_CALL
Modified: webservices/axis2/trunk/c/modules/util/network_handler.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/util/network_handler.c?rev=391034&r1=391033&r2=391034&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/util/network_handler.c (original)
+++ webservices/axis2/trunk/c/modules/util/network_handler.c Mon Apr 3 05:35:27 2006
@@ -191,8 +191,8 @@
cli_len = sizeof(cli_addr);
cli_socket = accept(svr_socket, (struct sockaddr *)&cli_addr, &cli_len);
if (cli_socket < 0)
- AXIS2_LOG_WRITE((*env)->log, "[Axis2][network_handler] Socket accept \
- failed", AXIS2_LOG_LEVEL_ERROR);
+ AXIS2_LOG_ERROR((*env)->log, AXIS2_LOG_SI, "[Axis2][network_handler] Socket accept \
+ failed");
setsockopt(cli_socket, IPPROTO_TCP, TCP_NODELAY, &nodelay,
sizeof(nodelay));