Author: damitha
Date: Tue Sep 18 18:57:53 2007
New Revision: 577129

URL: http://svn.apache.org/viewvc?rev=577129&view=rev
Log:
Fixing segfault which happen when savan filtering enabled

Modified:
    webservices/savan/trunk/c/include/savan_db_mgr.h
    webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
    webservices/savan/trunk/c/src/core/savan_sub_processor.c
    webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c
    webservices/savan/trunk/c/src/subscribers/savan_subscriber.c
    webservices/savan/trunk/c/src/util/db_mgr.c
    webservices/savan/trunk/c/src/util/savan_util.c
    webservices/savan/trunk/c/xdocs/index.html

Modified: webservices/savan/trunk/c/include/savan_db_mgr.h
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_db_mgr.h?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_db_mgr.h (original)
+++ webservices/savan/trunk/c/include/savan_db_mgr.h Tue Sep 18 18:57:53 2007
@@ -85,10 +85,17 @@
     char **col_name);
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
-savan_db_mgr_insert(
+savan_db_mgr_insert_subscriber(
     savan_db_mgr_t *db_mgr,
     const axutil_env_t *env,
-    axis2_char_t *sql_stmt_insert);
+    savan_subscriber_t *subscriber);
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_db_mgr_insert_topic(
+    savan_db_mgr_t *db_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *topic_name,
+    axis2_char_t *topic_url);
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_db_mgr_remove(

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?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/subscriber.c (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/subscriber.c Tue Sep 18 
18:57:53 2007
@@ -109,7 +109,7 @@
     }
     else
     {
-        printf("Subscription failed\n");
+        printf("Subscription Failed\n");
         exit(0);
     }
 

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?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Tue Sep 18 
18:57:53 2007
@@ -27,6 +27,7 @@
 #include <savan_error.h>
 #include <savan_subscriber.h>
 #include <savan_util.h>
+#include <savan_db_mgr.h>
 
 struct savan_sub_processor_t
 {
@@ -208,6 +209,9 @@
     axis2_bool_t renewable = AXIS2_TRUE;
     axis2_char_t *expires = NULL;
     axis2_char_t *renewed_expires = NULL;
+    savan_db_mgr_t *db_mgr = NULL;
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_status_t status = AXIS2_FAILURE;
 
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
@@ -249,11 +253,14 @@
     renewed_expires = savan_util_get_renewed_expiry_time(env, expires);
     savan_subscriber_set_expires(subscriber, env, renewed_expires);
     savan_subscriber_set_renew_status(subscriber, env, AXIS2_TRUE);
-    savan_util_update_subscriber(env, msg_ctx, subscriber);
+    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+    db_mgr = savan_db_mgr_create(env, conf_ctx);
+    if(db_mgr)
+        status = savan_db_mgr_insert_subscriber(db_mgr, env, subscriber);
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[SAVAN] End:savan_sub_processor_renew_subscription");
 
-    return AXIS2_SUCCESS;
+    return status;
 }
 
 
/******************************************************************************/
@@ -373,66 +380,81 @@
     axutil_qname_free(qname, env);
     
     /* Now read each sub element of Subscribe element */
+    if(sub_elem)
+    {
+        /* EndTo */
+        qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
+        endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+            sub_node, &endto_node);
+        axutil_qname_free(qname, env);
+       
+        if(endto_elem)
+        {
+            endto = axiom_element_get_text(endto_elem, env, endto_node);
+            if(endto)
+            {
+                endto_epr = axis2_endpoint_ref_create(env, endto);
+                savan_subscriber_set_end_to(subscriber, env, endto_epr);
+            }
+        }
         
-    /* EndTo */
-    qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
-    endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, qname,
-        sub_node, &endto_node);
-    axutil_qname_free(qname, env);
-    
-    endto = axiom_element_get_text(endto_elem, env, endto_node);
-    
-    endto_epr = axis2_endpoint_ref_create(env, endto);
-    
-    savan_subscriber_set_end_to(subscriber, env, endto_epr);
-    
-    /* Get Delivery element and read NotifyTo */
-    qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, EVENTING_NAMESPACE, 
NULL);
-    delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &delivery_node);
-
-    axutil_qname_free(qname, env);
-    
-    qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, EVENTING_NAMESPACE, 
NULL);
-    notify_elem = axiom_element_get_first_child_with_qname(delivery_elem, env, 
qname,
-        delivery_node, &notify_node);
-    axutil_qname_free(qname, env);
-    
-    notify = axiom_element_get_text(notify_elem, env, notify_node);
-    
-    notify_epr = axis2_endpoint_ref_create(env, notify);
-    
-    savan_subscriber_set_notify_to(subscriber, env, notify_epr);
-    
-    /* Expires */
-    qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, EVENTING_NAMESPACE, 
NULL);
-    expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &expires_node);
-    axutil_qname_free(qname, env);
-    
-    expires = axiom_element_get_text(expires_elem, env, expires_node);
-    
-    savan_subscriber_set_expires(subscriber, env, expires);
-    
-    /* Filter */
-    qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
-    filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &filter_node);
-    axutil_qname_free(qname, env);
-       
-       qname = axutil_qname_create(env, "Dialect", NULL, NULL);
-   
-    filter = axiom_element_get_text(filter_elem, env, filter_node);
-       filter_dialect = axiom_element_get_attribute_value(filter_elem,
-               env, qname);
-       axutil_qname_free(qname, env);
-
-       savan_subscriber_set_filter_dialect(subscriber, env, filter_dialect);
-    savan_subscriber_set_filter(subscriber, env, filter);
-    
-    topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
-    topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr, env);
-    savan_subscriber_set_topic(subscriber, env, topic);
+        /* Get Delivery element and read NotifyTo */
+        qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, 
EVENTING_NAMESPACE, NULL);
+        delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, 
env, qname,
+            sub_node, &delivery_node);
+        axutil_qname_free(qname, env);
+        if(delivery_elem)
+        {
+            qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, 
EVENTING_NAMESPACE, NULL);
+            notify_elem = 
axiom_element_get_first_child_with_qname(delivery_elem, env, qname,
+                delivery_node, &notify_node);
+            axutil_qname_free(qname, env);
+            if(notify_elem)
+            {
+                notify = axiom_element_get_text(notify_elem, env, notify_node);
+                if(notify)
+                {
+                    notify_epr = axis2_endpoint_ref_create(env, notify);
+                    savan_subscriber_set_notify_to(subscriber, env, 
notify_epr);
+                }
+            }
+        } 
+        /* Expires */
+        qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, 
EVENTING_NAMESPACE, NULL);
+        expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+            sub_node, &expires_node);
+        axutil_qname_free(qname, env);
+        if(expires_elem)
+        {
+            expires = axiom_element_get_text(expires_elem, env, expires_node);
+            if(expires)
+                savan_subscriber_set_expires(subscriber, env, expires);
+        }
+        
+        /* Filter */
+        qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
+        filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+            sub_node, &filter_node);
+        axutil_qname_free(qname, env);
+        if(filter_elem)
+        {
+            qname = axutil_qname_create(env, "Dialect", NULL, NULL);
+            filter = axiom_element_get_text(filter_elem, env, filter_node);
+            filter_dialect = axiom_element_get_attribute_value(filter_elem,
+                env, qname);
+            axutil_qname_free(qname, env);
+            if(filter_dialect)
+                savan_subscriber_set_filter_dialect(subscriber, env, 
filter_dialect);
+            if(filter)
+                savan_subscriber_set_filter(subscriber, env, filter);
+        }
+        
+        topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
+        if(topic_epr)
+            topic = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr, 
env);
+        if(topic)
+            savan_subscriber_set_topic(subscriber, env, topic);
+    }
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[SAVAN] End:savan_sub_processor_create_subscriber_from_msg");
     return subscriber;    

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?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c (original)
+++ webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c Tue Sep 18 
18:57:53 2007
@@ -366,11 +366,12 @@
     }
 
     renewed = savan_subscriber_get_renew_status(subscriber, env);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "renewed:%d", renewed); 
     if (!renewed)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
             "[SAVAN] Subscription is not renewed");
