You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by da...@apache.org on 2008/08/30 10:09:32 UTC

svn commit: r690481 - in /webservices/sandesha/trunk/c: include/ src/client/ src/wsrm/

Author: damitha
Date: Sat Aug 30 01:09:31 2008
New Revision: 690481

URL: http://svn.apache.org/viewvc?rev=690481&view=rev
Log:
Close sequence is now sent with LastMsgNumber element

Added:
    webservices/sandesha/trunk/c/include/sandesha2_last_msg_number.h
    webservices/sandesha/trunk/c/src/wsrm/last_msg_number.c
Modified:
    webservices/sandesha/trunk/c/include/sandesha2_client.h
    webservices/sandesha/trunk/c/include/sandesha2_close_seq.h
    webservices/sandesha/trunk/c/include/sandesha2_constants.h
    webservices/sandesha/trunk/c/src/client/client.c
    webservices/sandesha/trunk/c/src/wsrm/Makefile.am
    webservices/sandesha/trunk/c/src/wsrm/close_seq.c

Modified: webservices/sandesha/trunk/c/include/sandesha2_client.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_client.h?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_client.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_client.h Sat Aug 30 01:09:31 2008
@@ -129,13 +129,15 @@
 sandesha2_client_close_seq_with_svc_client(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
-    axis2_callback_t *callback);
+    axis2_callback_t *callback,
+    long last_msg_num);
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
 sandesha2_client_close_seq_with_svc_client_and_seq_key(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
-    axis2_char_t *seq_key);
+    axis2_char_t *seq_key,
+    long last_msg_num);
 
 /**
  * This blocks the system until the messages sent have been completed.

Modified: webservices/sandesha/trunk/c/include/sandesha2_close_seq.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_close_seq.h?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_close_seq.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_close_seq.h Sat Aug 30 01:09:31 2008
@@ -27,6 +27,7 @@
 #include <axiom_soap_envelope.h>
 #include <sandesha2_error.h>
 #include <sandesha2_identifier.h>
+#include <sandesha2_last_msg_number.h>
 
 
 #ifdef __cplusplus
@@ -95,6 +96,17 @@
     const axutil_env_t *env, 
     void *om_node);
  
+axis2_status_t AXIS2_CALL                 
+sandesha2_close_seq_set_last_msg_number(
+    sandesha2_close_seq_t *close_seq,
+    const axutil_env_t *env, 
+    sandesha2_last_msg_number_t *last_msg_number);
+
+sandesha2_last_msg_number_t * AXIS2_CALL
+sandesha2_close_seq_get_last_msg_number(
+    sandesha2_close_seq_t *close_seq,
+    const axutil_env_t *env);
+
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/sandesha/trunk/c/include/sandesha2_constants.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_constants.h?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_constants.h (original)
+++ webservices/sandesha/trunk/c/include/sandesha2_constants.h Sat Aug 30 01:09:31 2008
@@ -107,6 +107,8 @@
     #define SANDESHA2_WSMC_COMMON_NS_PREFIX_RM  "wsmc"
 
 	#define SANDESHA2_WSRM_COMMON_MSG_NUMBER  "MessageNumber"
+	
+    #define SANDESHA2_WSRM_COMMON_LAST_MSG_NUMBER  "LastMsgNumber"
 
 	#define SANDESHA2_WSRM_COMMON_LAST_MSG  "LastMessage"
 

Added: webservices/sandesha/trunk/c/include/sandesha2_last_msg_number.h
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/include/sandesha2_last_msg_number.h?rev=690481&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/include/sandesha2_last_msg_number.h (added)
+++ webservices/sandesha/trunk/c/include/sandesha2_last_msg_number.h Sat Aug 30 01:09:31 2008
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#ifndef SANDESHA2_LAST_MSG_NUMBER_H
+#define SANDESHA2_LAST_MSG_NUMBER_H
+
+/**
+  * @file sandesha2_last_msg_number.h
+  * @brief 
+  */
+
+#include <sandesha2_error.h>
+#include <axutil_env.h>
+#include <axiom_node.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/** @defgroup sandesha2_last_msg_number
+ * @ingroup sandesha2_wsrm
+ * @{
+ */
+typedef struct sandesha2_last_msg_number_t sandesha2_last_msg_number_t;
+ 
+/**
+ * @brief Last Msg Number ops struct
+ * Encapsulator struct for ops of sandesha2_last_msg_number
+ */
+
+/**
+ * @brief sandesha2_last_msg_number
+ *    sandesha2_last_msg_number
+ */
+
+AXIS2_EXTERN sandesha2_last_msg_number_t* AXIS2_CALL
+sandesha2_last_msg_number_create(
+    const axutil_env_t *env,
+    axis2_char_t *ns_value);
+
+axis2_status_t AXIS2_CALL
+sandesha2_last_msg_number_free_void_arg(
+    void *msg_num,
+    const axutil_env_t *env);
+
+axis2_status_t AXIS2_CALL 
+sandesha2_last_msg_number_free(
+    sandesha2_last_msg_number_t *msg_num, 
+	const axutil_env_t *env);
+
+axis2_char_t* AXIS2_CALL 
+sandesha2_last_msg_number_get_namespace_value(
+    sandesha2_last_msg_number_t *msg_num,
+	const axutil_env_t *env);
+
+axis2_status_t AXIS2_CALL                 
+sandesha2_last_msg_number_set_last_msg_number(
+    sandesha2_last_msg_number_t *msg_num,
+   	const axutil_env_t *env, 
+    long value);
+                    	
+long AXIS2_CALL
+sandesha2_last_msg_number_get_last_msg_number(
+    sandesha2_last_msg_number_t *msg_num,
+   	const axutil_env_t *env);
+
+void* AXIS2_CALL 
+sandesha2_last_msg_number_from_om_node(
+    sandesha2_last_msg_number_t *msg_num,
+   	const axutil_env_t *env, 
+    axiom_node_t *om_node);
+    
+axiom_node_t* AXIS2_CALL 
+sandesha2_last_msg_number_to_om_node(
+    sandesha2_last_msg_number_t *msg_num,
+   	const axutil_env_t *env, 
+    void *om_node);
+
+
+/** @} */
+#ifdef __cplusplus
+}
+#endif
+
+#endif                          /* SANDESHA2_LAST_MSG_NUMBER_H */
+

