This was added to SVN.
Thank you for the effort.

Samisa...

Sahan Gamage wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

I have added axis2_msg_sender to the clientapi. I have attached
axis2_msg_sender.h and msg_sender.c
Plsease commit the code.

- - Sahan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iQEVAwUBQ7Jqj6nIlEsDdb85AQICWgf8CRaOIE7euucp7wsbv3iX8JwDiXtW8UoI
UpsehKPD4/fsKx/TqhqzesN+cclqKXOwVbQ398fu8nzwTt8ll3ehMzAwBreRuenR
QxLucR6sIvfwF6QgePJlRYIlalkUiE1MnBc9qAUXFQ2VhA2rQCnNoU++ilxhBTVW
M35wzO4Y4y4bllGDs1ynp53UQJk6r9IMxFBQ6ZfUnr1GCm2KUyWrLaUkuQtG/jfu
JiSMlP5T9UjC+PZMlK2n9I16rU6xo2LthFBZad/meHlTK+ZpHyx6vT9iea640sgF
cDm0PmZYleYAqh+1IHUtOp8DegegjMFG1c8Ay9NULv2LV39tkkgwsg==
=wPNQ
-----END PGP SIGNATURE-----

------------------------------------------------------------------------

/*
* 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 <axis2_msg_sender.h>
#include <axis2_msg_ctx.h>
#include <axis2_svc_ctx.h>
#include <axis2_engine.h>
#include <axis2_msg_info_headers.h>

typedef struct axis2_msg_sender_impl axis2_msg_sender_impl_t;

struct axis2_msg_sender_impl
{
   axis2_msg_sender_t msg_sender;
   axis2_mep_client_t *base;
   axis2_transport_out_desc_t *sender_transport;
   axis2_op_t *op_template;
        axis2_msg_info_headers_t *msg_info_headers;
};

/** Interface to implementation conversion macro */
#define AXIS2_INTF_TO_IMPL(msg_sender) ((axis2_msg_sender_impl_t *)msg_sender)

/***************************** Function headers *******************************/
axis2_status_t AXIS2_CALL axis2_msg_sender_send(axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_op_t *op,
                                                axis2_msg_ctx_t *msg_ctx);

axis2_status_t AXIS2_CALL axis2_msg_sender_set_transport_info(axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_char_t *sender_transport);

axis2_status_t AXIS2_CALL axis2_msg_sender_send_with_om(struct axis2_msg_sender *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_om_node_t *om_node_to_send);

axis2_status_t AXIS2_CALL axis2_msg_sender_send_with_soap(axis2_msg_sender_t *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_soap_envelope_t *envelope); axis2_status_t AXIS2_CALL axis2_msg_sender_get_msg_info_headers(axis2_msg_sender_t *msg_sender, axis2_env_t **env);
                                        
axis2_status_t AXIS2_CALL axis2_msg_sender_free(struct axis2_msg_sender *msg_sender, axis2_env_t **env);
        
/***************************** End of function headers ************************/

axis2_msg_sender_t* AXIS2_CALL axis2_msg_sender_create(axis2_env_t **env, axis2_svc_ctx_t *svc_ctx) {
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
AXIS2_ENV_CHECK(env, NULL);
   AXIS2_PARAM_CHECK((*env)->error, svc_ctx, NULL);
msg_sender_impl = AXIS2_MALLOC( (*env)->allocator, sizeof(axis2_msg_sender_impl_t));
        
   if (NULL == msg_sender_impl)
{ AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); return NULL; } msg_sender_impl->msg_sender.ops = NULL;
   msg_sender_impl->base = NULL;
   msg_sender_impl->sender_transport = NULL;
   msg_sender_impl->op_template = NULL;
        msg_sender_impl->msg_info_headers = NULL;
msg_sender_impl->base = axis2_mep_client_create(env, svc_ctx, MEP_URI_IN_ONLY);
   if (NULL == msg_sender_impl->base)
   {
       axis2_msg_sender_free(&(msg_sender_impl->msg_sender), env);
       return NULL;
   }
msg_sender_impl->msg_info_headers = axis2_msg_info_headers_create(env, NULL, NULL); /* initialize ops */ msg_sender_impl->msg_sender.ops = AXIS2_MALLOC((*env)->allocator, sizeof(axis2_msg_sender_ops_t));
   if (NULL == msg_sender_impl->msg_sender.ops)
   {
       AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
       axis2_msg_sender_free(&(msg_sender_impl->msg_sender), env);
return NULL; }

   msg_sender_impl->msg_sender.ops->send = axis2_msg_sender_send;