-        return AXIS2_FAILURE;
+        /*return AXIS2_FAILURE;*/
     }
 
     /* Set wsa action as RenewResponse. */

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?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Tue Sep 18 18:57:53 2007
@@ -33,6 +33,7 @@
     axis2_msg_ctx_t *msg_ctx)
 {
     axis2_conf_ctx_t *conf_ctx = NULL;
+    savan_subscriber_t *subscriber = NULL;
     axis2_char_t *topic_url = NULL;
     axis2_char_t *topic = NULL;
 
@@ -59,15 +60,17 @@
     
     axis2_char_t *id = NULL;
     axis2_char_t *endto = NULL;
-    axis2_char_t *notify = NULL;
+    axis2_char_t *notifyto = NULL;
     axis2_char_t *expires = NULL;
     axis2_char_t *filter = NULL;
-    axis2_char_t *delivery_mode = NULL;
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[SAVAN] Start:savan_subs_mgr_add_subscriber");
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-    add_sub_elem = (axiom_element_t*)axiom_node_get_data_element(add_sub_node, 
env);
+    subscriber = savan_subscriber_create(env);
+    if(add_sub_node)
+        add_sub_elem = (axiom_element_t*)axiom_node_get_data_element(
+            add_sub_node, env);
     
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[SAVAN] node:%s", axiom_node_to_string(add_sub_node, env));
@@ -77,17 +80,25 @@
         add_sub_node, &topic_node);
     axutil_qname_free(qname, env);
     topic_url = axiom_element_get_text(topic_elem, env, topic_node);
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[SAVAN] Subscriber will be added to the topic:%s ", topic_url);
-    topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+    if(topic_url)
+    {
+        savan_subscriber_set_topic(subscriber, env, topic_url);
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Subscriber will be added to the topic:%s ", topic_url);
+        topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+    }
 
     /* Get Id element from AddSubscriber*/
     qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
     id_elem = axiom_element_get_first_child_with_qname(add_sub_elem, env, 
qname,
         add_sub_node, &id_node);
     axutil_qname_free(qname, env);