Modified: webservices/sandesha/trunk/c/src/client/client.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/client/client.c?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/client/client.c (original)
+++ webservices/sandesha/trunk/c/src/client/client.c Sat Aug 30 01:09:31 2008
@@ -29,6 +29,7 @@
 #include <sandesha2_utils.h>
 #include <sandesha2_ack_requested.h>
 #include <sandesha2_identifier.h>
+#include <sandesha2_last_msg_number.h>
 #include <sandesha2_close_seq.h>
 #include <sandesha2_terminate_seq.h>
 #include <sandesha2_ack_mgr.h>
@@ -81,7 +82,8 @@
 sandesha2_client_configure_close_seq(
         const axutil_env_t *env,
         axis2_options_t *options, 
-        axis2_conf_ctx_t *conf_ctx);
+        axis2_conf_ctx_t *conf_ctx,
+        long last_msg_num);
 
 static axis2_bool_t
 sandesha2_client_is_seq_terminated(
@@ -798,7 +800,8 @@
 sandesha2_client_close_seq_with_svc_client(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
-    axis2_callback_t *callback)
+    axis2_callback_t *callback,
+    long last_msg_num)
 {
     axis2_svc_ctx_t *svc_ctx = NULL;
     axis2_options_t *options = NULL;
@@ -848,7 +851,7 @@
 
     rm_namespc_value = sandesha2_spec_specific_consts_get_rm_ns_val(env, rm_spec_version);
     conf_ctx =  axis2_svc_ctx_get_conf_ctx(svc_ctx, env);
-    close_envelope = sandesha2_client_configure_close_seq(env, options, conf_ctx);
+    close_envelope = sandesha2_client_configure_close_seq(env, options, conf_ctx, last_msg_num);
     body = axiom_soap_envelope_get_body(close_envelope, env);
     node = axiom_soap_body_get_base_node(body, env);
     element = axiom_node_get_data_element(node, env);
@@ -888,7 +891,8 @@
 sandesha2_client_close_seq_with_svc_client_and_seq_key(
     const axutil_env_t *env,
     axis2_svc_client_t *svc_client,
-    axis2_char_t *seq_key)
+    axis2_char_t *seq_key,
+    long last_msg_num)
 {
     axis2_options_t *options = NULL;
     axutil_property_t *property = NULL;
@@ -911,7 +915,7 @@
 
     property = axutil_property_create_with_args(env, 0, 0, 0, seq_key);
     axis2_options_set_property(options, env, SANDESHA2_CLIENT_SEQ_KEY, property);
-    sandesha2_client_close_seq_with_svc_client(env, svc_client, NULL);
+    sandesha2_client_close_seq_with_svc_client(env, svc_client, NULL, last_msg_num);
     axis2_options_set_property(options, env, SANDESHA2_CLIENT_SEQ_KEY, old_property);
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
@@ -1296,7 +1300,8 @@
 sandesha2_client_configure_close_seq(
     const axutil_env_t *env,
     axis2_options_t *options, 
-    axis2_conf_ctx_t *conf_ctx)
+    axis2_conf_ctx_t *conf_ctx,
+    long last_msg_num)
 {
     axis2_endpoint_ref_t *to_epr = NULL;
     axis2_char_t *to = NULL;
@@ -1313,6 +1318,7 @@
     axis2_char_t *rm_spec_version = NULL;
     axiom_soap_envelope_t *dummy_envelope = NULL;
     sandesha2_identifier_t *identifier = NULL;
+    sandesha2_last_msg_number_t *last_msg_number = NULL;
     sandesha2_seq_report_t *seq_report = NULL;
     axis2_conf_t *conf = NULL;
     axutil_property_t *property = NULL;
@@ -1441,6 +1447,9 @@
     identifier = sandesha2_identifier_create(env, rm_ns_value);
     sandesha2_identifier_set_identifier(identifier, env, seq_id);
     sandesha2_close_seq_set_identifier(close_seq, env, identifier);
+    last_msg_number = sandesha2_last_msg_number_create(env, rm_ns_value);
+    sandesha2_last_msg_number_set_last_msg_number(last_msg_number, env, last_msg_num);
+    sandesha2_close_seq_set_last_msg_number(close_seq, env, last_msg_number);
     sandesha2_close_seq_to_soap_envelope(close_seq, env, dummy_envelope);
 
     if(seq_prop_mgr)

Modified: webservices/sandesha/trunk/c/src/wsrm/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/wsrm/Makefile.am?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/wsrm/Makefile.am (original)
+++ webservices/sandesha/trunk/c/src/wsrm/Makefile.am Sat Aug 30 01:09:31 2008
@@ -14,6 +14,7 @@
                                expires.c\
                                fault_code.c\
                                msg_number.c\
+                               last_msg_number.c\
                                last_msg.c\
                                ack_requested.c\
                                close_seq.c\

Modified: webservices/sandesha/trunk/c/src/wsrm/close_seq.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/wsrm/close_seq.c?rev=690481&r1=690480&r2=690481&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/wsrm/close_seq.c (original)
+++ webservices/sandesha/trunk/c/src/wsrm/close_seq.c Sat Aug 30 01:09:31 2008
@@ -25,6 +25,7 @@
 struct sandesha2_close_seq_t
 {
 	sandesha2_identifier_t *identifier;
+	sandesha2_last_msg_number_t *last_msg_number;
 	axis2_char_t *ns_val;
 };
                    	
@@ -56,6 +57,7 @@
 
     close_seq->ns_val = NULL;
     close_seq->identifier = NULL;
+    close_seq->last_msg_number = NULL;
     
     close_seq->ns_val = (axis2_char_t *)axutil_strdup(env, ns_val);
     
@@ -85,6 +87,8 @@
     }
 
     close_seq->identifier = NULL;
