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;
+}
+


Reply via email to