blob: 20125b6de5944503de3acafb7acec6b37aeb11eb [file] [log] [blame]
/*
* 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_MEP_CLIENT_H
#define AXIS2_MEP_CLIENT_H
/**
* @file axis2_mep_client.h
* @brief axis2 Message Context interface
*/
#include <axis2_defines.h>
#include <axis2_env.h>
#include <axis2_error.h>
#include <axis2_op.h>
#include <axiom_node.h>
#include <axiom_soap_envelope.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** @defgroup axis2_mep_client Message Context
* @ingroup axis2_core_context
* @{
*/
typedef struct axis2_mep_client_ops axis2_mep_client_ops_t;
typedef struct axis2_mep_client axis2_mep_client_t;
/**
* @brief Message Context ops struct
* Encapsulator struct for ops of axis2_mep_client
*/
struct axis2_mep_client_ops
{
axis2_char_t* (AXIS2_CALL *
get_soap_action)(struct axis2_mep_client *mep_client,
const axis2_env_t *env);
/**
* prepare the message context for invocation, here the properties kept in the
* MEPClient copied to the axis2_msg_ctx_t *
*/
axis2_status_t (AXIS2_CALL *
prepare_invocation)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_op_t *op,
axis2_msg_ctx_t *msg_ctx);
/**
* This class prepare the SOAP Envelope using the payload
*
* @param toSend
* @return
* @
*/
axis2_msg_ctx_t* (AXIS2_CALL *
prepare_soap_envelope)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axiom_node_t *to_send);
/**
* try to infer the transport looking at the URL, the URL can be http://
* tcp:// mail:// local://. The method will look for the trnasport name as the
* protocol part of the transport.
*
* @param epr
* @return
* @
*/
axis2_transport_out_desc_t* (AXIS2_CALL *
infer_transport)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_endpoint_ref_t *epr);
/**
* create write SOAPEvelope(in terms of version) based on the values set.
*
* @return
* @
*/
axiom_soap_envelope_t* (AXIS2_CALL *
create_default_soap_envelope)(struct axis2_mep_client *mep_client,
const axis2_env_t *env);
/**
* Engage a given Module to the current invocation. But to call this method the
* Module *MUST* be enable (picked up by the deployment and known to Axis2) .
* To be detected put the moduels to the AXIS2_REPOSITORY/modules directory
*
* @param name
* @
*/
axis2_status_t (AXIS2_CALL *
engage_module)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_qname_t *qname);
/**
* @param string
*/
axis2_status_t (AXIS2_CALL *
set_soap_version_uri)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_char_t *soap_version_uri);
/**
* @param string
*/
axis2_status_t (AXIS2_CALL *
set_soap_action)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_char_t *soap_action);
/**
* @param string
*/
axis2_status_t (AXIS2_CALL *
set_wsa_action)(struct axis2_mep_client *mep_client,
const axis2_env_t *env,
axis2_char_t *wsa_action);
axis2_svc_ctx_t* (AXIS2_CALL *
get_svc_ctx)(struct axis2_mep_client *mep_client,
const axis2_env_t *env);
axis2_status_t (AXIS2_CALL *
free)(struct axis2_mep_client *mep_client,
const axis2_env_t *env);
};
/**
* @brief Message Context struct
* Axis2 Message Context
*/
struct axis2_mep_client
{
axis2_mep_client_ops_t *ops;
};
AXIS2_EXTERN axis2_mep_client_t* AXIS2_CALL axis2_mep_client_create(const axis2_env_t *env,
axis2_svc_ctx_t *svc_ctx,
const axis2_char_t *mep);
axis2_msg_ctx_t* AXIS2_CALL
axis2_mep_client_two_way_send(const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
axis2_msg_ctx_t* AXIS2_CALL
axis2_mep_client_receive(const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
/************************** Start of function macros **************************/
#define AXIS2_MEP_CLIENT_GET_SOAP_ACTION(mep_client, env) \
((mep_client)->ops->get_soap_action(mep_client, env))
#define AXIS2_MEP_CLIENT_PREPARE_INVOCATION(mep_client, env, op, msg_ctx) \
((mep_client)->ops->prepare_invocation(mep_client, env, op, msg_ctx))
#define AXIS2_MEP_CLIENT_PREPARE_SOAP_ENVELOPE(mep_client, env, to_send) \
((mep_client)->ops->prepare_soap_envelope(mep_client, env, to_send))
#define AXIS2_MEP_CLIENT_INFER_TRANSPORT(mep_client, env, epr) \
((mep_client)->ops->infer_transport(mep_client, env, epr))
#define AXIS2_MEP_CLIENT_CREATE_DEFAULT_SOAP_ENVELOPE(mep_client, env) \
((mep_client)->ops->create_default_soap_envelope(mep_client, env))
#define AXIS2_MEP_CLIENT_ENGAGE_MODULE(mep_client, env, qname) \
((mep_client)->ops->engage_module(mep_client, env, qname))
#define AXIS2_MEP_CLIENT_SET_SOAP_VERSION_URI(mep_client, env, soap_version_uri)\
((mep_client)->ops->set_soap_version_uri(mep_client, env, soap_version_uri))
#define AXIS2_MEP_CLIENT_SET_SOAP_ACTION(mep_client, env, soap_action) \
((mep_client)->ops->set_soap_action(mep_client, env, soap_action))
#define AXIS2_MEP_CLIENT_SET_WSA_ACTION(mep_client, env, wsa_action) \
((mep_client)->ops->set_wsa_action(mep_client, env, wsa_action))
#define AXIS2_MEP_CLIENT_GET_SVC_CTX(mep_client, env) \
((mep_client)->ops->get_svc_ctx(mep_client, env))
#define AXIS2_MEP_CLIENT_FREE(mep_client, env) \
((mep_client)->ops->free (mep_client, env))
/************************** End of function macros ****************************/
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_MEP_CLIENT_H */