+    close_seq->last_msg_number = NULL;
+
 	AXIS2_FREE(env->allocator, close_seq);
 	return AXIS2_SUCCESS;
 }
@@ -125,6 +129,17 @@
         return NULL;   
     }
 
+    close_seq->last_msg_number = sandesha2_last_msg_number_create(env, close_seq->ns_val); 
+    if(!close_seq->last_msg_number)
+    {
+        return NULL;
+    }
+
+    if(!sandesha2_last_msg_number_from_om_node(close_seq->last_msg_number, env, close_seq_node))
+    {
+        return NULL;   
+    }
+
     return close_seq;
 }
 
@@ -140,7 +155,8 @@
     axiom_node_t *cs_node = NULL;
     
     AXIS2_PARAM_CHECK(env->error, om_node, NULL);
-    
+
+    /* identifier is a MUST element within close sequence. So we need to check it's presense */
     if(!close_seq->identifier)
     {
         AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_TO_OM_NULL_ELEMENT, AXIS2_FAILURE);
@@ -160,6 +176,12 @@
     }
 
     sandesha2_identifier_to_om_node(close_seq->identifier, env, cs_node);
+    
+    if(close_seq->last_msg_number)
+    {
+        sandesha2_last_msg_number_to_om_node(close_seq->last_msg_number, env, cs_node);
+    }
+
     axiom_node_add_child((axiom_node_t*)om_node, env, cs_node);
 
     return (axiom_node_t*)om_node;