-   
-    id = axiom_element_get_text(id_elem, env, id_node);
+  
+    if(id_elem)
+    {
+        id = axiom_element_get_text(id_elem, env, id_node);
+        savan_subscriber_set_id(subscriber, env, id);
+    }
     /* Get subscriber element from Body */
     qname = axutil_qname_create(env, ELEM_NAME_SUBSCRIBE, EVENTING_NAMESPACE, 
NULL);
     sub_elem = axiom_element_get_first_child_with_qname(add_sub_elem, env, 
qname,
@@ -97,52 +108,79 @@
     /* Now read each sub element of Subscribe element */
         
     /* EndTo */
-    qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
-    endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, qname,
-        sub_node, &endto_node);
-    axutil_qname_free(qname, env);
-    
-    endto = axiom_element_get_text(endto_elem, env, endto_node);
-    
-    /* Get Delivery element and read NotifyTo */
-    qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, EVENTING_NAMESPACE, 
NULL);
-    delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &delivery_node);
-    axutil_qname_free(qname, env);
-    
-    qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, EVENTING_NAMESPACE, 
NULL);
-    notify_elem = axiom_element_get_first_child_with_qname(delivery_elem, env, 
qname,
-        delivery_node, &notify_node);
-    axutil_qname_free(qname, env);
-    
-    notify = axiom_element_get_text(notify_elem, env, notify_node);
-    
-    /* Expires */
-    qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, EVENTING_NAMESPACE, 
NULL);
-    expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &expires_node);
-    axutil_qname_free(qname, env);
-    
-    expires = axiom_element_get_text(expires_elem, env, expires_node);
-    
-    /* Filter */
-    qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
-    filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
-        sub_node, &filter_node);
-    axutil_qname_free(qname, env);
-    
-    filter = axiom_element_get_text(filter_elem, env, filter_node);
-    
+    if(sub_elem)
+    {
+        qname = axutil_qname_create(env, ELEM_NAME_ENDTO, EVENTING_NAMESPACE, 
NULL);
+        endto_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+            sub_node, &endto_node);
+        axutil_qname_free(qname, env);
+        if(endto_elem)
+        {
+            axis2_endpoint_ref_t *endto_ref = NULL;
+            endto = axiom_element_get_text(endto_elem, env, endto_node);
+            if(endto)
+            {
+                endto_ref = axis2_endpoint_ref_create(env, endto);
+                savan_subscriber_set_end_to(subscriber, env, endto_ref);
+            }
+        }
+    
+        /* Get Delivery element and read NotifyTo */
+        qname = axutil_qname_create(env, ELEM_NAME_DELIVERY, 
EVENTING_NAMESPACE, 
+            NULL);
+        delivery_elem = axiom_element_get_first_child_with_qname(sub_elem, 
env, 
+            qname, sub_node, &delivery_node);
+        axutil_qname_free(qname, env);
+   
+        if(delivery_elem)
+        {
+            qname = axutil_qname_create(env, ELEM_NAME_NOTIFYTO, 
+                EVENTING_NAMESPACE, NULL);
+            notify_elem = axiom_element_get_first_child_with_qname(
+                delivery_elem, env, qname, delivery_node, &notify_node);
+            axutil_qname_free(qname, env);
+            if(notify_elem)
+            {
+                axis2_endpoint_ref_t *notifyto_ref = NULL;
+                notifyto = axiom_element_get_text(notify_elem, env, 
notify_node);
+                if(notifyto)
+                {
+                    notifyto_ref = axis2_endpoint_ref_create(env, notifyto);
+                    savan_subscriber_set_notify_to(subscriber, env, 
notifyto_ref);
+                }
+            }
+        }
+    
+        /* Expires */
+        qname = axutil_qname_create(env, ELEM_NAME_EXPIRES, 
EVENTING_NAMESPACE, 
+            NULL);
+        expires_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
+            qname, sub_node, &expires_node);
+        axutil_qname_free(qname, env);
+        if(expires_elem)
+        {
+            expires = axiom_element_get_text(expires_elem, env, expires_node);
+            if(expires)
+                savan_subscriber_set_expires(subscriber, env, expires);
+        }
+    
+        /* Filter */
+        qname = axutil_qname_create(env, ELEM_NAME_FILTER, EVENTING_NAMESPACE, 
NULL);
+        filter_elem = axiom_element_get_first_child_with_qname(sub_elem, env, 
qname,
+            sub_node, &filter_node);
+        axutil_qname_free(qname, env);
+        if(filter_elem)
+        {
+            filter = axiom_element_get_text(filter_elem, env, filter_node);
+            if(filter)
+                savan_subscriber_set_filter(subscriber, env, filter);
+        }
+    } 
     {
-        axis2_char_t sql_insert[1024];
         savan_db_mgr_t *db_mgr = NULL;
 
         db_mgr = savan_db_mgr_create(env, conf_ctx);
-        sprintf(sql_insert, "insert into subscriber(id, end_to, notify_to,"\
-            "delivery_mode, expires, filter, topic_name, renewed) values('%s'"\
-            ", '%s', '%s', '%s', '%s', '%s', '%s', %d);", id, endto, notify, 
-            delivery_mode, expires, filter, topic, AXIS2_FALSE);
-        if(savan_db_mgr_insert(db_mgr, env, sql_insert))
+        if(savan_db_mgr_insert_subscriber(db_mgr, env, subscriber))
             AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
                 "[SAVAN] Subscriber %s added to the topic:%s", id, topic_url);
         else

Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c Tue Sep 18 18:57:53 
2007
@@ -135,7 +135,6 @@
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "dam_size:%d", size);
     for(i = 0; i < size; i++)
     {
-        axis2_char_t sql_insert[1024];
         savan_db_mgr_t *db_mgr = NULL;
         axutil_param_t *topic_param = NULL;
         axis2_char_t *topic_url_str = NULL;
@@ -147,9 +146,7 @@
             continue;
 
         db_mgr = savan_db_mgr_create(env, conf_ctx);
-        sprintf(sql_insert, "insert into topic(topic_name, topic_url) "\
-            "values('%s', '%s');", topic_name, topic_url_str); 
-        if(savan_db_mgr_insert(db_mgr, env, sql_insert))
+        if(savan_db_mgr_insert_topic(db_mgr, env, topic_name, topic_url_str))
             AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
                 "[SAVAN] Topic %s added", topic_url_str);
         else

