Author: damitha
Date: Fri Jul 20 04:07:48 2007
New Revision: 557963
URL: http://svn.apache.org/viewvc?view=rev&rev=557963
Log:
savan updates are commited to apache
Modified:
webservices/savan/trunk/c/Makefile.am
webservices/savan/trunk/c/autogen.sh
webservices/savan/trunk/c/configure.ac
webservices/savan/trunk/c/include/savan_constants.h
webservices/savan/trunk/c/include/savan_util.h
webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
webservices/savan/trunk/c/samples/server/Makefile.am
webservices/savan/trunk/c/src/client/savan_client.c
webservices/savan/trunk/c/src/core/savan_sub_processor.c
webservices/savan/trunk/c/src/handlers/savan_in_handler.c
webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c
webservices/savan/trunk/c/src/subs_mgr/services.xml
webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
webservices/savan/trunk/c/src/util/savan_util.c
Modified: webservices/savan/trunk/c/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/Makefile.am?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/Makefile.am (original)
+++ webservices/savan/trunk/c/Makefile.am Fri Jul 20 04:07:48 2007
@@ -1,6 +1,6 @@
SUBDIRS = src samples
includedir=$(prefix)/include/axis2-1.1
include_HEADERS=$(top_builddir)/include/*.h
-EXTRA_DIST = build.sh autogen.sh build
+EXTRA_DIST = build.sh autogen.sh build xdocs
Modified: webservices/savan/trunk/c/autogen.sh
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/autogen.sh?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/autogen.sh (original)
+++ webservices/savan/trunk/c/autogen.sh Fri Jul 20 04:07:48 2007
@@ -1,12 +1,20 @@
#!/bin/bash
-
echo -n 'Running libtoolize...'
-if libtoolize --force > /dev/null 2>&1; then
- echo 'done.'
+if [ `uname -s` = Darwin ]
+then
+ LIBTOOLIZE=glibtoolize
+else
+ LIBTOOLIZE=libtoolize
+fi
+
+if $LIBTOOLIZE --force > /dev/null 2>&1; then
+
+ echo 'done.'
else
- echo 'failed.'
- exit 1
+ echo 'failed.'
+ exit 1
fi
+
echo -n 'Running aclocal...'
if aclocal > /dev/null 2>&1; then
Modified: webservices/savan/trunk/c/configure.ac
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/configure.ac?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/configure.ac (original)
+++ webservices/savan/trunk/c/configure.ac Fri Jul 20 04:07:48 2007
@@ -38,6 +38,8 @@
dnl AC_FUNC_MALLOC
dnl AC_FUNC_REALLOC
#AC_CHECK_FUNCS([memmove])
+abs_top_builddir=`pwd`
+AC_SUBST(abs_top_builddir)
AC_MSG_CHECKING(path to use Axis2C . This is a compulsory to build Sandesha2C)
AC_ARG_WITH(axis2,
@@ -50,27 +52,25 @@
AC_MSG_RESULT($withval)
dnl Find axis2 include dir in the path
if test -d $withval; then
- axis2inc="-I$withval"
+ AXIS2INC="-I$withval"
dnl else find the axis2inc include dir in $(AXIS2C_HOME)/include
- elif test -d '$(AXIS2C_HOME)/include'; then
- axis2inc="-I$(AXIS2C_HOME)/include/axis2-1.1"
+ elif [ -d "$abs_top_builddir" ]; then
+ AXIS2INC="-I$abs_top_builddir/../axis2c/include"
else
AC_MSG_ERROR(could not find axis2inc. stop)
fi
;;
esac ],
+ AXIS2INC="-I$abs_top_builddir/../axis2c/include"
AC_MSG_RESULT(no)
)
AC_MSG_CHECKING(To Use Xml Schema. This is a compulsory module to build Woden
C)
-
-AXIS2INC=$axis2inc
-AXIOMINC=$axis2inc/../axiom/include
-UTILINC=$axis2inc/../util/include
-NEETHIINC=$axis2inc/../neethi/include
-
+AXIOMINC="-I$abs_top_builddir/../axis2c/axiom/include"
+UTILINC="-I$abs_top_builddir/../axis2c/util/include"
+NEETHIINC="-I$abs_top_builddir/../axis2c/neethi/include"
AC_SUBST(AXIS2INC)
AC_SUBST(AXIOMINC)
AC_SUBST(UTILINC)
Modified: webservices/savan/trunk/c/include/savan_constants.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_constants.h?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Fri Jul 20 04:07:48 2007
@@ -49,6 +49,7 @@
axutil_hash_t *list;
axis2_svc_t *svc;
axutil_env_t *env;
+ void *svc_client;
}savan_subs_mgr_info_t;
/* Eventing actions */
@@ -66,6 +67,7 @@
#define SAVAN_NAMESPACE "http://ws.apache.org/savan"
#define SAVAN_NS_PREFIX "savan"
#define ELEM_NAME_SUBSCRIBERS "Subscribers"
+#define ELEM_NAME_GET_SUBSCRIBER_LIST "get_subscriber_list"
#define ELEM_NAME_ADD_SUBSCRIBER "AddSubscriber"
#define ELEM_NAME_REMOVE_SUBSCRIBER "RemoveSubscriber"
#define ELEM_NAME_TOPIC "Topic"
@@ -101,6 +103,7 @@
#define SAVAN_KEY_SUB_ID "savan_key_subscriber_id"
#define SAVAN_SUBSCRIBER_LIST "savan_subs_list"
+#define SAVAN_TOPIC_LIST "savan_topic_list"
/** @} */
#ifdef __cplusplus
Modified: webservices/savan/trunk/c/include/savan_util.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Fri Jul 20 04:07:48 2007
@@ -73,6 +73,9 @@
/**
* Get the subscriber store from the service
+ * Note that if the subscription manager is a separate service from
+ * the publisher service then both SubscriptionMgrName and
SubscriptionMgrURL
+ * must be set in the publishers services.xml
* @param env pointer to environment struct
* @param msg_ctx pointer to message context
* @return the store on success, else NULL
@@ -84,6 +87,9 @@
/**
* Add the subscriber to subscription manager services' store
+ * Note that if the subscription manager is a separate service from
+ * the publisher service then both SubscriptionMgrName and
SubscriptionMgrURL
+ * must be set in the publishers services.xml
* @param env pointer to environment struct
* @param msg_ctx pointer to message context
* @param subscriber
@@ -97,6 +103,9 @@
/**
* Remove the subscriber from subscription manager services' store
+ * Note that if the subscription manager is a separate service from
+ * the publisher service then both SubscriptionMgrName and
SubscriptionMgrURL
+ * must be set in the publishers services.xml
* @param env pointer to environment struct
* @param msg_ctx pointer to message context
* @param subscriber
@@ -136,9 +145,10 @@
* @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
*/
AXIS2_EXTERN axis2_status_t AXIS2_CALL
- savan_util_set_sub_store(
+ savan_util_set_store(
axis2_svc_t *svc,
- const axutil_env_t *env);
+ const axutil_env_t *env,
+ axis2_char_t *store_name);
/**
* Get the subscribers registered for a topic
@@ -151,7 +161,13 @@
savan_util_get_subscriber_list_from_remote_subs_mgr(
const axutil_env_t *env,
axis2_char_t *topic,
- axis2_char_t *subs_mgr_url);
+ axis2_char_t *subs_mgr_url,
+ void *svc_client);
+
+ AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+ savan_util_get_topic_name_from_topic_url(
+ const axutil_env_t *env,
+ axis2_char_t *topic_url);
/** @} */
#ifdef __cplusplus
Modified: webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/client/subscriber/subscriber.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/subscriber.c (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/subscriber.c Fri Jul 20
04:07:48 2007
@@ -102,7 +102,7 @@
printf("Subscription ID: %s\n", savan_client_get_sub_id(savan_client));
}
- AXIS2_SLEEP(10);
+ AXIS2_SLEEP(2);
printf("\n***************************************\n");
printf("Renewing subscription...\n");
@@ -121,7 +121,7 @@
}
- AXIS2_SLEEP(10);
+ AXIS2_SLEEP(2);
printf("\n***************************************\n");
printf("Getting status of subscription...\n");
@@ -136,7 +136,7 @@
printf("New expire time: %s\n", expire_time);
}
- AXIS2_SLEEP(10);
+ AXIS2_SLEEP(2);
printf("\n***************************************\n");
printf("Unsubscribing...\n");
Modified: webservices/savan/trunk/c/samples/server/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/Makefile.am?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/samples/server/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/server/Makefile.am Fri Jul 20 04:07:48
2007
@@ -1,2 +1,2 @@
-SUBDIRS = publisher listener
+SUBDIRS =
Modified: webservices/savan/trunk/c/src/client/savan_client.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/savan_client.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_client.c Fri Jul 20 04:07:48 2007
@@ -106,8 +106,8 @@
axis2_char_t *sub_url = NULL;
axis2_char_t *sub_elem_local_name = NULL;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][client] "
- "subscribe...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_client_subscribe");
/* set wsa action as Subscribe. remember the old action */
wsa_options = (axis2_options_t*)axis2_svc_client_get_options(svc_client,
env);
@@ -176,10 +176,13 @@
}
sub_id = savan_client_get_sub_id_from_response(body_elem, reply, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sub_id3:%s", sub_id);
client->sub_id = axutil_strdup(env, sub_id);
sub_url = savan_client_get_sub_url_from_response(body_elem, reply, env);
client->sub_url = axutil_strdup(env, sub_url);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_client_subscribe");
return AXIS2_SUCCESS;
}
@@ -260,8 +263,8 @@
axiom_element_t *unsub_elem = NULL;
axis2_status_t status = AXIS2_FAILURE;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][client] "
- "unsubscribe...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_client_unsubscribe");
/* set wsa action as Unsub. remember the old action */
wsa_options = (axis2_options_t*)axis2_svc_client_get_options(svc_client,
env);
@@ -289,6 +292,8 @@
}
else
status = AXIS2_SUCCESS;
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_client_unsubscribe");
return status;
}
@@ -408,6 +413,7 @@
return AXIS2_FAILURE;
}
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "client->sub_id:%s\n",
client->sub_id);
axiom_element_set_text(id_elem, env, client->sub_id, id_node);
axis2_svc_client_add_header(svc_client, env, id_node);
Modified: webservices/savan/trunk/c/src/core/savan_sub_processor.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/savan_sub_processor.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Fri Jul 20
04:07:48 2007
@@ -88,8 +88,8 @@
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][sub processor] "
- "subscribe...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_sub_processor_subscribe");
/* Extract info from incoming msg and create a subscriber */
subscriber = savan_sub_processor_create_subscriber_from_msg(env, msg_ctx);
@@ -112,6 +112,8 @@
savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
savan_util_add_subscriber(env, msg_ctx, subscriber);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_sub_processor_subscribe");
return AXIS2_SUCCESS;
}
@@ -129,14 +131,14 @@
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][sub processor] "
- "unsubscribe...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_sub_processor_unsubscribe");
subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
if (!subscriber)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to find the"
- "subscriber");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to find the subscriber");
return AXIS2_FAILURE;
}
@@ -148,11 +150,13 @@
status = savan_util_remove_subscriber(env, msg_ctx, subscriber);
if (status != AXIS2_SUCCESS)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to remove the"
- "subscriber");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to remove the subscriber");
return AXIS2_FAILURE;
}
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_sub_processor_unsubscribe");
return AXIS2_SUCCESS;
}
Modified: webservices/savan/trunk/c/src/handlers/savan_in_handler.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/handlers/savan_in_handler.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/handlers/savan_in_handler.c (original)
+++ webservices/savan/trunk/c/src/handlers/savan_in_handler.c Fri Jul 20
04:07:48 2007
@@ -86,8 +86,8 @@
if (svc)
svc_name = axis2_svc_get_name(svc, env);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[%s][savan][in handler] invoke",
- svc_name);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_in_handler_invoke");
/* create a subscription processor */
processor = savan_sub_processor_create(env);
@@ -138,6 +138,8 @@
axis2_msg_recv_t* msg_recv = savan_msg_recv_create(env);
axis2_op_set_msg_recv(op, env, msg_recv);
}
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_in_handler_invoke");
return AXIS2_SUCCESS;
}
Modified: webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c (original)
+++ webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c Fri Jul 20
04:07:48 2007
@@ -284,8 +284,8 @@
axiom_element_t *response_elem = NULL;
savan_subscriber_t *subscriber = NULL;
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][msg recv] "
- "handle unsub request...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_msg_recv_handle_unsub_request");
/* Send a UnsubscribeResponse. This has an empty body. Before sending the
@@ -324,6 +324,8 @@
axiom_node_add_child(body_node , env, response_node);
axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_msg_recv_handle_unsub_request");
return AXIS2_SUCCESS;
}
Modified: webservices/savan/trunk/c/src/subs_mgr/services.xml
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/services.xml?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/services.xml (original)
+++ webservices/savan/trunk/c/src/subs_mgr/services.xml Fri Jul 20 04:07:48 2007
@@ -3,6 +3,8 @@
This is a subscription manager service
</description>
<parameter name="ServiceClass" locked="xsd:false">subscription</parameter>
+ <parameter name="xmpp_id" locked="xsd:false">[EMAIL PROTECTED]</parameter>
+ <parameter name="xmpp_password" locked="xsd:false">123</parameter>
<!--parameter name="loadServiceAtStartup"
locked="xsd:false">true</parameter-->
<operation name="add_subscriber">
Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Fri Jul 20 04:07:48 2007
@@ -25,11 +25,6 @@
#include "savan_subs_mgr.h"
-static axis2_char_t *
-get_topic_from_url(
- const axutil_env_t *env,
- axis2_char_t *topic_url);
-
AXIS2_EXTERN axiom_node_t *AXIS2_CALL
savan_subs_mgr_add_subscriber(
const axutil_env_t *env,
@@ -40,10 +35,10 @@
axis2_endpoint_ref_t *endto_epr = NULL;
axis2_endpoint_ref_t *notify_epr = NULL;
axutil_param_t *param = NULL;
+ axutil_hash_t *topic_store = NULL;
axutil_hash_t *store = NULL;
axis2_char_t *topic_url = NULL;
axis2_char_t *topic = NULL;
- savan_subs_mgr_info_t *sub_info = NULL;
savan_subscriber_t *subscriber = NULL;
axutil_qname_t *qname = NULL;
@@ -76,16 +71,16 @@
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Start:savan_subs_mgr_add_subscriber");
subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
if (!param)
{
/* Store not found. Create and set it as a param */
- savan_util_set_sub_store(subs_svc, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ savan_util_set_store(subs_svc, env, SAVAN_TOPIC_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
}
- store = (axutil_hash_t*)axutil_param_get_value(param, env);
- if(!store)
+ topic_store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ if(!topic_store)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[ML] Failed to extract the "
"subscriber store");
@@ -102,14 +97,12 @@
topic_url = axiom_element_get_text(topic_elem, env, topic_node);
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Subscriber will be added to the topic:%s ", topic_url);
- topic = get_topic_from_url(env, topic_url);
- sub_info = axutil_hash_get(store, topic, AXIS2_HASH_KEY_STRING);
- if(!sub_info)
- {
- sub_info = AXIS2_MALLOC(env->allocator,
- sizeof(struct savan_subs_mgr_info));
- sub_info->list = axutil_hash_make(env);
- axutil_hash_set(store, topic, AXIS2_HASH_KEY_STRING, sub_info);
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+ store = axutil_hash_get(topic_store, topic, AXIS2_HASH_KEY_STRING);
+ if(!store)
+ {
+ store = axutil_hash_make(env);
+ axutil_hash_set(topic_store, topic, AXIS2_HASH_KEY_STRING, store);
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Topic:%s is added to the store", topic);
}
@@ -188,11 +181,11 @@
filter = axiom_element_get_text(filter_elem, env, filter_node);
savan_subscriber_set_filter(subscriber, env, filter);
- if(sub_info->list)
+ if(store)
{
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Subscriber %s added to the topic:%s", id, topic_url);
- axutil_hash_set(sub_info->list, id, AXIS2_HASH_KEY_STRING, subscriber);
+ axutil_hash_set(store, id, AXIS2_HASH_KEY_STRING, subscriber);
}
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] End:savan_subs_mgr_add_subscriber");
@@ -207,10 +200,11 @@
{
axis2_svc_t *subs_svc = NULL;
axutil_param_t *param = NULL;
+ axutil_hash_t *topic_store = NULL;
axutil_hash_t *store = NULL;
axis2_char_t *topic = NULL;
axis2_char_t *topic_url = NULL;
- savan_subs_mgr_info_t *sub_info = NULL;
+ savan_subscriber_t *subscriber = NULL;
axutil_qname_t *qname = NULL;
@@ -226,35 +220,37 @@
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Start:savan_subs_mgr_remove_subscriber");
subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
if (!param)
{
- /* Store not found. Create and set it as a param */
- savan_util_set_sub_store(subs_svc, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[ML] Failed to extract the "
+ "subscriber store");
+ return NULL;
}
- store = (axutil_hash_t*)axutil_param_get_value(param, env);
- if(!store)
+ topic_store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ if(!topic_store)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[ML] Failed to extract the "
"subscriber store");
return NULL;
}
- remove_sub_elem =
(axiom_element_t*)axiom_node_get_data_element(remove_sub_node, env);
+ remove_sub_elem = (axiom_element_t*)axiom_node_get_data_element(
+ remove_sub_node, env);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[ML] node:%s",
axiom_node_to_string(remove_sub_node, env));
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[ML] node:%s",
+ axiom_node_to_string(remove_sub_node, env));
/*Get topic element from node */
qname = axutil_qname_create(env, ELEM_NAME_TOPIC, SAVAN_NAMESPACE, NULL);
- topic_elem = axiom_element_get_first_child_with_qname(remove_sub_elem,
env, qname,
- remove_sub_node, &topic_node);
+ topic_elem = axiom_element_get_first_child_with_qname(remove_sub_elem,
env,
+ qname, remove_sub_node, &topic_node);
axutil_qname_free(qname, env);
topic_url = axiom_element_get_text(topic_elem, env, topic_node);
- topic = get_topic_from_url(env, topic_url);
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Subscriber will be removed from the topic:%s ", topic);
- sub_info = axutil_hash_get(store, topic, AXIS2_HASH_KEY_STRING);
- if(!sub_info)
+ store = axutil_hash_get(topic_store, topic, AXIS2_HASH_KEY_STRING);
+ if(!store)
{
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] There are no subscribers for the ", topic_url);
@@ -263,8 +259,8 @@
/* Get Id element from RemoveSubscriber*/
qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
- id_elem = axiom_element_get_first_child_with_qname(remove_sub_elem, env,
qname,
- remove_sub_node, &id_node);
+ id_elem = axiom_element_get_first_child_with_qname(remove_sub_elem, env,
+ qname, remove_sub_node, &id_node);
axutil_qname_free(qname, env);
id = axiom_element_get_text(id_elem, env, id_node);
@@ -272,16 +268,12 @@
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] Removing subscriber with id %s from topic %s", id, topic_url);
- if(sub_info->list)
- {
- savan_subscriber_t *subscriber = NULL;
- axutil_hash_set(sub_info->list, id, AXIS2_HASH_KEY_STRING, NULL);
- subscriber = axutil_hash_get(sub_info->list, id,
AXIS2_HASH_KEY_STRING);
- if(subscriber)
- savan_subscriber_free(subscriber, env);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
- "[ML] Subscriber %s removed from the topic:%s", id, topic_url);
- }
+ axutil_hash_set(store, id, AXIS2_HASH_KEY_STRING, NULL);
+ subscriber = axutil_hash_get(store, id, AXIS2_HASH_KEY_STRING);
+ if(subscriber)
+ savan_subscriber_free(subscriber, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[ML] Subscriber %s removed from the topic:%s", id, topic_url);
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[ML] End:savan_subs_mgr_remove_subscriber");
return NULL;
@@ -298,11 +290,9 @@
axutil_param_t *param = NULL;
axis2_char_t *topic_url = NULL;
axis2_char_t *topic = NULL;
- savan_subs_mgr_info_t *sub_info = NULL;
- axutil_hash_t *sub_list = NULL;
+ axutil_hash_t *topic_store = NULL;
axutil_hash_t *store = NULL;
axutil_hash_index_t *hi = NULL;
- axis2_char_t *sub_url = NULL;
axiom_namespace_t *ns = NULL;
axiom_namespace_t *ns1 = NULL;
axiom_node_t *subs_list_node = NULL;
@@ -313,16 +303,16 @@
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"Start:savan_subs_mgr_get_subscriber_list");
subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
if (!param)
{
- /* Store not found. Create and set it as a param */
- savan_util_set_sub_store(subs_svc, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ savan_util_set_store(subs_svc, env, SAVAN_TOPIC_LIST);
+ param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Savan Topic List is
empty");
}
- store = (axutil_hash_t*)axutil_param_get_value(param, env);
- if(!store)
+ topic_store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ if(!topic_store)
{
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[ML] Failed to extract the "
"subscriber store");
@@ -330,17 +320,17 @@
}
/* Expected request format is :-
- * <ns1:Subscribers xmlns:ns1="http://ws.apache.org/savan">
+ * <ns1:get_subscriber_list xmlns:ns1="http://ws.apache.org/savan">
* <Topic>topic_url</Topic>
* <ns:Susbscriber
xmlns:ns="http://schemas.xmlsoap.org/ws/2004/08/eventing">
* ...
* </ns:Subscriber>
* <ns:Susbscriber
xmlns:ns="http://schemas.xmlsoap.org/ws/2004/08/eventing">
* ...
- * </ns:Subscriber>
+ * </ns:get_subscriber_list>
* </ns1:Subscribers>
*/
- if (!node) /* 'Subscribers' node */
+ if (!node) /* 'get_subscriber_list' node */
{
AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL,
AXIS2_FAILURE);
@@ -375,7 +365,7 @@
if (topic_text && axiom_text_get_value(topic_text , env))
{
topic_url = (axis2_char_t *)axiom_text_get_value(topic_text, env);
- topic = get_topic_from_url(env, topic_url);
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Requested Topic:%s",
topic);
}
}
@@ -388,24 +378,19 @@
}
/* Retrive subscribers for the topic */
- sub_info = axutil_hash_get(store, topic, AXIS2_HASH_KEY_STRING);
- if(sub_info)
- {
- sub_url = sub_info->url;
- sub_list = sub_info->list;
- }
+ store = axutil_hash_get(topic_store, topic, AXIS2_HASH_KEY_STRING);
/* create the body of the subscribers element */
ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
subs_list_elem = axiom_element_create(env, NULL, ELEM_NAME_SUBSCRIBERS,
ns1,
&subs_list_node);
- if(!sub_list)
+ if(!store)
{
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "No subscribers regirsterd for"
" the topic:%s", topic_url);
return subs_list_node;
}
- for (hi = axutil_hash_first(sub_list, env); hi; hi =
+ for (hi = axutil_hash_first(store, env); hi; hi =
axutil_hash_next(env, hi))
{
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
@@ -494,13 +479,4 @@
return subs_list_node;
}
-static axis2_char_t *
-get_topic_from_url(
- const axutil_env_t *env,
- axis2_char_t *topic_url)
-{
- axis2_char_t *topic = NULL;
- topic = axutil_strdup(env, axutil_rindex(topic_url, '/') + 1);
- return topic;
-}
Modified: webservices/savan/trunk/c/src/util/savan_util.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/savan_util.c?view=diff&rev=557963&r1=557962&r2=557963
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Fri Jul 20 04:07:48 2007
@@ -69,16 +69,16 @@
info_header = axis2_msg_ctx_get_msg_info_headers(msg_ctx, env);
if (!info_header)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Cannot extract
message "
- "info headers");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Cannot extract message info headers");
return SAVAN_MSG_TYPE_UNKNOWN;
}
action = axis2_msg_info_headers_get_action(info_header, env);
if( ! action)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Cannot extract soap "
- "action");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Cannot extract soap action");
AXIS2_ERROR_SET(env->error, SAVAN_ERROR_SOAP_ACTION_NULL,
AXIS2_FAILURE);
return SAVAN_MSG_TYPE_UNKNOWN;
}
@@ -121,24 +121,24 @@
AXIS2_ENV_CHECK(env, NULL);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][util] "
- "get sub id from msg...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_util_get_subscription_id_from_msg");
/* Get soap envelop and extract the subscription id */
envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
if (!envelope)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the
"
- "soap envelop");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to extract the soap envelop");
return NULL;
}
header = axiom_soap_envelope_get_header(envelope, env);
if (!header)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the
"
- "soap header");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to extract the soap header");
return NULL;
}
@@ -155,6 +155,8 @@
/* Now read the id */
sub_id = axiom_element_get_text(id_elem, env, id_node);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_util_get_subscription_id_from_msg");
return sub_id;
}
@@ -171,22 +173,25 @@
AXIS2_ENV_CHECK(env, NULL);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][util] "
- "get subscriber from msg...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_util_get_subscriber_from_msg");
/* Extract subscription id from msg if not already given */
if (!sub_id)
+ {
sub_id = savan_util_get_subscription_id_from_msg(env, msg_ctx);
+ }
store = savan_util_get_subscriber_store(env, msg_ctx);
if (!store)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber store is "
- "null");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Subscriber store is null");
return NULL;
}
-
subscriber = axutil_hash_get(store, sub_id, AXIS2_HASH_KEY_STRING);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_util_get_subscriber_from_msg");
return subscriber;
}
@@ -198,51 +203,89 @@
const axutil_env_t *env,
axis2_msg_ctx_t *msg_ctx)
{
- axis2_svc_t *subs_svc = NULL;
+ axis2_svc_t *pubs_svc = NULL;
axutil_param_t *param = NULL;
axutil_hash_t *store = NULL;
axis2_char_t *subs_svc_name = NULL;
axis2_char_t *topic = NULL;
axis2_endpoint_ref_t *topic_epr = NULL;
+ axis2_char_t *topic_url = NULL;
AXIS2_ENV_CHECK(env, NULL);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][util] "
- "get subscriber store...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_util_get_subscriber_store");
- subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- if (!subs_svc)
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ topic_url = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr,
+ env);
+ pubs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+ if (!pubs_svc)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the
"
- "service");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to extract the %s publisher service", topic);
return NULL;
}
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrName");
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrName");
if(param)
{
+ axis2_svc_t *subs_svc = NULL;
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+ axutil_param_t *topic_store_param = NULL;
+ axutil_hash_t *topic_store = NULL;
+
subs_svc_name = axutil_param_get_value(param, env);
- }
- if(subs_svc_name)
- {
- axis2_char_t *subs_mgr_url = NULL;
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrURL");
- subs_mgr_url = axutil_param_get_value(param, env);
- topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
- topic = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr,
env);
- store = savan_util_get_subscriber_list_from_remote_subs_mgr(env,
topic, subs_mgr_url);
+ conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+ conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+ if(conf)
+ subs_svc = axis2_conf_get_svc(conf, env, subs_svc_name);
+ if(subs_svc)
+ {
+ topic_store_param = axis2_svc_get_param(subs_svc, env,
+ SAVAN_TOPIC_LIST);
+ if(!topic_store_param)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] No topic
found");
+ return NULL;
+ }
+ topic_store = axutil_param_get_value(topic_store_param, env);
+ if(topic_store)
+ store = axutil_hash_get(topic_store, topic,
AXIS2_HASH_KEY_STRING);
+ }
+ else
+ {
+ axis2_char_t *subs_mgr_url = NULL;
+
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrURL");
+ if(param)
+ {
+ subs_mgr_url = axutil_param_get_value(param, env);
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ topic_url = (axis2_char_t *)
axis2_endpoint_ref_get_address(topic_epr,
+ env);
+ store =
savan_util_get_subscriber_list_from_remote_subs_mgr(env,
+ topic_url, subs_mgr_url, NULL);
+ }
+ }
}
else
{
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
- if (!param)
+ param = axis2_svc_get_param(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ if (param)
{
- /* Store not found. Create and set it as a param */
- savan_util_set_sub_store(subs_svc, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ store = (axutil_hash_t*)axutil_param_get_value(param, env);
}
-
- store = (axutil_hash_t*)axutil_param_get_value(param, env);
}
+ if(!store)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] No subscribers for topic %s found", topic);
+ return NULL;
+ }
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_util_get_subscriber_store");
return store;
}
@@ -252,46 +295,87 @@
axis2_msg_ctx_t *msg_ctx,
savan_subscriber_t *subscriber)
{
- axis2_svc_t *subs_svc = NULL;
+ axis2_svc_t *pubs_svc = NULL;
axutil_param_t *param = NULL;
axutil_hash_t *store = NULL;
axis2_char_t *subs_svc_name = NULL;
+ axis2_endpoint_ref_t *topic_epr = NULL;
+ axis2_char_t *topic_url = NULL;
+ axis2_char_t *topic = NULL;
- subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- if (!subs_svc)
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_util_add_subscriber");
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ topic_url = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr,
+ env);
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+ pubs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+ if (!pubs_svc)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract "
- "the service");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to extract the %s publisher service", topic);
return AXIS2_FAILURE;
}
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrName");
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrName");
if(param)
{
+ axis2_svc_t *subs_svc = NULL;
+ axutil_param_t *topic_store_param = NULL;
+ axutil_hash_t *topic_store = NULL;
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+
subs_svc_name = axutil_param_get_value(param, env);
- }
- if(subs_svc_name)
- {
- axis2_char_t *subs_mgr_url = NULL;
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrURL");
- subs_mgr_url = axutil_param_get_value(param, env);
- add_subscriber_to_remote_subs_mgr(env, subscriber, subs_mgr_url);
+ conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+ conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+ if(conf)
+ subs_svc = axis2_conf_get_svc(conf, env, subs_svc_name);
+ if(subs_svc)
+ {
+ topic_store_param = axis2_svc_get_param(subs_svc, env,
+ SAVAN_TOPIC_LIST);
+ if(!topic_store_param)
+ {
+ savan_util_set_store(subs_svc, env, SAVAN_TOPIC_LIST);
+ topic_store_param = axis2_svc_get_param(subs_svc, env,
+ SAVAN_TOPIC_LIST);
+ }
+ topic_store = axutil_param_get_value(topic_store_param, env);
+ if(topic_store)
+ store = axutil_hash_get(topic_store, topic,
AXIS2_HASH_KEY_STRING);
+ if(!store)
+ {
+ store = axutil_hash_make(env);
+ axutil_hash_set(topic_store, topic, AXIS2_HASH_KEY_STRING,
store);
+ }
+ /* Store the created subscriber in the svc */
+ axutil_hash_set(store, savan_subscriber_get_id(subscriber, env),
+ AXIS2_HASH_KEY_STRING, subscriber);
+ }
+ else
+ {
+ axis2_char_t *subs_mgr_url = NULL;
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrURL");
+ subs_mgr_url = axutil_param_get_value(param, env);
+ add_subscriber_to_remote_subs_mgr(env, subscriber, subs_mgr_url);
+ }
}
else
{
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
if (!param)
{
/* Store not found. Create and set it as a param */
- savan_util_set_sub_store(subs_svc, env);
- param = axis2_svc_get_param(subs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ savan_util_set_store(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ param = axis2_svc_get_param(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
}
-
store = (axutil_hash_t*)axutil_param_get_value(param, env);
/* Store the created subscriber in the svc */
axutil_hash_set(store, savan_subscriber_get_id(subscriber, env),
AXIS2_HASH_KEY_STRING, subscriber);
}
-
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_util_add_subscriber");
return AXIS2_SUCCESS;
}
@@ -301,34 +385,77 @@
axis2_msg_ctx_t *msg_ctx,
savan_subscriber_t *subscriber)
{
- axis2_svc_t *subs_svc = NULL;
+ axis2_svc_t *pubs_svc = NULL;
axutil_param_t *param = NULL;
axutil_hash_t *store = NULL;
axis2_char_t *subs_svc_name = NULL;
+ axis2_char_t *topic_url = NULL;
+ axis2_char_t *topic = NULL;
+ axis2_endpoint_ref_t *topic_epr = NULL;
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][sub processor] "
- "remove subscriber...");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Start:savan_util_remove_subscriber");
- subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
- if (!subs_svc)
+ topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+ topic_url = (axis2_char_t *) axis2_endpoint_ref_get_address(topic_epr,
+ env);
+ topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+ pubs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+ if (!pubs_svc)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract "
- "the service");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Failed to extract the %s publisher service", topic);
return AXIS2_FAILURE;
}
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrName");
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrName");
if(param)
{
+ axis2_svc_t *subs_svc = NULL;
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+ axutil_param_t *topic_store_param = NULL;
+ axutil_hash_t *topic_store = NULL;
+
subs_svc_name = axutil_param_get_value(param, env);
- }
- if(subs_svc_name)
- {
- axis2_char_t *subs_mgr_url = NULL;
- param = axis2_svc_get_param(subs_svc, env, "SubscriptionMgrURL");
- subs_mgr_url = axutil_param_get_value(param, env);
- remove_subscriber_from_remote_subs_mgr(env, subscriber, subs_mgr_url);
+ conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+ conf = axis2_conf_ctx_get_conf(conf_ctx, env);
+ if(conf)
+ subs_svc = axis2_conf_get_svc(conf, env, subs_svc_name);
+ if(subs_svc)
+ {
+ axis2_char_t *id = NULL;
+
+ topic_store_param = axis2_svc_get_param(subs_svc, env,
+ SAVAN_TOPIC_LIST);
+ if (!topic_store_param)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "No subscribers for the topic %s", topic_url);
+ return AXIS2_SUCCESS;
+ }
+ topic_store = axutil_param_get_value(topic_store_param, env);
+ /* Retrive subscribers for the topic */
+ if(topic_store)
+ store = axutil_hash_get(topic_store, topic,
AXIS2_HASH_KEY_STRING);
+ if (!store)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Subscriber store is NULL");
+ return AXIS2_SUCCESS;
+ }
+ id = savan_subscriber_get_id(subscriber, env);
+ /* Setting NULL as value will remove the entry */
+ axutil_hash_set(store, id, AXIS2_HASH_KEY_STRING, NULL);
+ }
+ else
+ {
+ axis2_char_t *subs_mgr_url = NULL;
+ param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrURL");
+ subs_mgr_url = axutil_param_get_value(param, env);
+ remove_subscriber_from_remote_subs_mgr(env, subscriber,
subs_mgr_url);
+ }
}
else
{
@@ -336,25 +463,30 @@
id = savan_subscriber_get_id(subscriber, env);
/* Extract the store from the svc and remove the given subscriber */
- store = savan_util_get_subscriber_store(env, msg_ctx);
+ param = axis2_svc_get_param(pubs_svc, env, SAVAN_SUBSCRIBER_LIST);
+ if (param)
+ {
+ store = (axutil_hash_t*)axutil_param_get_value(param, env);
+ }
if (!store)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber store
is "
- "null");
- return AXIS2_FAILURE;
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] Subscriber store is NULL");
+ return AXIS2_SUCCESS;
}
-
/* Setting NULL as value will remove the entry */
axutil_hash_set(store, id, AXIS2_HASH_KEY_STRING, NULL);
}
- return AXIS2_SUCCESS;
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
+ "[savan] End:savan_util_remove_subscriber");
+ return AXIS2_SUCCESS;
}
-
axis2_status_t AXIS2_CALL
-savan_util_set_sub_store(
+savan_util_set_store(
axis2_svc_t *svc,
- const axutil_env_t *env)
+ const axutil_env_t *env,
+ axis2_char_t *store_name)
{
axutil_hash_t *store = NULL;
axutil_param_t *param = NULL;
@@ -375,7 +507,7 @@
}
/* Add the hash map as a parameter to the given service */
- param = axutil_param_create(env, SAVAN_SUBSCRIBER_LIST, (void*)store);
+ param = axutil_param_create(env, store_name, (void*)store);
if (!param)
{
/* TODO : error reporting */
@@ -385,8 +517,7 @@
}
axis2_svc_add_param(svc, env, param);
- AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][sub processor] "
- "End:set_sub_store");
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] End:set_sub_store");
return AXIS2_SUCCESS;
}
@@ -439,7 +570,6 @@
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
- axis2_options_set_soap_version(options, env, AXIOM_SOAP11);
/* Set service client options */
axis2_svc_client_set_options(svc_client, env, options);
@@ -501,7 +631,6 @@
AXIS2_ERROR_GET_MESSAGE(env->error));
return AXIS2_FAILURE;
}
- axis2_options_set_soap_version(options, env, AXIOM_SOAP11);
/* Set service client options */
axis2_svc_client_set_options(svc_client, env, options);
@@ -519,7 +648,8 @@
savan_util_get_subscriber_list_from_remote_subs_mgr(
const axutil_env_t *env,
axis2_char_t *topic,
- axis2_char_t *subs_mgr_url)
+ axis2_char_t *subs_mgr_url,
+ void *s_client)
{
axis2_endpoint_ref_t* endpoint_ref = NULL;
axis2_options_t *options = NULL;
@@ -531,30 +661,44 @@
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] Start:savan_util_get_subscriber_list_from_remote_subs_mgr");
- options = axis2_options_create(env);
- axis2_options_set_xml_parser_reset(options, env, AXIS2_FALSE);
- axis2_options_set_action(options, env,
- "http://ws.apache.org/axis2/c/subscription/get_subscriber_list");
-
- client_home = AXIS2_GETENV("AXIS2C_HOME");
- if (!client_home)
- client_home = "../../deploy";
-
- svc_client = axis2_svc_client_create(env, client_home);
- if (!svc_client)
+ if(!s_client)
{
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "[savan] Stub invoke FAILED: Error code:"
- " %d :: %s", env->error->error_number,
- AXIS2_ERROR_GET_MESSAGE(env->error));
- return NULL;
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home)
+ client_home = "../../deploy";
+ options = axis2_options_create(env);
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "[savan] Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ return NULL;
+ }
+ endpoint_ref = axis2_endpoint_ref_create(env, subs_mgr_url);
+ axis2_options_set_to(options, env, endpoint_ref);
+ axis2_svc_client_set_options(svc_client, env, options);
+ axis2_svc_client_engage_module(svc_client, env,
AXIS2_MODULE_ADDRESSING);
+ }
+ else
+ {
+ svc_client = (axis2_svc_client_t *) s_client;
+ options = (axis2_options_t *)axis2_svc_client_get_options(svc_client,
+ env);
+ endpoint_ref = axis2_options_get_to(options, env);
+ if(endpoint_ref)
+ {
+ axis2_endpoint_ref_set_address(endpoint_ref, env, subs_mgr_url);
+ }
+ else
+ {
+ endpoint_ref = axis2_endpoint_ref_create(env, subs_mgr_url);
+ axis2_options_set_to(options, env, endpoint_ref);
+ }
+
}
- endpoint_ref = axis2_endpoint_ref_create(env, subs_mgr_url);
- axis2_options_set_to(options, env, endpoint_ref);
- axis2_options_set_soap_version(options, env, AXIOM_SOAP11);
- axis2_svc_client_set_options(svc_client, env, options);
- axis2_svc_client_engage_module(svc_client, env, AXIS2_MODULE_ADDRESSING);
payload = build_subscribers_request_om_payload(env, topic);
ret_node = axis2_svc_client_send_receive(svc_client, env, payload);
if (ret_node)
@@ -568,8 +712,10 @@
" %d :: %s", env->error->error_number,
AXIS2_ERROR_GET_MESSAGE(env->error));
}
- if(svc_client)
+ if(!s_client && svc_client)
+ {
axis2_svc_client_free(svc_client, env);
+ }
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] End:savan_util_get_subscriber_list_from_remote_subs_mgr");
return subscriber_list;
@@ -588,7 +734,7 @@
axis2_char_t *om_str = NULL;
ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
- om_ele = axiom_element_create(env, NULL, ELEM_NAME_SUBSCRIBERS, ns1,
&om_node);
+ om_ele = axiom_element_create(env, NULL, ELEM_NAME_GET_SUBSCRIBER_LIST,
ns1, &om_node);
topic_om_ele = axiom_element_create(env, om_node, ELEM_NAME_TOPIC, ns1,
&topic_om_node);
axiom_element_set_text(topic_om_ele, env, topic, topic_om_node);
@@ -610,11 +756,11 @@
{
axiom_element_t *subs_list_element = NULL;
axiom_children_qname_iterator_t *subs_iter = NULL;
- axutil_hash_t *subscriber_list = axutil_hash_make(env);
axutil_qname_t *qname = NULL;
axiom_node_t *topic_node = NULL;
axiom_element_t *topic_elem = NULL;
axis2_char_t *topic_url = NULL;
+ axutil_hash_t *subscriber_list = NULL;
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] Start:process_subscriber_list_node");
@@ -639,6 +785,11 @@
"[savan] Subscribers list is empty");
return NULL;
}
+ if(axiom_children_qname_iterator_has_next(subs_iter, env))
+ {
+ subscriber_list = axutil_hash_make(env);
+ }
+
while(axiom_children_qname_iterator_has_next(subs_iter, env))
{
savan_subscriber_t *subscriber = NULL;
@@ -889,3 +1040,14 @@
return NULL;
}
+
+axis2_char_t *AXIS2_CALL
+savan_util_get_topic_name_from_topic_url(
+ const axutil_env_t *env,
+ axis2_char_t *topic_url)
+{
+ axis2_char_t *topic = NULL;
+ topic = axutil_strdup(env, axutil_rindex(topic_url, '/') + 1);
+ return topic;
+}
+