@@ -190,6 +212,33 @@
  	return AXIS2_SUCCESS;
 }
 
+sandesha2_last_msg_number_t * AXIS2_CALL
+sandesha2_close_seq_get_last_msg_number(
+    sandesha2_close_seq_t *close_seq,
+    const axutil_env_t *env)
+{
+	return close_seq->last_msg_number;
+}                    	
+
+axis2_status_t AXIS2_CALL                 
+sandesha2_close_seq_set_last_msg_number(
+    sandesha2_close_seq_t *close_seq,
+    const axutil_env_t *env, 
+    sandesha2_last_msg_number_t *last_msg_number)
+{
+ 	if(close_seq->last_msg_number)
+	{
+	    
+		sandesha2_last_msg_number_free(close_seq->last_msg_number, env);
+		close_seq->last_msg_number = NULL;
+	
+	}
+
+	close_seq->last_msg_number = last_msg_number;
+
+ 	return AXIS2_SUCCESS;
+}
+
 axis2_status_t AXIS2_CALL
 sandesha2_close_seq_to_soap_envelope(
     sandesha2_close_seq_t *close_seq,

Added: webservices/sandesha/trunk/c/src/wsrm/last_msg_number.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/wsrm/last_msg_number.c?rev=690481&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/wsrm/last_msg_number.c (added)
+++ webservices/sandesha/trunk/c/src/wsrm/last_msg_number.c Sat Aug 30 01:09:31 2008
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <sandesha2_last_msg_number.h>
+#include <sandesha2_constants.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <axiom_node.h>
+#include <axiom_element.h>
+
+/** 
+ * @brief LastMsgNumber struct impl
+ *	Sandesha2 LastMsgNumber
+ */
+struct sandesha2_last_msg_number_t
+{
+	long msg_num;
+	axis2_char_t *ns_val;
+};
+
+static axis2_bool_t AXIS2_CALL 
+sandesha2_last_msg_number_is_namespace_supported(
+    const axutil_env_t *env, 
+    axis2_char_t *namespace);
+
+AXIS2_EXTERN sandesha2_last_msg_number_t* AXIS2_CALL
+sandesha2_last_msg_number_create(
+    const axutil_env_t *env,  
+    axis2_char_t *ns_val)
+{
+    sandesha2_last_msg_number_t *last_msg_number = NULL;
+    AXIS2_PARAM_CHECK(env->error, ns_val, NULL);
+    
+    if(!sandesha2_last_msg_number_is_namespace_supported(env, ns_val))
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_UNSUPPORTED_NS, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    last_msg_number =  (sandesha2_last_msg_number_t *)AXIS2_MALLOC 
+        (env->allocator, sizeof(sandesha2_last_msg_number_t));
+	
+    if(!last_msg_number)
+	{
+		AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+	}
+
+    last_msg_number->ns_val = NULL;
+    last_msg_number->msg_num = 0;
+    
+    last_msg_number->ns_val = (axis2_char_t *)axutil_strdup(env, ns_val);
+    
+	return last_msg_number;
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_last_msg_number_free_void_arg(
+    void *msg_num,
+    const axutil_env_t *env)
+{
+    sandesha2_last_msg_number_t *msg_num_l = NULL;
+
+    msg_num_l = (sandesha2_last_msg_number_t *) msg_num;
+    return sandesha2_last_msg_number_free(msg_num_l, env);
+}
+
+axis2_status_t AXIS2_CALL 
+sandesha2_last_msg_number_free (
+    sandesha2_last_msg_number_t *last_msg_number, 
+	const axutil_env_t *env)
+{
+    if(last_msg_number->ns_val)
+    {
+        AXIS2_FREE(env->allocator, last_msg_number->ns_val);
+        last_msg_number->ns_val = NULL;
+    }
+
+    last_msg_number->msg_num = 0;
+    
+	AXIS2_FREE(env->allocator, last_msg_number);
+	return AXIS2_SUCCESS;
+}
+
+axis2_char_t* AXIS2_CALL 
+sandesha2_last_msg_number_get_namespace_value(
+    sandesha2_last_msg_number_t *last_msg_number,
+	const axutil_env_t *env)
+{
+	return last_msg_number->ns_val;
+}
+
+
+void* AXIS2_CALL 
+sandesha2_last_msg_number_from_om_node(
+    sandesha2_last_msg_number_t *last_msg_number,
+    const axutil_env_t *env, 
+    axiom_node_t *om_node)
+{
+    axiom_element_t *om_element = NULL;
+    axiom_element_t *mn_part = NULL;
+    axiom_node_t *mn_node = NULL;
+    axutil_qname_t *mn_qname = NULL;
+    axis2_char_t *mn_str = NULL;
+
+    AXIS2_PARAM_CHECK(env->error, om_node, NULL);
+    
+    om_element = axiom_node_get_data_element(om_node, env);
+    if(!om_element)
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NULL_OM_ELEMENT, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    mn_qname = axutil_qname_create(env, SANDESHA2_WSRM_COMMON_LAST_MSG_NUMBER, 
+        last_msg_number->ns_val, NULL);
+
+    if(!mn_qname)
+    {
+        return NULL;
+    }
+
+    mn_part = axiom_element_get_first_child_with_qname(om_element, env, mn_qname, om_node, &mn_node);
+    if(mn_qname)
+    {
+        axutil_qname_free(mn_qname, env);
+    }
+
+    if(!mn_part)
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NULL_OM_ELEMENT, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    mn_str = axiom_element_get_text(mn_part, env, mn_node);
+    if(!mn_str)
+    {
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_EMPTY_OM_ELEMENT, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    last_msg_number->msg_num = atol(mn_str); 
+    return last_msg_number;
+}
+
+
+axiom_node_t* AXIS2_CALL 
+sandesha2_last_msg_number_to_om_node(
+    sandesha2_last_msg_number_t *last_msg_number,
+    const axutil_env_t *env, void *om_node)
+{
+    axiom_namespace_t *rm_ns = NULL;
+    axiom_element_t *mn_element = NULL;
+    axiom_node_t *mn_node = NULL;
+    /*axis2_char_t *str_num = NULL;*/
+    axis2_char_t str_num[32];
+    
+    AXIS2_PARAM_CHECK(env->error, om_node, NULL);
+    
+    if(last_msg_number->msg_num <= 0)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[sandesha2] Message number provided as last message number is invalid");
+
+        AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_TO_OM_INVALID_NUMBER, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    rm_ns = axiom_namespace_create(env, last_msg_number->ns_val,
+        SANDESHA2_WSRM_COMMON_NS_PREFIX_RM);
+
+    if(!rm_ns)
+    {
+        return NULL;
+    }
+
+    mn_element = axiom_element_create(env, NULL, SANDESHA2_WSRM_COMMON_LAST_MSG_NUMBER, rm_ns, 
+            &mn_node);
+
+    if(!mn_element)
+    {
+        return NULL;
+    }
+
+    sprintf(str_num, "%ld", last_msg_number->msg_num);
+    axiom_element_set_text(mn_element, env, str_num, mn_node);
+    axiom_node_add_child((axiom_node_t*)om_node, env, mn_node);
+    
+    return (axiom_node_t*)om_node;
+ }
+
+long AXIS2_CALL
+sandesha2_last_msg_number_get_last_msg_number(
+    sandesha2_last_msg_number_t *last_msg_number,
+   	const axutil_env_t *env)
+{
+	return last_msg_number->msg_num;
+}                    	
+
+axis2_status_t AXIS2_CALL                 
+sandesha2_last_msg_number_set_last_msg_number(
+    sandesha2_last_msg_number_t *last_msg_number,
+   	const axutil_env_t *env, 
+    long value)
+{
+ 	last_msg_number->msg_num = value;
+ 	return AXIS2_SUCCESS;
+}
+    
+static axis2_bool_t AXIS2_CALL 
+sandesha2_last_msg_number_is_namespace_supported(
+    const axutil_env_t *env, 
+    axis2_char_t *namespace)
+{
+    if(!axutil_strcmp(namespace, SANDESHA2_SPEC_2005_02_NS_URI))
+    {
+        return AXIS2_TRUE;
+    }
+    if(!axutil_strcmp(namespace, SANDESHA2_SPEC_2007_02_NS_URI))
+    {
+        return AXIS2_TRUE;
+    }
+
+    return AXIS2_FALSE;
+}
+
+



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org