msg_sender_impl->msg_sender.ops->set_transport_info = axis2_msg_sender_set_transport_info; msg_sender_impl->msg_sender.ops->send_with_om = axis2_msg_sender_send_with_om; msg_sender_impl->msg_sender.ops->send_with_soap = axis2_msg_sender_send_with_soap; msg_sender_impl->msg_sender.ops->get_msg_info_headers = axis2_msg_sender_get_msg_info_headers;
   msg_sender_impl->msg_sender.ops->free = axis2_msg_sender_free;

   return &(msg_sender_impl->msg_sender);
}

axis2_status_t AXIS2_CALL axis2_msg_sender_free(struct axis2_msg_sender *msg_sender, axis2_env_t **env)
{
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE); msg_sender_impl = AXIS2_INTF_TO_IMPL(msg_sender); if (NULL != msg_sender_impl->msg_sender.ops)
   {
       AXIS2_FREE((*env)->allocator, msg_sender_impl->msg_sender.ops);
       msg_sender_impl->msg_sender.ops = NULL;
   }
if (NULL != msg_sender_impl->base)
   {
       AXIS2_MEP_CLIENT_FREE(msg_sender_impl->base, env);
       msg_sender_impl->base = NULL;
} AXIS2_FREE((*env)->allocator, msg_sender_impl);
   msg_sender_impl = NULL;
return AXIS2_SUCCESS;
}

axis2_status_t AXIS2_CALL axis2_msg_sender_send(axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_op_t *op,
                                                axis2_msg_ctx_t *msg_ctx)
{
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
   axis2_status_t status = AXIS2_SUCCESS;
   axis2_svc_ctx_t *svc_ctx = NULL;
   axis2_char_t *message_id = NULL;
        axis2_conf_ctx_t *sys_context = NULL;
        axis2_engine_t *engine = NULL;
                
   AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE);
msg_sender_impl = AXIS2_INTF_TO_IMPL(msg_sender); status = AXIS2_MEP_CLIENT_PREPARE_INVOCATION(msg_sender_impl->base, env, op, msg_ctx);
   if (status != AXIS2_SUCCESS)
       return AXIS2_FAILURE;
AXIS2_MSG_CTX_SET_MSG_INFO_HEADERS(msg_ctx, env, msg_sender_impl->msg_info_headers);
        message_id = "uuid:"; /* TODO UUIDGenerator.getUUID()*/
   AXIS2_MSG_CTX_SET_MESSAGE_ID(msg_ctx, env, message_id);
        
   svc_ctx = AXIS2_MEP_CLIENT_GET_SVC_CTX(msg_sender_impl->base, env);
   if (NULL == svc_ctx)
       return AXIS2_FAILURE;
        
        if(NULL == msg_sender_impl->sender_transport)
        {
                msg_sender_impl->sender_transport = 
AXIS2_MEP_CLIENT_INFER_TRANSPORT(
msg_sender_impl->base, env, AXIS2_MSG_INFO_HEADERS_GET_TO( msg_sender_impl->msg_info_headers, env));
        }
AXIS2_MSG_CTX_SET_TRANSPORT_OUT_DESC(msg_ctx, env, msg_sender_impl->sender_transport);
        
        sys_context = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
        if(NULL == sys_context)
                return AXIS2_FAILURE;
AXIS2_MSG_CTX_SET_OP_CTX(msg_ctx, env, AXIS2_OP_FIND_OP_CTX(op, env, msg_ctx, svc_ctx));
        engine = axis2_engine_create(env, sys_context);
        if(NULL == engine)
                return AXIS2_FAILURE;
        return AXIS2_ENGINE_SEND(engine, env, msg_ctx);
}

axis2_status_t AXIS2_CALL axis2_msg_sender_set_transport_info(axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_char_t *sender_transport)
{
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
   axis2_conf_ctx_t *conf_ctx = NULL;
   axis2_conf_t *conf = NULL;
   axis2_qname_t *qname = NULL;
        axis2_svc_ctx_t *svc_ctx = NULL;
AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE);
   msg_sender_impl = AXIS2_INTF_TO_IMPL(msg_sender);