Modified: webservices/savan/trunk/c/src/subscribers/savan_subscriber.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subscribers/savan_subscriber.c?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subscribers/savan_subscriber.c (original)
+++ webservices/savan/trunk/c/src/subscribers/savan_subscriber.c Tue Sep 18 
18:57:53 2007
@@ -392,9 +392,16 @@
 
     /* Setup options */
     options = axis2_options_create(env);
-    address = axis2_endpoint_ref_get_address(subscriber->notify_to, env);
-    to = axis2_endpoint_ref_create(env, address);
-    axis2_options_set_to(options, env, to);
+    if(subscriber->notify_to)
+    {
+        address = axis2_endpoint_ref_get_address(subscriber->notify_to, env);
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "address:%s", address);
+        if(address)
+        {
+            to = axis2_endpoint_ref_create(env, address);
+            axis2_options_set_to(options, env, to);
+        }
+    }
     axis2_options_set_xml_parser_reset(options, env, AXIS2_FALSE);
 
        /* Apply the filter, and check whether it evaluates to success */

Modified: webservices/savan/trunk/c/src/util/db_mgr.c
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/db_mgr.c?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/db_mgr.c (original)
+++ webservices/savan/trunk/c/src/util/db_mgr.c Tue Sep 18 18:57:53 2007
@@ -153,29 +153,29 @@
             endto_epr = axis2_endpoint_ref_create(env, argv[i]);
             savan_subscriber_set_end_to(subscriber, env, endto_epr);
         }
