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, ¬ify_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, ¬ify_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, ¬ify_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, ¬ify_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>