You are viewing a plain text version of this content. The canonical link for it is here.
Posted to savan-dev@ws.apache.org by da...@apache.org on 2007/08/10 06:53:04 UTC

svn commit: r564462 - in /webservices/savan/trunk/c: include/savan_constants.h src/subs_mgr/subs_mgr.c

Author: damitha
Date: Thu Aug  9 21:53:02 2007
New Revision: 564462

URL: http://svn.apache.org/viewvc?view=rev&rev=564462
Log:

adding topic list retrieval functionality

Modified:
    webservices/savan/trunk/c/include/savan_constants.h
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c

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=564462&r1=564461&r2=564462
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Thu Aug  9 21:53:02 2007
@@ -72,6 +72,10 @@
 #define ELEM_NAME_ADD_SUBSCRIBER "AddSubscriber"
 #define ELEM_NAME_REMOVE_SUBSCRIBER "RemoveSubscriber"
 #define ELEM_NAME_TOPIC "Topic"
+#define ELEM_NAME_TOPICS "Topics"
+#define ELEM_NAME_GET_TOPIC_LIST "get_topic_list"
+#define ELEM_NAME_ADD_TOPIC "AddTopic"
+#define ELEM_NAME_REMOVE_TOPIC "RemoveTopic"
 #define DEFAULT_DELIVERY_MODE "http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"
 
 /* Eventing element names */

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=564462&r1=564461&r2=564462
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Thu Aug  9 21:53:02 2007
@@ -479,4 +479,80 @@
     return subs_list_node;
 }
 
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+savan_subs_mgr_get_topic_list(
+    const axutil_env_t *env,
+    axiom_node_t *node,
+    axis2_msg_ctx_t *msg_ctx)
+{
+
+    axis2_svc_t *subs_svc = NULL;
+    axutil_param_t *param = NULL;
+    axutil_hash_t *topic_store = NULL;
+    axutil_hash_index_t *hi = NULL;
+    axiom_namespace_t *ns1 = NULL;
+    axiom_node_t *topic_list_node = NULL;
+    axiom_element_t* topic_list_elem = NULL;
+
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+        "Start:savan_subs_mgr_get_topic_list");
+    subs_svc = axis2_msg_ctx_get_svc(msg_ctx, env);
+    param = axis2_svc_get_param(subs_svc, env, SAVAN_TOPIC_LIST);
+    if (!param)
+    {
+        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");
+    }
+    
+    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 "
+            "topic store"); 
+        return NULL;
+    }
+
+    /* Expected request format is :-
+     * <ns1:get_topic_list xmlns:ns1="http://ws.apache.org/savan">
+     * </ns1:get_topic_list>
+     */
+    if (!node) /* 'get_topic_list' node */
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, 
+            AXIS2_FAILURE);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "Echo client ERROR: input parameter NULL");
+        return NULL;
+    }
+    /* create the body of the topic_list element */
+    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
+    topic_list_elem = axiom_element_create(env, NULL, ELEM_NAME_TOPICS, ns1, 
+        &topic_list_node);
+    for (hi = axutil_hash_first(topic_store, env); hi; hi =
+        axutil_hash_next(env, hi))
+    {
+        axis2_char_t *topic = NULL;
+        const void *key = NULL;
+        axutil_hash_this(hi, &key, NULL, NULL);
+        topic = (axis2_char_t *)key;
+
+        if (topic)
+        {
+            axiom_node_t *topic_node = NULL;
+            axiom_element_t* topic_elem = NULL;
+
+            /* create the topic element */
+            topic_elem = axiom_element_create(env, topic_list_node, 
+                ELEM_NAME_TOPIC, ns1, &topic_node);
+            if(topic)
+                axiom_element_set_text(topic_elem, env, topic, topic_node); 
+        }
+        key = NULL;
+    }
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+        "End:savan_subs_mgr_get_topic_list");
+    return topic_list_node;
+}
+