-        if(0 == axutil_strcmp(col_name[i], "notify_to"))
+        if(0 == axutil_strcmp(col_name[i], "notify_to") )
         {
             axis2_endpoint_ref_t *notify_epr = NULL;
             notify_epr = axis2_endpoint_ref_create(env, argv[i]);
             savan_subscriber_set_notify_to(subscriber, env, notify_epr);
         }
-        if(0 == axutil_strcmp(col_name[i], "delivery_mode"))
+        if(0 == axutil_strcmp(col_name[i], "delivery_mode") )
         {
             savan_subscriber_set_delivery_mode(subscriber, env, argv[i]);
         }
-        if(0 == axutil_strcmp(col_name[i], "expires"))
+        if(0 == axutil_strcmp(col_name[i], "expires") )
         {
             savan_subscriber_set_expires(subscriber, env, argv[i]);
         }
-        if(0 == axutil_strcmp(col_name[i], "filter"))
+        if(0 == axutil_strcmp(col_name[i], "filter") )
         {
             savan_subscriber_set_filter(subscriber, env, argv[i]);
         }
-        if(0 == axutil_strcmp(col_name[i], "topic_url"))
+        if(0 == axutil_strcmp(col_name[i], "topic_url") )
         {
             savan_subscriber_set_topic(subscriber, env, argv[i]);
         }
-        if(0 == axutil_strcmp(col_name[i], "renewed"))
+        if(0 == axutil_strcmp(col_name[i], "renewed") )
         {
             savan_subscriber_set_renew_status(subscriber, env, 
                 AXIS2_ATOI(argv[i]));
@@ -258,55 +258,203 @@
 }
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
-savan_db_mgr_insert(
+savan_db_mgr_insert_subscriber(
     savan_db_mgr_t *db_mgr,
     const axutil_env_t *env,
-    axis2_char_t *sql_stmt_insert)
+    savan_subscriber_t *subscriber)
 {
-    char *error_msg;
-    int rc = -1;
+    axis2_char_t *sql_insert = NULL;
     sqlite3 *dbconn = NULL;
-    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
-   
+    axis2_char_t *id = NULL;
+    axis2_char_t *endto = NULL;
+    axis2_char_t *notifyto = NULL;
+    axis2_char_t *delivery_mode = NULL;
+    axis2_char_t *expires = NULL;
+    axis2_char_t *filter = NULL;
+    axis2_char_t *topic = NULL;
+    axis2_char_t *topic_url = NULL;
+    axis2_bool_t renewed = AXIS2_FALSE;
+    axis2_endpoint_ref_t *endto_epr = NULL;
+    axis2_endpoint_ref_t *notifyto_epr = NULL;
+    int counter = 1;
+    struct sqlite3_stmt* insertqry;
+    sql_insert = AXIS2_MALLOC(env->allocator, 1028);
+    sprintf(sql_insert, "%s", "insert into subscriber(id");
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sql_insert:%s", 
sql_insert);
+
+    if(subscriber)
+    {
+        int i = 0;
+        id = savan_subscriber_get_id(subscriber, env);
+        endto_epr = savan_subscriber_get_end_to(subscriber, env);
+        if(endto_epr)
+        {
+            endto = (axis2_char_t *) axis2_endpoint_ref_get_address(endto_epr, 
+                env);
+            sprintf(sql_insert, "%s%s", sql_insert, ",end_to");
+            counter++;
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sql_insert:%s", 
sql_insert);
+        }
+        notifyto_epr = savan_subscriber_get_notify_to(subscriber, env);
+        if(notifyto_epr)
+        {
+            notifyto = (axis2_char_t *) axis2_endpoint_ref_get_address(
+                notifyto_epr, env);
+            sprintf(sql_insert, "%s%s", sql_insert, ",notify_to");   
+            counter++;
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sql_insert:%s", 
sql_insert);
+        }
+        delivery_mode = savan_subscriber_get_delivery_mode(subscriber, env);
+        if(delivery_mode)
+        {
+            sprintf(sql_insert, "%s%s", sql_insert, ",delivery_mode");   
+            counter++;
+        }
+        expires = savan_subscriber_get_expires(subscriber, env);
+        if(expires)
+        {
+            sprintf(sql_insert, "%s%s", sql_insert, ",expires");   
+            counter++;
+        }
+        filter = savan_subscriber_get_filter(subscriber, env);
+        if(filter)
+        {
+            sprintf(sql_insert, "%s%s", sql_insert, ",filter");   
+            counter++;
+        }
+        topic_url = savan_subscriber_get_topic(subscriber, env);
+        if(topic_url)
+        {
+            topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+            sprintf(sql_insert, "%s%s", sql_insert, ",topic_name");   
+            counter++;
+        }
+        renewed = savan_subscriber_get_renew_status(subscriber, env);
+        sprintf(sql_insert, "%s%s", sql_insert, ",renewed");   
+        sprintf(sql_insert, "%s%s", sql_insert, ") values(?");
+        for(i = 0; i < counter; i++)
+        {
+            sprintf(sql_insert, "%s%s", sql_insert, ",?");
+        }
+        sprintf(sql_insert, "%s%s", sql_insert, ");");
+    }
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "sql_insert:%s", sql_insert);
     dbconn = (sqlite3 *) savan_db_mgr_get_dbconn(
         db_mgr, env);
     if(!dbconn)
         return AXIS2_FAILURE;
