blob: 9400041a2cb09f9da85c660130a902298f4d5b34 [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_CONF_CTX_H
#define AXIS2_CONF_CTX_H
/**
* @file axis2_conf_ctx.h
* @brief axis2 Message Context interface
*/
#include <axis2_defines.h>
#include <axis2_hash.h>
#include <axis2_env.h>
#include <axis2_ctx.h>
#include <axis2_svc_grp_ctx.h>
#ifdef __cplusplus
extern "C"
{
#endif
/** @defgroup axis2_conf_ctx Message Context
* @ingroup axis2_core_context
* @{
*/
typedef struct axis2_conf_ctx_ops axis2_conf_ctx_ops_t;
typedef struct axis2_conf_ctx axis2_conf_ctx_t;
struct axis2_conf;
/**
* @brief Message Context ops struct
* Encapsulator struct for ops of axis2_conf_ctx
*/
struct axis2_conf_ctx_ops
{
/**
* @param configuration
*/
axis2_status_t (AXIS2_CALL *set_conf)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
struct axis2_conf *conf);
/**
*/
axis2_ctx_t* (AXIS2_CALL *get_base)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
/**
*/
struct axis2_conf* (AXIS2_CALL *get_conf)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
axis2_hash_t* (AXIS2_CALL *get_op_ctx_map)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
axis2_hash_t* (AXIS2_CALL *get_svc_ctx_map)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
axis2_hash_t* (AXIS2_CALL *get_svc_grp_ctx_map)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
/**
* Register a struct axis2_op_ctx against a given Message ID.
*
* @param messageID
* @param mepContext
*/
axis2_status_t (AXIS2_CALL *register_op_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *message_id,
struct axis2_op_ctx *op_ctx);
/**
* get axis2_op_ctx struct given a Message ID
*
* @param message_id
* @return struct axis2_op_ctx * <code>struct axis2_op_ctx *<code>
*/
struct axis2_op_ctx* (AXIS2_CALL *get_op_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *message_id);
/**
* Register a struct axis2_svc_ctx against a given Message ID.
*
* @param svc_id
* @param mepContext
*/
axis2_status_t (AXIS2_CALL *register_svc_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *svc_id,
struct axis2_svc_ctx *svc_ctx);
/**
* get axis2_svc_ctx struct given a Message ID
*
* @param svc_id
* @return struct axis2_svc_ctx * <code>struct axis2_svc_ctx *<code>
*/
struct axis2_svc_ctx* (AXIS2_CALL *get_svc_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *svc_id);
/**
* Register a struct axis2_svc_grp_ctx against a given Message ID.
*
* @param svc_grp_id
* @param mepContext
*/
axis2_status_t (AXIS2_CALL *register_svc_grp_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *svc_grp_id,
struct axis2_svc_grp_ctx *svc_grp_ctx);
/**
* get axis2_svc_grp_ctx struct given a service group ID
*
* @param svc_grp_id
* @return struct axis2_svc_grp_ctx * <code>struct axis2_svc_grp_ctx *<code>
*/
struct axis2_svc_grp_ctx* (AXIS2_CALL *get_svc_grp_ctx)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *svc_grp_id);
/**
* This method allows users to reolve the paths relative to the
* root diretory
*
* @param path
*/
axis2_char_t* (AXIS2_CALL *get_root_dir)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
/**
* @param file
*/
axis2_status_t (AXIS2_CALL *set_root_dir)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_char_t *path);
axis2_status_t (AXIS2_CALL *init)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
struct axis2_conf *conf);
axis2_status_t (AXIS2_CALL *free)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env);
/**
* This method should search for a service group context in the map with given id as the key.
* If(key != null && found)
* check for a service context for the intended service.
* if (!found)
* create one and hook up to service group context
* else
* create new service group context with the given key or if key is null with a new key
* create a new service context for the service
*
* @param messageContext
*/
struct axis2_svc_grp_ctx* (AXIS2_CALL *fill_ctxs)(struct axis2_conf_ctx *conf_ctx,
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
};
/**
* @brief Message Context struct
* Axis2 Message Context
*/
struct axis2_conf_ctx
{
axis2_conf_ctx_ops_t *ops;
};
AXIS2_EXTERN axis2_conf_ctx_t *AXIS2_CALL axis2_conf_ctx_create(const axis2_env_t *env, struct axis2_conf *conf);
/************************** Start of function macros **************************/
#define AXIS2_CONF_CTX_SET_CONF(conf_ctx, env, conf) ((conf_ctx)->ops->set_conf(conf_ctx, env, conf))
#define AXIS2_CONF_CTX_GET_BASE(conf_ctx, env) ((conf_ctx)->ops->get_base(conf_ctx, env))
#define AXIS2_CONF_CTX_GET_CONF(conf_ctx, env) ((conf_ctx)->ops->get_conf(conf_ctx, env))
#define AXIS2_CONF_CTX_GET_OP_CTX_MAP(conf_ctx, env) ((conf_ctx)->ops->get_op_ctx_map(conf_ctx, env))
#define AXIS2_CONF_CTX_GET_SVC_CTX_MAP(conf_ctx, env) ((conf_ctx)->ops->get_svc_ctx_map(conf_ctx, env))
#define AXIS2_CONF_CTX_GET_SVC_GRP_CTX_MAP(conf_ctx, env) ((conf_ctx)->ops->get_svc_grp_ctx_map(conf_ctx, env))
#define AXIS2_CONF_CTX_REGISTER_OP_CTX(conf_ctx, env, message_id, op_ctx) ((conf_ctx)->ops->register_op_ctx(conf_ctx, env, message_id, op_ctx))
#define AXIS2_CONF_CTX_GET_OP_CTX(conf_ctx, env, message_id) ((conf_ctx)->ops->get_op_ctx(conf_ctx, env, message_id))
#define AXIS2_CONF_CTX_REGISTER_SVC_CTX(conf_ctx, env, svc_id, svc_ctx) ((conf_ctx)->ops->register_svc_ctx(conf_ctx, env, svc_id, svc_ctx))
#define AXIS2_CONF_CTX_GET_SVC_CTX(conf_ctx, env, svc_id) ((conf_ctx)->ops->get_svc_ctx(conf_ctx, env, svc_id))
#define AXIS2_CONF_CTX_REGISTER_SVC_GRP_CTX(conf_ctx, env, svc_grp_id, svc_grp_ctx) ((conf_ctx)->ops->register_svc_grp_ctx(conf_ctx, env, svc_grp_id, svc_grp_ctx))
#define AXIS2_CONF_CTX_GET_SVC_GRP_CTX(conf_ctx, env, svc_grp_id) ((conf_ctx)->ops->get_svc_grp_ctx(conf_ctx, env, svc_grp_id))
#define AXIS2_CONF_CTX_GET_ROOT_DIR(conf_ctx, env) ((conf_ctx)->ops->get_root_dir(conf_ctx, env))
#define AXIS2_CONF_CTX_SET_ROOT_DIR(conf_ctx, env, path) ((conf_ctx)->ops->set_root_dir(conf_ctx, env, path))
#define AXIS2_CONF_CTX_INIT(conf_ctx, env, conf) ((conf_ctx)->ops->init(conf_ctx, env, conf))
#define AXIS2_CONF_CTX_FREE(conf_ctx, env) ((conf_ctx)->ops->free(conf_ctx, env))
#define AXIS2_CONF_CTX_FILL_CTXS(conf_ctx, env, msg_ctx) ((conf_ctx)->ops->fill_ctxs(conf_ctx, env, msg_ctx))
/************************** End of function macros ****************************/
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* AXIS2_CONF_CTX_H */