Author: damitha
Date: Mon Sep 10 06:20:16 2007
New Revision: 574242
URL: http://svn.apache.org/viewvc?rev=574242&view=rev
Log:
Adding patch posted in Jira AXIS2C-688
Added:
webservices/savan/trunk/c/samples/AUTHORS
webservices/savan/trunk/c/samples/ChangeLog
webservices/savan/trunk/c/samples/NEWS
webservices/savan/trunk/c/samples/README
Modified:
webservices/savan/trunk/c/Makefile.am
webservices/savan/trunk/c/build.sh
webservices/savan/trunk/c/configure.ac
webservices/savan/trunk/c/include/savan_constants.h
webservices/savan/trunk/c/include/savan_error.h
webservices/savan/trunk/c/include/savan_msg_recv.h
webservices/savan/trunk/c/include/savan_subscriber.h
webservices/savan/trunk/c/include/savan_util.h
webservices/savan/trunk/c/samples/Makefile.am
webservices/savan/trunk/c/samples/client/subscriber/Makefile.am
webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
webservices/savan/trunk/c/samples/server/listener/Makefile.am
webservices/savan/trunk/c/samples/server/publisher/Makefile.am
webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c
webservices/savan/trunk/c/src/client/savan_client.c
webservices/savan/trunk/c/src/core/Makefile.am
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/subscribers/savan_subscriber.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?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/Makefile.am (original)
+++ webservices/savan/trunk/c/Makefile.am Mon Sep 10 06:20:16 2007
@@ -1,4 +1,4 @@
-SUBDIRS = src samples
+SUBDIRS = src
includedir=$(prefix)/include/axis2-1.1
include_HEADERS=$(top_builddir)/include/*.h
EXTRA_DIST = build.sh autogen.sh build xdocs
Modified: webservices/savan/trunk/c/build.sh
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/build.sh?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/build.sh (original)
+++ webservices/savan/trunk/c/build.sh Mon Sep 10 06:20:16 2007
@@ -1,4 +1,5 @@
#!/bin/bash
./autogen.sh
-./configure --prefix=${AXIS2C_HOME} --enable-static=no
--with-axis2=${AXIS2C_HOME}/include/axis2-1.1
-make
+./configure --prefix=$AXIS2C_HOME --enable-static=no
--with-axis2=${AXIS2C_HOME}/include/axis2-1.1 --enable-filtering=no
+make -j30
+make install
Modified: webservices/savan/trunk/c/configure.ac
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/configure.ac?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/configure.ac (original)
+++ webservices/savan/trunk/c/configure.ac Mon Sep 10 06:20:16 2007
@@ -75,12 +75,12 @@
*)
AC_MSG_RESULT(yes)
PKG_CHECK_MODULES(XSLT, libxslt)
- CFLAGS="$CFLAGS DSAVAN_FILTERING $XSLT_CFLAGS"
- LDFLAGS="$LDFLAGS $XSLT_LIBS"
+ CFLAGS="$CFLAGS -DSAVAN_FILTERING $XSLT_CFLAGS"
+ LDFLAGS="$LDFLAGS -lxslt"
;;
esac ],
- AC_MSG_RESULT(yes)
+ AC_MSG_RESULT(no)
)
@@ -95,8 +95,6 @@
AC_SUBST(UTILINC)
AC_SUBST(NEETHIINC)
AC_SUBST(XMLSCHEMAINC)
-AC_SUBST(XSLT_LIBS)
-AC_SUBST(XSLT_INCLUDES)
AC_CONFIG_FILES([Makefile \
src/Makefile \
@@ -107,13 +105,7 @@
src/subscribers/Makefile\
src/subs_mgr/Makefile\
src/data/Makefile\
- src/util/Makefile\
- samples/Makefile\
- samples/client/Makefile\
- samples/client/subscriber/Makefile\
- samples/server/Makefile\
- samples/server/publisher/Makefile\
- samples/server/listener/Makefile\
+ src/util/Makefile
])
AC_OUTPUT
Modified: webservices/savan/trunk/c/include/savan_constants.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_constants.h?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Mon Sep 10 06:20:16 2007
@@ -62,6 +62,7 @@
#define SAVAN_ACTIONS_RENEW_RESPONSE
"http://schemas.xmlsoap.org/ws/2004/08/eventing/RenewResponse"
#define SAVAN_ACTIONS_GET_STATUS
"http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus"
#define SAVAN_ACTIONS_GET_STATUS_RESPONSE
"http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatusResponse"
+#define SAVAN_ACTIONS_FAULT
"http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"
#define EVENTING_NAMESPACE "http://schemas.xmlsoap.org/ws/2004/08/eventing"
#define EVENTING_NS_PREFIX "wse"
@@ -81,6 +82,7 @@
#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"
+#define DEFAULT_FILTER_DIALECT "http://www.w3.org/TR/1999/REC-xpath-19991116"
/* Eventing element names */
#define ELEM_NAME_SUBSCRIBE "Subscribe"
@@ -109,6 +111,8 @@
#define SAVAN_OP_KEY_SUB_ID "savan_op_key_sub_id"
#define SAVAN_OP_KEY_EXPIRES "savan_op_key_expires"
#define SAVAN_OP_KEY_FILTER "savan_op_key_filter"
+#define SAVAN_OP_KEY_FILTER_DIALECT "savan_op_key_filter_dialect"
+
#define SAVAN_KEY_SUB_ID "savan_key_subscriber_id"
#define SAVAN_SUBSCRIBER_LIST "savan_subs_list"
Modified: webservices/savan/trunk/c/include/savan_error.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_error.h?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_error.h (original)
+++ webservices/savan/trunk/c/include/savan_error.h Mon Sep 10 06:20:16 2007
@@ -64,6 +64,58 @@
SAVAN_ERROR_LAST
} savan_error_codes_t;
+
+ typedef enum savan_fault_types
+ {
+ SAVAN_FAULT_DMRU = 0,
+ SAVAN_FAULT_IET,
+ SAVAN_FAULT_UET,
+ SAVAN_FAULT_FNS,
+ SAVAN_FAULT_FRU,
+ SAVAN_FAULT_ESUP,
+ SAVAN_FAULT_UTR,
+ SAVAN_FAULT_IM
+ }savan_fault_types_t;
+
+ #define SAVAN_FAULT_DMRU_CODE "s12:Sender"
+ #define SAVAN_FAULT_DMRU_SUB_CODE
"wse:DeliveryModeRequestedUnavailable."
+ #define SAVAN_FAULT_DMRU_REASON "The requested delivery mode is not
supported."
+ #define SAVAN_FAULT_DMRU_DETAIL ""
+
+ #define SAVAN_FAULT_IET_CODE "s12:Sender"
+ #define SAVAN_FAULT_IET_SUB_CODE "wse:InvalidExpirationTime"
+ #define SAVAN_FAULT_IET_REASON "The expiration time requested is
invalid."
+ #define SAVAN_FAULT_IET_DETAIL ""
+
+ #define SAVAN_FAULT_UET_CODE "s12:Sender"
+ #define SAVAN_FAULT_UET_SUB_CODE "wse:UnsupportedExpirationTime"
+ #define SAVAN_FAULT_UET_REASON "Only expiration durations are
supported."
+ #define SAVAN_FAULT_UET_DETAIL ""
+
+ #define SAVAN_FAULT_FNS_CODE "s12:Sender"
+ #define SAVAN_FAULT_FNS_SUB_CODE "wse:FilteringNotSupported"
+ #define SAVAN_FAULT_FNS_REASON "Filtering is not supported."
+ #define SAVAN_FAULT_FNS_DETAIL ""
+
+ #define SAVAN_FAULT_FRU_CODE "s12:Sender"
+ #define SAVAN_FAULT_FRU_SUB_CODE "wse:FilteringRequestedUnavailable"
+ #define SAVAN_FAULT_FRU_REASON "Requested filter dialect is not
supported."
+ #define SAVAN_FAULT_FRU_DETAIL ""
+
+ #define SAVAN_FAULT_IM_CODE "s12:Sender"
+ #define SAVAN_FAULT_IM_SUB_CODE "wse:InvalidMessages"
+ #define SAVAN_FAULT_IM_REASON "The messsage is not valid and cannot be
processed."
+ #define SAVAN_FAULT_IM_DETAIL "Invalid message."
+
+ #define SAVAN_FAULT_ESUP_CODE "s12:Receiver"
+ #define SAVAN_FAULT_ESUP_SUB_CODE "wse:EventSourceUnableToProcess"
+ #define SAVAN_FAULT_ESUP_REASON ""
+ #define SAVAN_FAULT_ESUP_DETAIL ""
+
+ #define SAVAN_FAULT_UTR_CODE "s12:Receiver"
+ #define SAVAN_FAULT_UTR_SUB_CODE "wse:UnableToRenew"
+ #define SAVAN_FAULT_UTR_REASON ""
+ #define SAVAN_FAULT_UTR_DETAIL ""
/** @} */
#ifdef __cplusplus
Modified: webservices/savan/trunk/c/include/savan_msg_recv.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_msg_recv.h?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_msg_recv.h (original)
+++ webservices/savan/trunk/c/include/savan_msg_recv.h Mon Sep 10 06:20:16 2007
@@ -48,6 +48,8 @@
savan_msg_recv_create(
const axutil_env_t *env);
+
+
/** @} */
#ifdef __cplusplus
Modified: webservices/savan/trunk/c/include/savan_subscriber.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_subscriber.h?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_subscriber.h (original)
+++ webservices/savan/trunk/c/include/savan_subscriber.h Mon Sep 10 06:20:16
2007
@@ -39,6 +39,39 @@
typedef struct savan_subscriber_t savan_subscriber_t;
+ /* Set the filter dialect
+ * @param subscriber pointer to the subscriber
+ * @param env pointer to the environment
+ * @param filter_dailect pointer to the dialect
+ */
+
+ axis2_status_t AXIS2_CALL
+ savan_subscriber_set_filter_dialect(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ const axis2_char_t *filter_dialect);
+
+ /* Get the filter dialect
+ * @param subscriber pointer to the filter dialect
+ * @param env pointer to the enviornment
+ */
+
+ axis2_char_t * AXIS2_CALL
+ savan_subscriber_get_filter_dialect(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env);
+
+ /*
+ * Get the delivery mode
+ * @param subscriber pointer to the subscriber
+ * @param env pointer to the environment
+ */
+
+ axis2_char_t * AXIS2_CALL
+ savan_subscriber_get_delivery_mode(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env);
+
/*
* Set the filter template into the subscriber.
* @param subscriber pointer to the subscriber
Modified: webservices/savan/trunk/c/include/savan_util.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Mon Sep 10 06:20:16 2007
@@ -42,20 +42,79 @@
*/
/**
+ * Create the fault envelope, to be sent
+ * to the client.
+ * @param msg_ctx msg context
+ * @param env environment
+ * @param code, fault code
+ * @param subcode, fault sub code
+ * @param reason, fault reason
+ * @param detail, fault deails.
+ */
+
+ axis2_status_t AXIS2_CALL
+ savan_create_fault_envelope(
+ axis2_msg_ctx_t *msg_ctx,
+ const axutil_env_t *env,
+ axis2_char_t *code,
+ axis2_char_t *subcode,
+ axis2_char_t *reason,
+ axis2_char_t *detail);
+
+ /**
+ * Build a savan fault message and send.
+ * @param env, pointer to the environment
+ * @param code, SOAP12:Sender
+ * @param subcode, fault subcode
+ * @param reason, fault reason
+ * @param detail, details about fault,
+ * and solution to avoid.
+ */
+
+ /*
+ int AXIS2_CALL
+ savan_util_send_fault_notification(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_char_t * code,
+ axis2_char_t * subcode,
+ axis2_char_t * reason,
+ axis2_char_t * detail);
+ */
+
+ /**
+ * Build a savan fault message
+ * @param env, pointer to the environment
+ * @param code, SOAP12:Sender
+ * @param subcode, fault subcode
+ * @param reason, fault reason
+ * @param detail, details about fault,
+ * and solution to avoid.
+ */
+
+ axiom_node_t * AXIS2_CALL
+ savan_util_build_fault_msg(
+ const axutil_env_t *env,
+ axis2_char_t * code,
+ axis2_char_t * subcode,
+ axis2_char_t * reason,
+ axis2_char_t * detail);
+
+ /**
* Apply the filter against the subscriber
* @param subscriber, pointer to the subscriber
* @param env, pointer to the environment
* @param payload, pointer to the payload.
- * returns the payload, after applying the
- * filter.
- * returns success, upon successful application
- * of the filter.
+ * returns true, if it evaluates to success.
+ * If so, send the entire msg into the sink.
+ * Else nothing is sent.
*/
- /*axiom_node_t * AXIS2_CALL
+
+ axis2_status_t AXIS2_CALL
savan_util_apply_filter(
savan_subscriber_t *subscriber,
const axutil_env_t *env,
- axiom_node_t *payload);*/
+ axiom_node_t *payload);
/**
* Set the filter template for the subscriber
@@ -65,11 +124,14 @@
* @param env, pointer to the environment.
* returns success, if operation is successful.
*/
- /*axis2_status_t AXIS2_CALL
+
+ #ifdef SAVAN_FILTERING
+ axis2_status_t AXIS2_CALL
savan_util_set_filter_template_for_subscriber(
savan_subscriber_t *subscriber,
savan_sub_processor_t *sub_processor,
- const axutil_env_t *env);*/
+ const axutil_env_t *env);
+ #endif
savan_message_types_t AXIS2_CALL
savan_util_get_message_type(
@@ -83,6 +145,7 @@
* @param msg_ctx pointer to message context
* @return the ID on success, else NULL
*/
+
axis2_char_t * AXIS2_CALL
savan_util_get_subscription_id_from_msg(
const axutil_env_t *env,
@@ -96,6 +159,7 @@
* @param sub_id pointer to subscription id
* @return a pointer to subscriber on success, else NULL
*/
+
savan_subscriber_t * AXIS2_CALL
savan_util_get_subscriber_from_msg(
const axutil_env_t *env,
@@ -111,6 +175,7 @@
* @param msg_ctx pointer to message context
* @return the store on success, else NULL
*/
+
axutil_hash_t * AXIS2_CALL
savan_util_get_subscriber_store(
const axutil_env_t *env,
@@ -126,6 +191,7 @@
* @param subscriber
* @return the store on success, else NULL
*/
+
axis2_status_t AXIS2_CALL
savan_util_add_subscriber(
const axutil_env_t *env,
@@ -142,6 +208,7 @@
* @param subscriber
* @return the store on success, else NULL
*/
+
axis2_status_t AXIS2_CALL
savan_util_remove_subscriber(
const axutil_env_t *env,
@@ -153,6 +220,7 @@
* @param env pointer to environment struct
* @return the expiry time on success, else NULL
*/
+
axis2_char_t * AXIS2_CALL
savan_util_get_expiry_time(
const axutil_env_t *env);
Added: webservices/savan/trunk/c/samples/AUTHORS
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/AUTHORS?rev=574242&view=auto
==============================================================================
(empty)
Added: webservices/savan/trunk/c/samples/ChangeLog
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/ChangeLog?rev=574242&view=auto
==============================================================================
(empty)
Modified: webservices/savan/trunk/c/samples/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/Makefile.am?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/Makefile.am Mon Sep 10 06:20:16 2007
@@ -1,3 +1,8 @@
SUBDIRS = server client
-EXTRA_DIST=client
+dist-hook:
+ rm -rf `find $(distdir)/ -type d -name .svn`
+ rm -rf `find $(distdir)/ -type d -name .deps`
+ rm -rf `find $(distdir)/ -type d -name .libs`
+
+EXTRA_DIST=codegen autogen.sh build.sh
Added: webservices/savan/trunk/c/samples/NEWS
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/NEWS?rev=574242&view=auto
==============================================================================
(empty)
Added: webservices/savan/trunk/c/samples/README
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/README?rev=574242&view=auto
==============================================================================
(empty)
Modified: webservices/savan/trunk/c/samples/client/subscriber/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/client/subscriber/Makefile.am?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/Makefile.am Mon Sep 10
06:20:16 2007
@@ -6,19 +6,16 @@
subscriber_LDADD = $(LDFLAGS) \
-L$(AXIS2C_HOME)/lib \
-L../../../src/core \
- ../../../../axis2c/util/src/libaxutil.la\
- ../../../../axis2c/axiom/src/om/libaxis2_axiom.la\
- ../../../../axis2c/src/core/engine/libaxis2_engine.la\
-
../../../../axis2c/src/core/transport/http/sender/libaxis2_http_sender.la \
-
../../../../axis2c/src/core/transport/http/receiver/libaxis2_http_receiver.la \
+ -laxutil \
+ -laxis2_axiom \
+ -laxis2_engine \
+ -laxis2_http_sender \
+ -laxis2_http_receiver \
-lpthread \
$(GUTHTHILA_LIBS) \
$(LIBXML2_LIBS)\
-lmod_savan
-INCLUDES = -I$(AXIS2C_HOME)/include \
- @AXIOMINC@ \
- @UTILINC@ \
+INCLUDES = -I$(AXIS2C_HOME)/include/axis2-1.1 \
@AXIS2INC@ \
- @NEETHIINC@ \
- -I../../../include
+ @SAVANINC@
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=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/subscriber.c (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/subscriber.c Mon Sep 10
06:20:16 2007
@@ -90,6 +90,12 @@
axutil_hash_set(savan_options, SAVAN_OP_KEY_NOTIFY_EPR,
AXIS2_HASH_KEY_STRING,
"http://localhost:9090/axis2/services/listener");
+ /*axutil_hash_set(savan_options, SAVAN_OP_KEY_FILTER,
AXIS2_HASH_KEY_STRING,
+ "//[EMAIL PROTECTED]'5']");
+
+ axutil_hash_set(savan_options, SAVAN_OP_KEY_FILTER_DIALECT,
AXIS2_HASH_KEY_STRING,
+ DEFAULT_FILTER_DIALECT);*/
+
/* Create a savan client */
savan_client = savan_client_create(env);
@@ -101,12 +107,17 @@
printf("Subscribe successful\n");
printf("Subscription ID: %s\n", savan_client_get_sub_id(savan_client));
}
+ else
+ {
+ printf("Subscription failed\n");
+ exit(0);
+ }
+
+ AXIS2_SLEEP(5);
- AXIS2_SLEEP(2);
printf("\n***************************************\n");
printf("Renewing subscription...\n");
- /* Set end point reference for assigned subscription manager */
address = savan_client_get_sub_url(savan_client);
printf("address:%s\n", address);
endpoint_ref = axis2_options_get_to(options, env);
@@ -121,7 +132,6 @@
printf("\n***************************************\n");
printf("Getting status of subscription...\n");
- /* Set end point reference for assigned subscription manager */
address = savan_client_get_sub_url(savan_client);
endpoint_ref = axis2_options_get_to(options, env);
axis2_endpoint_ref_set_address(endpoint_ref, env, address);
@@ -132,11 +142,8 @@
printf("GetStatus successful\n");
}
- AXIS2_SLEEP(5);
-
printf("\n***************************************\n");
printf("Unsubscribing...\n");
- /* Set end point reference for assigned subscription manager */
address = savan_client_get_sub_url(savan_client);
endpoint_ref = axis2_options_get_to(options, env);
axis2_endpoint_ref_set_address(endpoint_ref, env, address);
@@ -146,6 +153,7 @@
{
printf("Unsubscribe successful\n");
}
+
if (svc_client)
{
Modified: webservices/savan/trunk/c/samples/server/listener/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/listener/Makefile.am?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/listener/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/server/listener/Makefile.am Mon Sep 10
06:20:16 2007
@@ -6,10 +6,8 @@
SUBDIRS =
liblistener_la_SOURCES = listener.c listener_skeleton.c
liblistener_la_LIBADD =
-INCLUDES = -I$(AXIS2C_HOME)/include \
- @AXIOMINC@ \
+INCLUDES = -I$(AXIS2C_HOME)/include/axis2-1.1 \
@AXIS2INC@ \
- @UTILINC@ \
- @NEETHIINC@
+ @SAVANINC@
EXTRA_DIST=services.xml
Modified: webservices/savan/trunk/c/samples/server/publisher/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/publisher/Makefile.am?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/publisher/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/server/publisher/Makefile.am Mon Sep 10
06:20:16 2007
@@ -7,13 +7,11 @@
libpublisher_la_SOURCES = publisher.c publisher_skeleton.c
-libpublisher_la_LIBADD = $(top_builddir)/src/client/libsavan_client.la
+libpublisher_la_LIBADD = -L$(AXIS2C_HOME)/lib -lsavan_client
-INCLUDES = -I$(AXIS2C_HOME)/include \
+INCLUDES = -I$(AXIS2C_HOME)/include/axis2-1.1 \
-I$(top_builddir)/include \
- @AXIOMINC@ \
@AXIS2INC@ \
- @UTILINC@ \
- @NEETHIINC@
+ @SAVANINC@
EXTRA_DIST=services.xml
Modified:
webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c
(original)
+++ webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c Mon
Sep 10 06:20:16 2007
@@ -30,6 +30,7 @@
#include <axis2_options.h>
#include <axis2_op.h>
#include <axutil_qname.h>
+#include <savan_util.h>
#include <savan.h>
@@ -77,7 +78,7 @@
axiom_node_t* AXIS2_CALL
publisher_on_fault(axis2_svc_skeleton_t *svc_skeli,
- const axutil_env_t *env, axiom_node_t *node);
+ const axutil_env_t *env, axiom_node_t *node);
static void * AXIS2_THREAD_FUNC
publisher_worker_func(
@@ -227,12 +228,19 @@
axutil_env_t *main_env = NULL;
axutil_env_t *env = NULL;
axiom_namespace_t *test_ns = NULL;
- axiom_node_t *test_node = NULL;
axiom_element_t* test_elem = NULL;
+ axiom_node_t *test_node = NULL;
+ axiom_element_t* test_elem1 = NULL;
+ axiom_node_t *test_node1 = NULL;
+ axiom_element_t* test_elem2 = NULL;
+ axiom_node_t *test_node2 = NULL;
+ axiom_element_t* test_elem3 = NULL;
+ axiom_node_t *test_node3 = NULL;
axis2_conf_t *conf = NULL;
axis2_svc_t *svc = NULL;
axutil_param_t *param = NULL;
axis2_conf_ctx_t *conf_ctx = NULL;
+ axiom_attribute_t *test_data = NULL;
publisher_data_t *mydata = (publisher_data_t*)data;
main_env = mydata->env;
@@ -261,7 +269,17 @@
/* Build a payload and pass it to the savan publishing client */
test_ns = axiom_namespace_create (env,
"http://www.wso2.com/savan/c/publisher", "test");
test_elem = axiom_element_create(env, NULL, "notify", test_ns,
&test_node);
+ test_elem1 = axiom_element_create(env, test_node, "test1", NULL,
&test_node1);
+ test_elem2 = axiom_element_create(env, test_node1, "test2", NULL,
&test_node2);
+ test_elem3 = axiom_element_create(env, test_node1, "test3", NULL,
&test_node3);
+ test_data = axiom_attribute_create(env, "data", "5",
NULL);
+ axiom_element_add_attribute(test_elem3, env, test_data,
test_node3);
+
+ axiom_element_set_text(test_elem3, env, "test data3",
test_node3);
+
axiom_element_set_text(test_elem, env, "test data", test_node);
+
+ /*printf("%s\n", axiom_node_to_string(test_node,
env));*/
savan_publishing_client_publish(pub_client, env, test_node);
savan_publishing_client_free(pub_client, env);
}
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?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_client.c Mon Sep 10 06:20:16 2007
@@ -100,11 +100,13 @@
axis2_char_t *endto = NULL;
axis2_char_t *notify = NULL;
axis2_char_t *filter = NULL;
+ axis2_char_t *filter_dialect = NULL;
axis2_char_t *expires = NULL;
axiom_element_t *body_elem = NULL;
axis2_char_t *sub_id = NULL;
axis2_char_t *sub_url = NULL;
axis2_char_t *sub_elem_local_name = NULL;
+ axiom_attribute_t *dialect = NULL;
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] Start:savan_client_subscribe");
@@ -118,6 +120,7 @@
endto = axutil_hash_get(options, SAVAN_OP_KEY_ENDTO_EPR,
AXIS2_HASH_KEY_STRING);
notify = axutil_hash_get(options, SAVAN_OP_KEY_NOTIFY_EPR,
AXIS2_HASH_KEY_STRING);
filter = axutil_hash_get(options, SAVAN_OP_KEY_FILTER,
AXIS2_HASH_KEY_STRING);
+ filter_dialect = axutil_hash_get(options, SAVAN_OP_KEY_FILTER_DIALECT,
AXIS2_HASH_KEY_STRING);
expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES,
AXIS2_HASH_KEY_STRING);
/* create the body of the Subscribe request */
@@ -145,6 +148,19 @@
filter_elem = axiom_element_create(env, sub_node, ELEM_NAME_FILTER, ns,
&filter_node);
axiom_element_set_text(filter_elem, env, filter, filter_node);
+
+ if(filter_dialect == NULL)
+ {
+ dialect = axiom_attribute_create(env,
+ "Dialect", DEFAULT_FILTER_DIALECT, NULL);
+ }
+ else
+ {
+ dialect = axiom_attribute_create(env,
+ "Dialect", filter_dialect, NULL);
+ }
+
+ axiom_element_add_attribute(filter_elem, env, dialect ,filter_node);
/* send the Subscription and wait for the response */
reply = axis2_svc_client_send_receive(svc_client, env, sub_node);
Modified: webservices/savan/trunk/c/src/core/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/Makefile.am?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/Makefile.am (original)
+++ webservices/savan/trunk/c/src/core/Makefile.am Mon Sep 10 06:20:16 2007
@@ -7,7 +7,8 @@
INCLUDES = -I$(top_builddir)/include \
@AXIOMINC@ \
@UTILINC@ \
- @AXIS2INC@
+ @AXIS2INC@ \
+ @NEETHIINC@
libmod_savan_la_LIBADD = ../client/libsavan_client.la\
../handlers/libsavan_handlers.la\
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=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Mon Sep 10
06:20:16 2007
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+
#include <axutil_hash.h>
#include <axis2_svc.h>
#include <axiom_element.h>
@@ -34,7 +34,7 @@
};
/* Function Prototypes
********************************************************/
-
+
savan_subscriber_t * AXIS2_CALL
savan_sub_processor_create_subscriber_from_msg(
const axutil_env_t *env,
@@ -51,6 +51,16 @@
const axutil_env_t *env,
axis2_msg_ctx_t *msg_ctx);
+/* This method validates the subscription, and send a response (savan fault)
+ * incase if there is a fault
+ */
+
+axis2_bool_t AXIS2_CALL
+savan_sub_processor_validate_subscription(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx);
+
/* End of Function Prototypes
*************************************************/
/******************************************************************************/
@@ -108,12 +118,34 @@
savan_subscriber_set_expires(subscriber, env, expires);
/*Set the filter template file for the subscriber*/
- /*savan_util_set_filter_template_for_subscriber(subscriber, sub_processor,
env);*/
+
+ #ifdef SAVAN_FILTERING
+ savan_util_set_filter_template_for_subscriber(subscriber,
+ sub_processor, env);
+ #endif
/* Store sub id in msg ctx to be used by the msg receiver */
id = savan_subscriber_get_id(subscriber, env);
savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
- savan_util_add_subscriber(env, msg_ctx, subscriber);
+
+ /* Validate the subscription with the available information
+ * If the validation fails, then, don't add the subscriber into
+ * the list.
+ */
+
+ if (savan_sub_processor_validate_subscription(subscriber, env, msg_ctx)
+ == AXIS2_FAILURE)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] End:"
+ "savan_sub_processor_subscribe"
+ "encountered a subscription validation fault.");
+ return AXIS2_FAILURE;
+ }
+
+ if(savan_util_add_subscriber(env, msg_ctx, subscriber) == AXIS2_FAILURE)
+ {
+ return AXIS2_FAILURE;
+ }
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] End:savan_sub_processor_subscribe");
@@ -185,6 +217,10 @@
subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
if (!subscriber)
{
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_UTR_CODE, SAVAN_FAULT_UTR_SUB_CODE,
+ "Count find the subscriber.", NULL);
+
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to find the"
"subscriber");
return AXIS2_FAILURE;
@@ -200,6 +236,9 @@
renewable = savan_sub_processor_is_subscription_renewable(env, msg_ctx);
if (!renewable)
{
+ savan_util_create_fault_envelope(msg_ctx, env, SAVAN_FAULT_UTR_CODE,
+ SAVAN_FAULT_UTR_SUB_CODE, "Subscription can't be renewed.", NULL);
+
AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscription can not "
"be renewed");
savan_subscriber_set_renew_status(subscriber, env, AXIS2_FALSE);
@@ -272,6 +311,7 @@
axis2_char_t *notify = NULL;
axis2_char_t *expires = NULL;
axis2_char_t *filter = NULL;
+ axis2_char_t *filter_dialect = NULL;
axis2_char_t *topic = NULL;
axis2_endpoint_ref_t *endto_epr = NULL;
@@ -345,6 +385,7 @@
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);
@@ -373,8 +414,15 @@
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);
@@ -407,8 +455,6 @@
/******************************************************************************/
-/******************************************************************************/
-
axis2_bool_t AXIS2_CALL
savan_sub_processor_is_subscription_renewable(
const axutil_env_t *env,
@@ -417,4 +463,134 @@
/* TODO: */
return AXIS2_TRUE;
+}
+
+/******************************************************************************/
+
+axis2_bool_t AXIS2_CALL
+savan_sub_processor_validate_subscription(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ if(savan_sub_processor_validate_delivery_mode(subscriber,
+ env, msg_ctx) == AXIS2_FAILURE)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ if(savan_sub_processor_validate_expiration_time(subscriber,
+ env, msg_ctx) == AXIS2_FAILURE)
+ {
+ return AXIS2_FAILURE;
+ }
+ if(savan_sub_processor_validate_filter(subscriber,
+ env, msg_ctx) == AXIS2_FAILURE)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+/******************************************************************************/
+
+axis2_bool_t AXIS2_CALL
+savan_sub_processor_validate_delivery_mode(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ axis2_char_t *delivery_mode =
+ savan_subscriber_get_delivery_mode(subscriber, env);
+
+ /*if NULL we assueme, as default delivery mode*/
+ if(delivery_mode == NULL)
+ {
+ return AXIS2_SUCCESS;
+ }
+ else if(axutil_strcmp(delivery_mode, DEFAULT_DELIVERY_MODE) == 0)
+ {
+ return AXIS2_SUCCESS;
+ }
+ else
+ {
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_DMRU_CODE, SAVAN_FAULT_DMRU_SUB_CODE,
+ SAVAN_FAULT_DMRU_REASON, SAVAN_FAULT_DMRU_DETAIL);
+
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+/******************************************************************************/
+
+axis2_bool_t AXIS2_CALL
+savan_sub_processor_validate_expiration_time(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ /*
+ axis2_char_t *expires = savan_subscriber_get_expires(subscriber, env);
+ if(expires == NULL)
+ {
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_IET_CODE, SAVAN_FAULT_IET_SUB_CODE,
+ SAVAN_FAULT_IET_REASON, SAVAN_FAULT_IET_DETAIL);
+
+ return AXIS2_FAILURE;
+ }
+ else
+ {
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_UET_CODE, SAVAN_FAULT_UET_SUB_CODE,
+ SAVAN_FAULT_UET_REASON, SAVAN_FAULT_UET_DETAIL);
+
+ return AXIS2_FAILURE;
+ }
+ */
+ return AXIS2_SUCCESS;
+}
+
+/******************************************************************************/
+
+axis2_bool_t AXIS2_CALL
+savan_sub_processor_validate_filter(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ axis2_char_t *filter = NULL;
+ axis2_char_t *filter_dialect = NULL;
+
+ filter = savan_subscriber_get_filter(subscriber, env);
+ filter_dialect = savan_subscriber_get_filter_dialect(subscriber, env);
+
+ if(filter == NULL)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Filter is Null");
+ return AXIS2_SUCCESS;
+ }
+ else if(axutil_strcmp(filter_dialect, DEFAULT_FILTER_DIALECT) == 0)
+ {
+ #ifdef SAVAN_FILTERING
+ return AXIS2_SUCCESS;
+ #else
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_FNS_CODE, SAVAN_FAULT_FNS_SUB_CODE,
+ SAVAN_FAULT_FNS_REASON, "Server doesn't support filtering");
+
+ return AXIS2_FAILURE;
+ #endif
+ }
+ else
+ {
+ savan_util_create_fault_envelope(msg_ctx, env,
+ SAVAN_FAULT_FRU_CODE, SAVAN_FAULT_FRU_SUB_CODE,
+ SAVAN_FAULT_FRU_REASON, "Server does not support the
dialect.");
+ return AXIS2_FAILURE;
+ }
}
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?rev=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/handlers/savan_in_handler.c (original)
+++ webservices/savan/trunk/c/src/handlers/savan_in_handler.c Mon Sep 10
06:20:16 2007
@@ -81,7 +81,7 @@
AXIS2_ENV_CHECK( env, AXIS2_FAILURE);
AXIS2_PARAM_CHECK(env->error, msg_ctx, AXIS2_FAILURE);
-
+
svc = axis2_msg_ctx_get_svc(msg_ctx, env);
if (svc)
svc_name = axis2_svc_get_name(svc, env);
@@ -113,8 +113,16 @@
/* now call the appropriate method of the subscription processor */
if (msg_type == SAVAN_MSG_TYPE_SUB)
{
- from_client = AXIS2_TRUE;
- savan_sub_processor_subscribe(processor, env, msg_ctx);
+ if(savan_sub_processor_subscribe(processor, env, msg_ctx)
+ == AXIS2_FAILURE)
+ {
+ from_client = AXIS2_FAILURE;
+ return AXIS2_FAILURE;
+ }
+ else
+ {
+ from_client = AXIS2_TRUE;
+ }
}
else if (msg_type == SAVAN_MSG_TYPE_UNSUB)
{
@@ -123,8 +131,16 @@
}
else if (msg_type == SAVAN_MSG_TYPE_RENEW)
{
- from_client = AXIS2_TRUE;
- savan_sub_processor_renew_subscription(processor, env, msg_ctx);
+ if(savan_sub_processor_renew_subscription(processor,
+ env, msg_ctx) == AXIS2_FAILURE)
+ {
+ from_client = AXIS2_FAILURE;
+ return AXIS2_FAILURE;
+ }
+ else
+ {
+ from_client = AXIS2_TRUE;
+ }
}
else if (msg_type == SAVAN_MSG_TYPE_GET_STATUS)
{
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=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subscribers/savan_subscriber.c (original)
+++ webservices/savan/trunk/c/src/subscribers/savan_subscriber.c Mon Sep 10
06:20:16 2007
@@ -21,8 +21,11 @@
#include <axis2_svc_client.h>
#include <savan_subscriber.h>
+#include <savan_util.h>
-/*#include <libxslt/xsltutils.h>*/
+#ifdef SAVAN_FILTERING
+#include <libxslt/xsltutils.h>
+#endif
struct savan_subscriber_t
{
@@ -34,7 +37,11 @@
axis2_char_t *filter;
axis2_char_t *topic;
axis2_bool_t renewed;
- /*xsltStylesheetPtr xslt_filter;*/
+ axis2_char_t *filter_dialect;
+
+ #ifdef SAVAN_FILTERING
+ xsltStylesheetPtr xslt_filter;
+ #endif
};
/*****************************************************************************/
@@ -61,9 +68,12 @@
subscriber->delivery_mode = NULL;
subscriber->expires = NULL;
subscriber->filter = NULL;
+ subscriber->filter_dialect = NULL;
subscriber->topic = NULL;
subscriber->renewed = AXIS2_FALSE;
- /*subscriber->xslt_filter = NULL;*/
+ #ifdef SAVAN_FILTERING
+ subscriber->xslt_filter = NULL;
+ #endif
return subscriber;
}
@@ -83,26 +93,34 @@
AXIS2_FREE(env->allocator, subscriber->filter);
if(subscriber->topic)
AXIS2_FREE(env->allocator, subscriber->topic);
- /*if(subscriber->xslt_filter)
- AXIS2_FREE(env->allocator, subscriber->xslt_filter);*/
+ #ifdef SAVAN_FILTERING
+ if(subscriber->xslt_filter)
+ AXIS2_FREE(env->allocator, subscriber->xslt_filter);
+ #endif
+ if(subscriber->filter_dialect)
+ AXIS2_FREE(env->allocator, subscriber->filter_dialect);
AXIS2_FREE(env->allocator, subscriber);
}
/******************************************************************************/
-/*void* AXIS2_CALL
+void* AXIS2_CALL
savan_subscriber_get_filter_template(
savan_subscriber_t *subscriber,
const axutil_env_t *env)
{
AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ #ifdef SAVAN_FILTERING
return subscriber->xslt_filter;
-}*/
+ #else
+ return NULL;
+ #endif
+}
/******************************************************************************/
-/*axis2_status_t AXIS2_CALL
+axis2_status_t AXIS2_CALL
savan_subscriber_set_filter_template(
savan_subscriber_t *subscriber,
const axutil_env_t *env,
@@ -115,14 +133,16 @@
return AXIS2_SUCCESS;
}
+ #ifdef SAVAN_FILTERING
if (subscriber->xslt_filter != NULL)
{
AXIS2_FREE(env->allocator, subscriber->filter);
subscriber->xslt_filter = NULL;
}
subscriber->xslt_filter = (xsltStylesheetPtr)xslt_filter_template;
+ #endif
return AXIS2_SUCCESS;
-}*/
+}
/******************************************************************************/
@@ -162,6 +182,36 @@
/******************************************************************************/
axis2_status_t AXIS2_CALL
+savan_subscriber_set_filter_dialect
+ (savan_subscriber_t *subscriber,
+ const axutil_env_t *env,
+ const axis2_char_t *filter_dialect)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ if(subscriber->filter_dialect != NULL)
+ {
+ AXIS2_FREE(env->allocator, subscriber->filter_dialect);
+ subscriber->filter_dialect = NULL;
+ }
+
+ subscriber->filter_dialect = axutil_strdup(env, filter_dialect);
+ return AXIS2_SUCCESS;
+}
+
+/******************************************************************************/
+
+axis2_char_t * AXIS2_CALL
+savan_subscriber_get_filter_dialect(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env)
+{
+ return subscriber->filter_dialect;
+}
+
+/******************************************************************************/
+
+axis2_status_t AXIS2_CALL
savan_subscriber_set_end_to(
savan_subscriber_t *subscriber,
const axutil_env_t *env,
@@ -174,6 +224,8 @@
return AXIS2_SUCCESS;
}
+/******************************************************************************/
+
axis2_endpoint_ref_t *AXIS2_CALL
savan_subscriber_get_end_to(
savan_subscriber_t *subscriber,
@@ -197,6 +249,8 @@
return AXIS2_SUCCESS;
}
+/******************************************************************************/
+
axis2_endpoint_ref_t *AXIS2_CALL
savan_subscriber_get_notify_to(
savan_subscriber_t *subscriber,
@@ -230,6 +284,18 @@
/******************************************************************************/
+axis2_char_t * AXIS2_CALL
+savan_subscriber_get_delivery_mode(
+ savan_subscriber_t *subscriber,
+ const axutil_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ return subscriber->delivery_mode;
+}
+
+/******************************************************************************/
+
axis2_status_t AXIS2_CALL
savan_subscriber_set_expires(
savan_subscriber_t *subscriber,
@@ -322,15 +388,22 @@
axis2_options_set_to(options, env, to);
axis2_options_set_xml_parser_reset(options, env, AXIS2_FALSE);
- /* Apply the filter to the payload */
- /*payload = (axiom_node_t*)savan_util_apply_filter(subscriber, env,
payload);*/
+ /* Apply the filter, and check whether it evaluates to success */
+ #ifdef SAVAN_FILTERING
+ if (savan_util_apply_filter(subscriber, env, payload) == AXIS2_FAILURE)
+ {
+ return AXIS2_SUCCESS;
+ }
+ #endif
+
/* Set service client options */
axis2_svc_client_set_options(svc_client, env, options);
axis2_svc_client_send_robust(svc_client, env, payload);
if(svc_client)
axis2_svc_client_free(svc_client, env);
+
AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI,
"[savan] End:savan_subscriber_publish");
return status;
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=574242&r1=574241&r2=574242&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/savan_util.c (original)
+++ webservices/savan/trunk/c/src/util/savan_util.c Mon Sep 10 06:20:16 2007
@@ -17,26 +17,29 @@
#include <axis2_msg_info_headers.h>
#include <axis2_options.h>
#include <axis2_svc_client.h>
+#include <axis2_engine.h>
+#include <axis2_core_utils.h>
#include <axis2_endpoint_ref.h>
#include <platforms/axutil_platform_auto_sense.h>
#include <axiom_soap.h>
+#include <axiom_soap_const.h>
+#include <axiom_soap_envelope.h>
#include <savan_util.h>
+#include <savan_msg_recv.h>
#include <savan_error.h>
-/*#include <libxslt/xsltutils.h>*/
+#ifdef SAVAN_FILTERING
+#include <libxslt/xsltutils.h>
+#endif
/******************************************************************************/
-/*axis2_status_t
+#ifdef SAVAN_FILTERING
+axis2_status_t
savan_util_update_filter_template(
xmlNodeSetPtr nodes,
- const xmlChar* value);*/
-
-axiom_node_t*
-savan_util_create_fault_msg(axis2_char_t *code,
- axis2_char_t* subcode, axis2_char_t *reason,
- axis2_char_t* details,
- const axutil_env_t *env);
+ const xmlChar* value);
+#endif
static axis2_status_t
add_subscriber_to_remote_subs_mgr(
@@ -89,7 +92,59 @@
const axutil_env_t *env,
axiom_node_t *subs_list_node);
-/*axis2_status_t AXIS2_CALL
+/*
+axis2_status_t AXIS2_CALL
+savan_util_send_invalid_subscription_info_failure(
+ const axutil_env_t *env,
+ axis2_msg_ctx_t *msg_ctx)
+ */
+
+axis2_status_t AXIS2_CALL
+savan_util_create_fault_envelope(
+ axis2_msg_ctx_t *msg_ctx,
+ const axutil_env_t *env,
+ axis2_char_t *code,
+ axis2_char_t *subcode,
+ axis2_char_t *reason,
+ axis2_char_t *detail)
+{
+
+ axiom_soap_envelope_t *envelope = NULL;
+ /*axiom_node_t* detail_om_node = NULL;
+ axiom_element_t * detail_om_ele = NULL;
+ axis2_msg_info_headers_t* info_header = NULL;
+ int soap_version = AXIOM_SOAP12;
+ axutil_array_list_t *sub_codes = NULL;
+ axiom_namespace_t *soap_ns = NULL;
+ axiom_namespace_t *ns1 = NULL;*/
+ axiom_soap_body_t *body = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_node_t *fault_node = NULL;
+
+
+ fault_node = savan_util_build_fault_msg(env, code, subcode, reason,
detail);
+ envelope = axiom_soap_envelope_create_default_soap_envelope(env,
+ AXIOM_SOAP12);
+
+ /*info_header = axis2_msg_ctx_get_msg_info_headers(msg_ctx, env);
+ axis2_msg_info_headers_set_action(info_header, env, SAVAN_ACTIONS_FAULT);
+
+ axis2_msg_ctx_set_msg_info_headers(msg_ctx, env, info_header);*/
+
+ body = axiom_soap_envelope_get_body(envelope, env);
+ body_node = axiom_soap_body_get_base_node(body, env);
+
+ fault_node = savan_util_build_fault_msg(env, code,
+ subcode, reason, detail);
+
+ axiom_node_add_child(body_node , env, fault_node);
+ axis2_msg_ctx_set_fault_soap_envelope(msg_ctx, env, envelope);
+
+ return AXIS2_SUCCESS;
+}
+
+#ifdef SAVAN_FILTERING
+axis2_status_t AXIS2_CALL
savan_util_set_filter_template_for_subscriber(
savan_subscriber_t *subscriber,
savan_sub_processor_t *sub_processor,
@@ -118,9 +173,11 @@
xmlXPathFreeContext(xpathCtx);
return AXIS2_SUCCESS;
-}*/
+}
+#endif
-/*axiom_node_t * AXIS2_CALL
+#ifdef SAVAN_FILTERING
+axis2_status_t AXIS2_CALL
savan_util_apply_filter(
savan_subscriber_t *subscriber,
const axutil_env_t *env,
@@ -134,7 +191,7 @@
if(savan_subscriber_get_filter(subscriber, env) == NULL)
{
- return payload;
+ return AXIS2_SUCCESS;
}
payload_string = axiom_node_to_string(payload, env);
@@ -158,20 +215,22 @@
env);
axiom_node_t *node = axiom_document_build_all(document, env);
- if(node == NULL)
- {
- node = savan_util_create_fault_msg("CODE",
"FilteringRequestedUnavailabe",
- "Requested Filter dialect is not supported", "DETAILS",
env);
- }
-
axiom_stax_builder_free_self(om_builder, env);
- axiom_node_free_tree(payload, env);
free(payload_string);
xmlFreeDoc(result_doc);
- return node;
+ if(node == NULL)
+ {
+ return AXIS2_FAILURE;
+ }
+ else
+ {
+ return AXIS2_SUCCESS;
+ }
}
+#endif
+#ifdef SAVAN_FILTERING
axis2_status_t
savan_util_update_filter_template(
xmlNodeSetPtr nodes,
@@ -187,35 +246,52 @@
nodes->nodeTab[i] = NULL;
}
return AXIS2_SUCCESS;
-}*/
+}
+#endif
-axiom_node_t*
-savan_util_create_fault_msg(axis2_char_t *code,
- axis2_char_t* subcode, axis2_char_t *reason,
- axis2_char_t* details,
- const axutil_env_t *env)
+axiom_node_t * AXIS2_CALL
+savan_util_build_fault_msg(
+ const axutil_env_t *env,
+ axis2_char_t * code,
+ axis2_char_t * subcode,
+ axis2_char_t * reason,
+ axis2_char_t * detail)
{
axiom_node_t *fault_node = NULL;
axiom_element_t *fault_ele = NULL;
- axiom_node_t *fault_reason_node = NULL;
- axiom_element_t *fault_reason_ele = NULL;
- axiom_node_t *fault_code_node = NULL;
- axiom_element_t *fault_code_ele = NULL;
-
- /*
- axiom_node_t *fault_subcode_node = NULL;
- axiom_element_t *fault_subcode_ele = NULL;
- axiom_node_t *fault_details_node = NULL;
- axiom_element_t *fault_details_ele = NULL;
- */
+ axiom_node_t *code_node = NULL;
+ axiom_element_t *code_ele = NULL;
+ axiom_node_t *code_value_node = NULL;
+ axiom_element_t *code_value_ele = NULL;
+ axiom_node_t *sub_code_node = NULL;
+ axiom_element_t *sub_code_ele = NULL;
+ axiom_node_t *sub_code_value_node = NULL;
+ axiom_element_t *sub_code_value_ele = NULL;
+ axiom_node_t *reason_node = NULL;
+ axiom_element_t *reason_ele = NULL;
+ axiom_node_t *reason_text_node = NULL;
+ axiom_element_t *reason_text_ele = NULL;
+ axiom_node_t *detail_node = NULL;
+ axiom_element_t *detail_ele = NULL;
fault_ele = axiom_element_create(env, NULL, "Fault", NULL, &fault_node);
- fault_code_ele = axiom_element_create(env, fault_node, "faultcode",
- NULL, &fault_code_node);
- axiom_element_set_text(fault_code_ele, env, subcode, fault_code_node);
- fault_reason_ele = axiom_element_create(env, fault_node, "faultstring",
- NULL, &fault_reason_node);
- axiom_element_set_text(fault_reason_ele, env, reason, fault_reason_node);
+
+ code_ele = axiom_element_create(env, fault_node, "Code",
+ NULL, &code_node);
+ code_value_ele = axiom_element_create(env,
+ code_node, "Value", NULL, &code_value_node);
+ axiom_element_set_text(code_value_ele, env, code, code_value_node);
+ sub_code_ele = axiom_element_create(env,
+ code_node, "Subcode", NULL, &sub_code_node);
+ sub_code_value_ele = axiom_element_create(env,
+ sub_code_node, "Value", NULL, &sub_code_value_node);
+ axiom_element_set_text(sub_code_value_ele, env, subcode,
sub_code_value_node);
+ reason_ele = axiom_element_create(env, fault_node, "Reason", NULL,
&reason_node);
+ reason_text_ele = axiom_element_create(env,
+ reason_node, "Text", NULL, &reason_text_node);
+ axiom_element_set_text(reason_text_ele, env, reason, reason_text_node);
+ detail_ele = axiom_element_create(env, fault_node, "Detail", NULL,
&detail_node);
+ axiom_element_set_text(detail_ele, env, detail, detail_node);
return fault_node;
}