-    rc = sqlite3_exec(dbconn, "BEGIN;", 0, 0, &error_msg);
-    if(rc == SQLITE_BUSY)
+
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] id:%s", id);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] endto:%s", endto);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] notifyto:%s", notifyto);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] delivery_mode:%s", 
delivery_mode);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] expires:%s", expires);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] filter:%s", filter);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] topic:%s", topic);
+    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[SAVANC] renewed:%d", renewed);
+    counter = 1;
+    if (sqlite3_prepare(dbconn, sql_insert, strlen(sql_insert), &insertqry, 
NULL))
     {
-        rc = savan_db_mgr_busy_handler(dbconn,
-            "BEGIN;", 0, 0, &error_msg, rc);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
     }
-    rc = sqlite3_exec(dbconn, sql_stmt_insert, 0, 0, &error_msg);
-    if(rc == SQLITE_BUSY)
-        rc = savan_db_mgr_busy_handler(dbconn, sql_stmt_insert, 
-            0, 0, &error_msg, rc);
-    if( rc != SQLITE_OK )
+    if (sqlite3_bind_text(insertqry, counter, id, strlen(id), SQLITE_STATIC))
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    if(endto)
     {
-        rc = sqlite3_exec(dbconn, "ROLLBACK;", 0, 0, &error_msg);
-        if(rc == SQLITE_BUSY)
-        {
-            rc = savan_db_mgr_busy_handler(dbconn,
-                "ROLLBACK;", 0, 0, &error_msg, rc);
-        }
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, endto, strlen(endto), 
+                SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    if(notifyto)
+    {
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, notifyto, strlen(notifyto), 
+                SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    if(delivery_mode)
+    {
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, delivery_mode, 
strlen(delivery_mode), SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    if(expires)
+    {
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, expires, strlen(expires), 
SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    if(filter)
+    {
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, filter, strlen(filter), 
SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    if(topic)
+    {
+        counter++;
+        if (sqlite3_bind_text(insertqry, counter, topic, strlen(topic), 
SQLITE_STATIC))
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    }
+    counter++;
+    if (sqlite3_bind_int(insertqry, counter, renewed))
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[SAVAN] Error Sql Insert Stmt: %s. Sql Insert Error: %s", 
-            sql_stmt_insert, error_msg);
-        sqlite3_free(error_msg);
-        sqlite3_close(dbconn);
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    if (sqlite3_step(insertqry) == SQLITE_DONE)
+        sqlite3_reset(insertqry);
+   
+    AXIS2_FREE(env->allocator, sql_insert);
+    sqlite3_finalize(insertqry);
+    sqlite3_close(dbconn);
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+savan_db_mgr_insert_topic(
+    savan_db_mgr_t *db_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *topic_name,
+    axis2_char_t *topic_url)
+{
+    axis2_char_t *sql_insert = NULL;
+    sqlite3 *dbconn = NULL;
+    struct sqlite3_stmt* insertqry;
+
+    sql_insert = "insert into topic(topic_name, topic_url) values(?, ?);";
+    dbconn = (sqlite3 *) savan_db_mgr_get_dbconn(
+        db_mgr, env);
+    if(!dbconn)
         return AXIS2_FAILURE;
-    }
-    rc = sqlite3_exec(dbconn, "COMMIT;", 0, 0, &error_msg);
-    if(rc == SQLITE_BUSY)
+
+    if (sqlite3_prepare(dbconn, sql_insert, strlen(sql_insert), &insertqry, 
NULL))
     {
-        rc = savan_db_mgr_busy_handler(dbconn,
-            "COMMIT;", 0, 0, &error_msg, rc);
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
     }
+    if (sqlite3_bind_text(insertqry, 1, topic_name, strlen(topic_name), 
SQLITE_STATIC))
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    if (sqlite3_bind_text(insertqry, 2, topic_url, strlen(topic_url), 
SQLITE_STATIC))
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[SAVAN] Sql Insert Error: %s", sqlite3_errmsg(dbconn));
+    if (sqlite3_step(insertqry) == SQLITE_DONE)
+        sqlite3_reset(insertqry);
+    
+    sqlite3_finalize(insertqry);
     sqlite3_close(dbconn);
     return AXIS2_SUCCESS;
 }
 
+
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_db_mgr_remove(
     savan_db_mgr_t *db_mgr,
@@ -617,7 +765,6 @@
     axis2_conf_ctx_t *conf_ctx)
 {
     axis2_char_t *sql_insert = NULL;
-    savan_db_mgr_t *db_mgr = NULL;
     axis2_char_t *id = NULL;
     axis2_char_t *endto = NULL;
     axis2_char_t *notifyto = NULL;
@@ -643,7 +790,6 @@
     topic_url = savan_subscriber_get_topic(subscriber, env);
     topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
     renewed = savan_subscriber_get_renew_status(subscriber, env);
-    db_mgr = savan_db_mgr_create(env, conf_ctx);
     sprintf(sql_insert, "insert into subscriber(id, end_to, notify_to,"\
         "delivery_mode, expires, filter, topic_name, renewed) values('%s'"\
         ", '%s', '%s', '%s', '%s', '%s', '%s', %d);", id, endto, notifyto, 
@@ -682,8 +828,11 @@
     expires = savan_subscriber_get_expires(subscriber, env);
     filter = savan_subscriber_get_filter(subscriber, env);
     topic_url = savan_subscriber_get_topic(subscriber, env);
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "topic_url:%s", topic_url);
-    topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+    if(topic_url)
+    {
+        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "topic_url:%s", topic_url);
+        topic = savan_util_get_topic_name_from_topic_url(env, topic_url);
+    }
     renewed = savan_subscriber_get_renew_status(subscriber, env);
     db_mgr = savan_db_mgr_create(env, conf_ctx);
     sprintf(sql_update, "update subscriber set end_to='%s', notify_to='%s',"\

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?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Tue Sep 18 18:57:53 2007
@@ -189,6 +189,10 @@
     axis2_char_t *payload_string = NULL;
     xmlDocPtr payload_doc = NULL;
     xsltStylesheetPtr xslt_template_filter = NULL;
+    axiom_xml_reader_t *reader = NULL;
+    axiom_stax_builder_t *om_builder = NULL;
+    axiom_document_t *document = NULL;
+    axiom_node_t *node = NULL;
 
        if(savan_subscriber_get_filter(subscriber, env) == NULL)
        {
@@ -206,19 +210,27 @@
     xmlDocPtr result_doc = (xmlDocPtr)xsltApplyStylesheet(xslt_template_filter,
         payload_doc, NULL);
 
-    xmlDocDumpMemory(result_doc, &buffer, &size);
+    if(result_doc)
+        xmlDocDumpMemory(result_doc, &buffer, &size);
 
-    axiom_xml_reader_t *reader = axiom_xml_reader_create_for_memory(env, 
-               (char*)buffer,axutil_strlen((char*)buffer), 
-               NULL, AXIS2_XML_PARSER_TYPE_BUFFER);
-    axiom_stax_builder_t *om_builder = axiom_stax_builder_create(env, reader);
-    axiom_document_t *document = axiom_stax_builder_get_document(om_builder, 
-               env);
-    axiom_node_t *node = axiom_document_build_all(document, env);
+    if(buffer)
+    {
+        reader = axiom_xml_reader_create_for_memory(env, 
+                   (char*)buffer,axutil_strlen((char*)buffer), 
+                   NULL, AXIS2_XML_PARSER_TYPE_BUFFER);
+    }
+    if(reader)
+        om_builder = axiom_stax_builder_create(env, reader);
+    if(om_builder)
+        document = axiom_stax_builder_get_document(om_builder, env);
+    if(document)
+        node = axiom_document_build_all(document, env);
 
-    axiom_stax_builder_free_self(om_builder, env);
+    if(om_builder)
+        axiom_stax_builder_free_self(om_builder, env);
     free(payload_string);
-       xmlFreeDoc(result_doc);
+    if(result_doc)
+           xmlFreeDoc(result_doc);
 
        if(node == NULL)
        {
@@ -427,37 +439,6 @@
             "[SAVAN] Failed to extract the service"); 
         return NULL;
     }
-    /*param = axis2_svc_get_param(pubs_svc, env, "SubscriptionMgrURL");
-    if(param)
-    {
-        axis2_char_t *subs_mgr_url = NULL;
-        if(param)
-        {
-            axis2_svc_client_t* svc_client = NULL;
-            axutil_param_t *svc_client_param = NULL;
-            axis2_endpoint_ref_t *topic_epr = NULL;
-            axis2_char_t *topic_url = NULL;
-
-            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);
-            svc_client_param = axis2_svc_get_param(pubs_svc, env, 
"svc_client");
-            if(svc_client_param)
-                svc_client = axutil_param_get_value(svc_client_param, env);
-            if(!svc_client)
-            {
-                svc_client = 
-                    (axis2_svc_client_t *) savan_util_get_svc_client(env);
-                svc_client_param = axutil_param_create(env, "svc_client", 
-                    svc_client);
-                axis2_svc_add_param(pubs_svc, env, svc_client_param);
-            }
-            subscriber = savan_util_get_subscriber_from_remote_subs_mgr(env, 
-                sub_id, subs_mgr_url, svc_client);
-        }
-    }
-    else*/
     { 
         axis2_char_t sql_retrieve[256];
         savan_db_mgr_t *db_mgr = NULL;
@@ -618,11 +599,9 @@
     {
         savan_db_mgr_t *db_mgr = NULL;
         axis2_conf_ctx_t *conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-        axis2_char_t *sql_insert = savan_db_mgr_create_insert_sql(env, 
-            subscriber, conf_ctx);
         db_mgr = savan_db_mgr_create(env, conf_ctx);
         if(db_mgr)
-            status = savan_db_mgr_insert(db_mgr, env, sql_insert);
+            status = savan_db_mgr_insert_subscriber(db_mgr, env, subscriber);
     }
     if(status)
     {
@@ -633,7 +612,7 @@
     }
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[SAVAN] End:savan_util_add_subscriber"); 
-    return AXIS2_SUCCESS;
+    return status;
 }
 
 axis2_status_t AXIS2_CALL
@@ -1365,7 +1344,10 @@
     axis2_char_t *topic_url)
 {
     axis2_char_t *topic = NULL;
-    topic  = axutil_strdup(env, axutil_rindex(topic_url, '/') + 1);
+    axis2_char_t *temp = NULL;
+    temp = axutil_rindex(topic_url, '/') + 1;
+    if(temp)
+        topic  = axutil_strdup(env, temp);
     return topic;
 }
 

Modified: webservices/savan/trunk/c/xdocs/index.html
URL: 
http://svn.apache.org/viewvc/webservices/savan/trunk/c/xdocs/index.html?rev=577129&r1=577128&r2=577129&view=diff
==============================================================================
--- webservices/savan/trunk/c/xdocs/index.html (original)
+++ webservices/savan/trunk/c/xdocs/index.html Tue Sep 18 18:57:53 2007
@@ -22,6 +22,9 @@
 <ol>
     <li>Support for WS-Eventing Specification August 2004.</li>
     <li>Support for Subscribe, Unsubscribe, Renew and GetStatus 
operations.</li>
+    <li>Support for subscription management endpoint which could be the
+     Event Source itself or separate subscription management endpoint.</li>
+     <li>Persistent storage for subscribers.</li>
     <li>Support for both SOAP 1.1 and 1.2.</li>
     <li>Samples to test scenarios.</li>
     <li>Interoperablity with java and .net.</li>


Reply via email to