svc_ctx = AXIS2_MEP_CLIENT_GET_SVC_CTX(msg_sender_impl->base, env);
   conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
   if (NULL == conf_ctx)
   {
       return AXIS2_FAILURE;
        }
        conf = AXIS2_CONF_CTX_GET_CONF(conf_ctx, env);
        if (NULL == conf)
        {
                return AXIS2_FAILURE;
        }
        qname = axis2_qname_create(env, sender_transport, NULL, NULL);
        if (NULL == qname)
                return AXIS2_FAILURE;
        msg_sender_impl->sender_transport = AXIS2_CONF_GET_TRANSPORT_OUT(
conf, env, qname); AXIS2_QNAME_FREE(qname, env);
        if(NULL == msg_sender_impl->sender_transport)
        {
AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_UNKNOWN_TRANSPORT, AXIS2_FAILURE);
                return AXIS2_FAILURE;
        }
        return AXIS2_SUCCESS;   
}


axis2_status_t AXIS2_CALL axis2_msg_sender_send_with_om(struct axis2_msg_sender *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_om_node_t *om_node_to_send)
{
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
   axis2_soap_envelope_t *soap_envelope = NULL;
        axis2_status_t status = AXIS2_FAILURE;
        
   AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE);
        AXIS2_PARAM_CHECK((*env)->error, op_name, AXIS2_FAILURE);
   AXIS2_PARAM_CHECK((*env)->error, om_node_to_send, AXIS2_FAILURE);
        
   msg_sender_impl = AXIS2_INTF_TO_IMPL(msg_sender);
        soap_envelope = AXIS2_MEP_CLIENT_CREATE_DEFAULT_SOAP_ENVELOPE(
                                                msg_sender_impl->base, env);
/* TODO AXIS2_SOAP_BODY_ADD_CHILD(AXIS2_SOAP_ENVELOPE_GET_BODY(soap_envelope, env), env, om_node_to_send); */ status = axis2_msg_sender_send_with_soap(msg_sender, env, op_name, soap_envelope);
        AXIS2_SOAP_ENVELOPE_FREE(soap_envelope, env);
        return status;
}

axis2_status_t AXIS2_CALL axis2_msg_sender_send_with_soap(axis2_msg_sender_t *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_soap_envelope_t *envelope)
{
   axis2_msg_sender_impl_t *msg_sender_impl = NULL;
   axis2_qname_t *op_qname = NULL;
   axis2_svc_t *svc = NULL;
   axis2_op_t *op = NULL;
   axis2_msg_ctx_t *msg_ctx = NULL;
   axis2_conf_ctx_t *conf_ctx = NULL;
        axis2_svc_ctx_t *svc_ctx = NULL;
        axis2_status_t status = AXIS2_FAILURE;
AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE);
        AXIS2_PARAM_CHECK((*env)->error, op_name, AXIS2_FAILURE);
        AXIS2_PARAM_CHECK((*env)->error, envelope, AXIS2_FAILURE);
msg_sender_impl = AXIS2_INTF_TO_IMPL(msg_sender);

        svc_ctx = AXIS2_MEP_CLIENT_GET_SVC_CTX(msg_sender_impl->base, env);
   op_qname = axis2_qname_create(env, op_name, NULL, NULL);
        
        if(NULL == op_qname)
        {
                return AXIS2_FAILURE;
        }
op = AXIS2_SVC_GET_OP_WITH_QNAME(svc, env, op_qname); if(NULL == op)
        {
                op = axis2_op_create_with_name(env, op_qname);
                if(NULL == op)
                {
                        return AXIS2_FAILURE;
                }
AXIS2_OP_SET_REMAINING_PHASES_INFLOW(op, env, AXIS2_OP_GET_REMAINING_PHASES_INFLOW(
                                                msg_sender_impl->op_template, 
env));
                AXIS2_OP_SET_PHASES_OUTFLOW(op, env, 
AXIS2_OP_GET_PHASES_OUTFLOW(
                                                msg_sender_impl->op_template, 
env));
AXIS2_OP_SET_PHASES_IN_FAULT_FLOW(op, env, AXIS2_OP_GET_PHASES_IN_FAULT_FLOW(
                                                msg_sender_impl->op_template, 
env));
AXIS2_OP_SET_PHASES_OUT_FAULT_FLOW(op, env, AXIS2_OP_GET_PHASES_OUT_FAULT_FLOW(
                                                msg_sender_impl->op_template, 
env));
                AXIS2_SVC_ADD_OP(AXIS2_SVC_CTX_GET_SVC(svc_ctx, env), env, op);
                
        }
        conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env);
        msg_ctx = axis2_msg_ctx_create(env, conf_ctx, NULL, NULL);
        AXIS2_MSG_CTX_SET_SOAP_ENVELOPE(msg_ctx, env, envelope);
        status = axis2_msg_sender_send(msg_sender, env, op, msg_ctx);
        
        AXIS2_MSG_CTX_FREE(msg_ctx, env);
        msg_ctx = NULL;
        
        return status;
}

