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


Reply via email to