axis2_status_t AXIS2_CALL axis2_msg_sender_get_msg_info_headers(axis2_msg_sender_t *msg_sender, axis2_env_t **env)
{
        AXIS2_FUNC_PARAM_CHECK(msg_sender, env, AXIS2_FAILURE);
        return AXIS2_INTF_TO_IMPL(msg_sender)->msg_info_headers;
}
------------------------------------------------------------------------

/*
* 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 AXIS2_MSG_SENDER_H
#define AXIS2_MSG_SENDER_H


/**
 * @file axis2_msg_sender.h
 * @brief axis2 Message Context interface
 */

#include <axis2_defines.h>
#include <axis2_env.h>
#include <axis2_mep_client.h>
#include <axis2_soap_envelope.h>


#ifdef __cplusplus
extern "C"
{
#endif

/** @defgroup axis2_msg_sender * @ingroup axis2_core_clientapi
 * @{
 */
typedef struct axis2_msg_sender_ops axis2_msg_sender_ops_t; typedef struct axis2_msg_sender axis2_msg_sender_t; /** * @brief Message Sender ops struct
* Encapsulator struct for ops of axis2_msg_sender
*/ struct axis2_msg_sender_ops
{
   /**
    * Send the SOAP Message and forget about it. This is one way
    * @param axisop
    * @param msgctx
*/ axis2_status_t (AXIS2_CALL *send)(axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_op_t *op,
                                                axis2_msg_ctx_t *msg_ctx);

   /**
    * set the transport to used for sending the SOAP Message
    * @param senderTransport
    */
   axis2_status_t (AXIS2_CALL *set_transport_info)(
axis2_msg_sender_t *msg_sender, axis2_env_t **env,
                                                axis2_char_t *sender_transport);

        /**
         * Send an om node
         *
* @param op - this will be used to identify the operation in the client * side, without dispatching
         * @param om_node_to_send - This should be OM Element (payload)
         * @return
         */
   axis2_status_t (AXIS2_CALL *send_with_om)(
struct axis2_msg_sender *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_om_node_t *om_node_to_send);
        
        /**
         * Send the SOAP Message, the actual worker
         *
         */
   axis2_status_t (AXIS2_CALL *send_with_soap)(
axis2_msg_sender_t *msg_sender, axis2_env_t **env, axis2_char_t *op_name, axis2_soap_envelope_t *envelope);
        /**
* Get the message information header object. All the sets to * msg_info_headers should be done via get_msg_info and a set
         */                                     
        axis2_status_t (AXIS2_CALL *get_msg_info_headers)(
                                                axis2_msg_sender_t *msg_sender, 
axis2_env_t **env);
                                                
axis2_status_t (AXIS2_CALL *free)(struct axis2_msg_sender *msg_sender, axis2_env_t **env);
};

/** * @brief Message Sender struct
 *      Axis2 Message Sender
*/
struct axis2_msg_sender
{
axis2_msg_sender_ops_t *ops; };

AXIS2_DECLARE(axis2_msg_sender_t*) axis2_msg_sender_create(axis2_env_t **env, axis2_svc_ctx_t *svc_ctx);

/************************** Start of function macros **************************/

#define AXIS2_MSG_SENDER_SEND(msg_sender, env, op, msg_ctx) \
                                                
((msg_sender)->ops->send(msg_sender, env, \
                                                op, msg_ctx))
#define AXIS2_MSG_SENDER_SET_TRANSPORT_INFO(msg_sender, env, sender_transport)\
                                                
((msg_sender)->ops->set_transport_info(msg_sender, env,\
                                                sender_transport))
#define AXIS2_MSG_SENDER_SEND_WITH_OM ((msg_sender)->ops->send_with_om(\
                                                msg_sender, env, op_name, 
om_node_to_send))
#define AXIS2_MSG_SENDER_SEND_WITH_SOAP(msg_sender, env, op_name, \
                                                om_node_to_send) 
((msg_sender)->ops->send_with_soap(\
                                                msg_sender, env, op_name, 
envelope))
#define AXIS2_MSG_SENDER_FREE(msg_sender, env) ((msg_sender)->ops->free(\
                                                msg_sender, env))
/************************** End of function macros ****************************/
/** @} */
#ifdef __cplusplus
}
#endif

#endif                          /* AXIS2_MSG_SENDER_H */

Reply via email to