summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar nandika2012-02-04 11:38:22 +0000
committerGravatar nandika2012-02-04 11:38:22 +0000
commit39f3d5600820c41c2bcf720e0084e748530a4d9b (patch)
tree4cf32079449657530e3838bbf10cc4ee6bb45c93
parentcce6f5459dfd45f8f8afafc8f4453f10d867e86e (diff)
downloadaxis2c-39f3d5600820c41c2bcf720e0084e748530a4d9b.tar.gz
axis2c-39f3d5600820c41c2bcf720e0084e748530a4d9b.tar.bz2
adding patch 0004 of jira issue 1582
git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@1240493 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/core/engine/conf.c3800
1 files changed, 1904 insertions, 1896 deletions
diff --git a/src/core/engine/conf.c b/src/core/engine/conf.c
index ef5e941..b26798a 100644
--- a/src/core/engine/conf.c
+++ b/src/core/engine/conf.c
@@ -1,1896 +1,1904 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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 <string.h>
-#include <axis2_disp.h>
-#include "axis2_disp_checker.h"
-#include <axis2_conf.h>
-#include <axutil_dir_handler.h>
-#include <axis2_dep_engine.h>
-#include <axis2_arch_reader.h>
-#include <axis2_core_utils.h>
-
-struct axis2_conf
-{
- axutil_hash_t *svc_grps;
- axis2_transport_in_desc_t *transports_in[AXIS2_TRANSPORT_ENUM_MAX];
- axis2_transport_out_desc_t *transports_out[AXIS2_TRANSPORT_ENUM_MAX];
-
- /**
- * All the modules already engaged can be found here.
- */
- axutil_array_list_t *engaged_module_list;
-
- /*To store all the available modules (including version) */
- axutil_hash_t *all_modules;
-
- /*To store mapping between default version to module name */
- axutil_hash_t *name_to_version_map;
- axutil_array_list_t *out_phases;
- axutil_array_list_t *in_fault_phases;
- axutil_array_list_t *out_fault_phases;
-
- /* All the system specific phases are stored here */
- axutil_array_list_t *in_phases_upto_and_including_post_dispatch;
-
- axis2_phases_info_t *phases_info;
- axutil_hash_t *all_svcs;
- axutil_hash_t *all_init_svcs;
- axutil_hash_t *msg_recvs;
- axutil_hash_t *faulty_svcs;
- axutil_hash_t *faulty_modules;
- axis2_char_t *axis2_repo;
- axis2_char_t *axis2_xml;
- axis2_dep_engine_t *dep_engine;
- axutil_array_list_t *handlers;
- axis2_bool_t enable_mtom;
- /*This is used in rampart */
- axis2_bool_t enable_security;
-
- /** Configuration parameter container */
- axutil_param_container_t *param_container;
-
- /** Base description struct */
- axis2_desc_t *base;
-
- /** Mark whether conf is built using axis2 XML*/
- axis2_bool_t axis2_flag;
-
-#if 0
-/* this seemed to be not used after 1.6.0 */
-/* This is a hack to keep rampart_context at client side */
-void *security_context;
-#endif
-};
-
-AXIS2_EXTERN axis2_conf_t *AXIS2_CALL
-axis2_conf_create(
- const axutil_env_t * env)
-{
- axis2_conf_t *conf = NULL;
- axis2_status_t status = AXIS2_FAILURE;
- axis2_phase_t *phase = NULL;
- int i = 0;
-
- AXIS2_ENV_CHECK(env, NULL);
-
- conf = (axis2_conf_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_conf_t));
- if(!conf)
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory");
- return NULL;
- }
-
- memset((void *)conf, 0, sizeof(axis2_conf_t));
-
- conf->param_container = (axutil_param_container_t *)axutil_param_container_create(env);
- if(!conf->param_container)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating parameter container failed");
- return NULL;
- }
-
- conf->svc_grps = axutil_hash_make(env);
- if(!conf->svc_grps)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed");
- return NULL;
- }
-
- for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
- {
- conf->transports_in[i] = NULL;
- }
-
- for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
- {
- conf->transports_out[i] = NULL;
- }
-
- conf->engaged_module_list = axutil_array_list_create(env, 0);
- if(!conf->engaged_module_list)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating engaged module list failed");
- return NULL;
- }
-
- conf->handlers = axutil_array_list_create(env, 0);
- if(!conf->handlers)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating handler list failed");
- return NULL;
- }
-
- conf->in_phases_upto_and_including_post_dispatch = axutil_array_list_create(env, 0);
- if(!conf->in_phases_upto_and_including_post_dispatch)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Creating in phases list upto and including post dispatch failed");
- return NULL;
- }
- else
- {
- axis2_disp_t *uri_dispatch = NULL;
- axis2_disp_t *addr_dispatch = NULL;
-
- phase = axis2_phase_create(env, AXIS2_PHASE_TRANSPORT_IN);
- if(!phase)
- {
- axis2_conf_free(conf, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
- AXIS2_PHASE_TRANSPORT_IN);
- return NULL;
- }
-
- /* In case of using security we need to find the service/operation parameters before the
- * dispatch phase. This is required to give parameters to the security inflow.*/
- uri_dispatch = axis2_req_uri_disp_create(env);
- if(uri_dispatch)
- {
- axis2_handler_t *handler = NULL;
- handler = axis2_disp_get_base(uri_dispatch, env);
- axis2_disp_free(uri_dispatch, env);
- axis2_phase_add_handler_at(phase, env, 0, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
- }
-
- addr_dispatch = axis2_addr_disp_create(env);
- if(addr_dispatch)
- {
- axis2_handler_t *handler = NULL;
- handler = axis2_disp_get_base(addr_dispatch, env);
- axis2_disp_free(addr_dispatch, env);
- axis2_phase_add_handler_at(phase, env, 1, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
- }
-
- status
- = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase);
- if(AXIS2_SUCCESS != status)
- {
- axis2_conf_free(conf, env);
- axis2_phase_free(phase, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding phase %s into in phases upto and including post dispatch list failed",
- AXIS2_PHASE_TRANSPORT_IN);
- return NULL;
- }
-
- phase = axis2_phase_create(env, AXIS2_PHASE_PRE_DISPATCH);
- if(!phase)
- {
- axis2_conf_free(conf, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
- AXIS2_PHASE_PRE_DISPATCH);
- return NULL;
- }
-
- status
- = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase);
- if(AXIS2_SUCCESS != status)
- {
- axis2_conf_free(conf, env);
- axis2_phase_free(phase, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding phase %s into in phases upto and including post dispatch list failed",
- AXIS2_PHASE_PRE_DISPATCH);
- return NULL;
- }
- }
-
- conf->all_svcs = axutil_hash_make(env);
- if(!conf->all_svcs)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed");
- return NULL;
- }
-
- conf->all_init_svcs = axutil_hash_make(env);
- if(!conf->all_init_svcs)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all init services map failed");
- return NULL;
- }
-
- conf->msg_recvs = axutil_hash_make(env);
- if(!conf->msg_recvs)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receivers map failed.");
- return NULL;
- }
-
- conf->faulty_svcs = axutil_hash_make(env);
- if(!conf->faulty_svcs)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault services map failed");
- return NULL;
- }
-
- conf->faulty_modules = axutil_hash_make(env);
- if(!conf->faulty_modules)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault modules map failed");
- return NULL;
- }
-
- conf->all_modules = axutil_hash_make(env);
- if(!conf->all_modules)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all modules map failed");
- return NULL;
- }
-
- conf->name_to_version_map = axutil_hash_make(env);
- if(!conf->name_to_version_map)
- {
- axis2_conf_free(conf, env);
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating name to version map failed");
- return NULL;
- }
-
- conf->base = axis2_desc_create(env);
- if(!conf->base)
- {
- axis2_conf_free(conf, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Creating Axis2 configuration base description failed");
- return NULL;
- }
-
- return conf;
-}
-
-AXIS2_EXTERN void AXIS2_CALL
-axis2_conf_free(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- int i = 0;
-
- if(!conf)
- {
- /* nothing to free */
- return;
- }
-
- if(conf->param_container)
- {
- axutil_param_container_free(conf->param_container, env);
- }
-
- if(conf->svc_grps)
- {
- axutil_hash_index_t *hi = NULL;
- void *val = NULL;
- for(hi = axutil_hash_first(conf->svc_grps, env); hi; hi = axutil_hash_next(env, hi))
- {
- axis2_svc_grp_t *svc_grp = NULL;
- axutil_hash_this(hi, NULL, NULL, &val);
- svc_grp = (axis2_svc_grp_t *)val;
- if(svc_grp)
- {
- axis2_svc_grp_free(svc_grp, env);
- }
- }
- axutil_hash_free(conf->svc_grps, env);
- }
-
- for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
- {
- if(conf->transports_in[i])
- {
- axis2_transport_in_desc_free(conf->transports_in[i], env);
- }
- }
-
- for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
- {
- if(conf->transports_out[i])
- {
- axis2_transport_out_desc_free(conf->transports_out[i], env);
- }
- }
-
- if(conf->dep_engine)
- {
- axis2_dep_engine_free(conf->dep_engine, env);
- }
-
- if(conf->all_modules)
- {
- axutil_hash_index_t *hi = NULL;
- void *val = NULL;
- for(hi = axutil_hash_first(conf->all_modules, env); hi; hi = axutil_hash_next(env, hi))
- {
- axis2_module_desc_t *module_desc = NULL;
- axutil_hash_this(hi, NULL, NULL, &val);
- module_desc = (axis2_module_desc_t *)val;
- if(module_desc)
- {
- axis2_module_desc_free(module_desc, env);
- }
- }
- axutil_hash_free(conf->all_modules, env);
- }
-
- if(conf->name_to_version_map)
- {
- axutil_hash_index_t *hi = NULL;
- void *val = NULL;
- for(hi = axutil_hash_first(conf->name_to_version_map, env); hi; hi = axutil_hash_next(env,
- hi))
- {
- axis2_char_t *module_ver = NULL;
- axutil_hash_this(hi, NULL, NULL, &val);
- module_ver = (axis2_char_t *)val;
- if(module_ver)
- {
- AXIS2_FREE(env->allocator, module_ver);
- }
- }
- axutil_hash_free(conf->name_to_version_map, env);
- }
-
- if(conf->engaged_module_list)
- {
- for(i = 0; i < axutil_array_list_size(conf->engaged_module_list, env); i++)
- {
- axutil_qname_t *module_desc_qname = NULL;
- module_desc_qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list,
- env, i);
- if(module_desc_qname)
- {
- axutil_qname_free(module_desc_qname, env);
- }
- }
- axutil_array_list_free(conf->engaged_module_list, env);
- }
-
- if(conf->out_phases)
- {
- for(i = 0; i < axutil_array_list_size(conf->out_phases, env); i++)
- {
- axis2_phase_t *phase = NULL;
- phase = (axis2_phase_t *)axutil_array_list_get(conf->out_phases, env, i);
- if(phase)
- {
- axis2_phase_free(phase, env);
- }
- }
- axutil_array_list_free(conf->out_phases, env);
- }
-
- if(conf->in_fault_phases)
- {
- for(i = 0; i < axutil_array_list_size(conf->in_fault_phases, env); i++)
- {
- axis2_phase_t *phase = NULL;
- phase = (axis2_phase_t *)axutil_array_list_get(conf->in_fault_phases, env, i);
- if(phase)
- {
- axis2_phase_free(phase, env);
- }
- }
- axutil_array_list_free(conf->in_fault_phases, env);
- }
-
- if(conf->out_fault_phases)
- {
- for(i = 0; i < axutil_array_list_size(conf->out_fault_phases, env); i++)
- {
- axis2_phase_t *phase = NULL;
- phase = (axis2_phase_t *)axutil_array_list_get(conf->out_fault_phases, env, i);
- if(phase)
- {
- axis2_phase_free(phase, env);
- }
- }
- axutil_array_list_free(conf->out_fault_phases, env);
- }
-
- if(conf->in_phases_upto_and_including_post_dispatch)
- {
- for(i = 0; i < axutil_array_list_size(conf-> in_phases_upto_and_including_post_dispatch,
- env); i++)
- {
- axis2_phase_t *phase = NULL;
- phase = (axis2_phase_t *)axutil_array_list_get(
- conf-> in_phases_upto_and_including_post_dispatch, env, i);
- if(phase)
- {
- axis2_phase_free(phase, env);
- }
- }
- axutil_array_list_free(conf-> in_phases_upto_and_including_post_dispatch, env);
- }
-
- if(conf->all_svcs)
- {
- axutil_hash_free(conf->all_svcs, env);
- }
-
- if(conf->all_init_svcs)
- {
- axutil_hash_free(conf->all_init_svcs, env);
- }
-
- if(conf->msg_recvs)
- {
- axutil_hash_index_t *hi = NULL;
- void *val = NULL;
- for(hi = axutil_hash_first(conf->msg_recvs, env); hi; hi = axutil_hash_next(env, hi))
- {
- axis2_msg_recv_t *msg_recv = NULL;
- axutil_hash_this(hi, NULL, NULL, &val);
- msg_recv = (axis2_msg_recv_t *)val;
- if(msg_recv)
- {
- axis2_msg_recv_free(msg_recv, env);
- msg_recv = NULL;
- }
- }
- axutil_hash_free(conf->msg_recvs, env);
- }
-
- if(conf->faulty_svcs)
- {
- axutil_hash_free(conf->faulty_svcs, env);
- }
-
- if(conf->faulty_modules)
- {
- axutil_hash_index_t *hi = NULL;
- void *val = NULL;
- for(hi = axutil_hash_first(conf->faulty_modules, env); hi; hi = axutil_hash_next(env, hi))
- {
- axis2_module_desc_t *module_desc = NULL;
- axutil_hash_this(hi, NULL, NULL, &val);
- module_desc = (axis2_module_desc_t *)val;
- if(module_desc)
- {
- axis2_module_desc_free(module_desc, env);
- }
- }
- axutil_hash_free(conf->faulty_modules, env);
- }
-
- if(conf->handlers)
- {
- int i = 0;
- for(i = 0; i < axutil_array_list_size(conf->handlers, env); i++)
- {
- axis2_handler_desc_t *handler_desc = NULL;
- handler_desc = (axis2_handler_desc_t *)axutil_array_list_get(conf->handlers, env, i);
- if(handler_desc)
- {
- axis2_handler_desc_free(handler_desc, env);
- }
- }
- axutil_array_list_free(conf->handlers, env);
- }
-
- if(conf->axis2_repo)
- {
- AXIS2_FREE(env->allocator, conf->axis2_repo);
- }
-
- if(conf->base)
- {
- axis2_desc_free(conf->base, env);
- }
-
- if(conf->axis2_xml)
- {
- AXIS2_FREE(env->allocator, conf->axis2_xml);
- }
-
- AXIS2_FREE(env->allocator, conf);
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_svc_grp(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_svc_grp_t * svc_grp)
-{
- axutil_hash_t *svcs = NULL;
- axutil_hash_index_t *index_i = NULL;
- axis2_char_t *svc_name = NULL;
- const axis2_char_t *svc_grp_name = NULL;
-
- AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE);
-
- svcs = axis2_svc_grp_get_all_svcs(svc_grp, env);
- if(!conf->all_svcs)
- {
- conf->all_svcs = axutil_hash_make(env);
- if(!conf->all_svcs)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed");
- return AXIS2_FAILURE;
- }
- }
-
- index_i = axutil_hash_first(svcs, env);
- while(index_i)
- {
- void *value = NULL;
- axis2_svc_t *desc = NULL;
- axis2_svc_t *temp_svc = NULL;
- const axutil_qname_t *svc_qname = NULL;
-
- axutil_hash_this(index_i, NULL, NULL, &value);
- desc = (axis2_svc_t *)value;
- svc_qname = axis2_svc_get_qname(desc, env);
- svc_name = axutil_qname_get_localpart(svc_qname, env);
- temp_svc = axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING);
-
- /* No two service names deployed in the engine can be same */
- if(temp_svc)
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "There is already a service called %s in the "
- "all services list of axis2 configuration.", svc_name);
- return AXIS2_FAILURE;
- }
-
- index_i = axutil_hash_next(env, index_i);
- }
-
- svcs = axis2_svc_grp_get_all_svcs(svc_grp, env);
- index_i = axutil_hash_first(svcs, env);
-
- while(index_i)
- {
- void *value = NULL;
- axis2_svc_t *desc = NULL;
-
- axutil_hash_this(index_i, NULL, NULL, &value);
- desc = (axis2_svc_t *)value;
- svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(desc, env), env);
- axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, desc);
- index_i = axutil_hash_next(env, index_i);
- }
-
- svc_grp_name = axis2_svc_grp_get_name(svc_grp, env);
- if(!conf->svc_grps)
- {
- conf->svc_grps = axutil_hash_make(env);
- if(!conf->svc_grps)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed");
- return AXIS2_FAILURE;
- }
- }
-
- axutil_hash_set(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING, svc_grp);
-
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL
-axis2_conf_get_svc_grp(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * svc_grp_name)
-{
- AXIS2_PARAM_CHECK(env->error, svc_grp_name, NULL);
-
- if(!conf->svc_grps)
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_CONF, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Axis2 configuration does not contain a service group map");
- return NULL;
- }
- return (axis2_svc_grp_t *)(axutil_hash_get(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING));
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_svc_grps(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->svc_grps;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_svc(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_svc_t * svc)
-{
- axis2_phase_resolver_t *phase_resolver = NULL;
- axis2_svc_grp_t *svc_grp = NULL;
- const axis2_char_t *svc_grp_name = NULL;
- axis2_status_t status = AXIS2_FAILURE;
-
- AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE);
-
- /* We need to first create a service group with the same name as the
- * service and make it the parent of service */
- svc_grp_name = axis2_svc_get_name(svc, env);
- if(!svc_grp_name)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service has no name set");
- return AXIS2_FAILURE;
- }
-
- svc_grp = axis2_svc_grp_create(env);
- if(!svc_grp)
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Creating service group as parent of service %s failed", svc_grp_name);
- return AXIS2_FAILURE;
- }
-
- status = axis2_svc_grp_set_name(svc_grp, env, svc_grp_name);
- if(AXIS2_SUCCESS != status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name to service group failed");
- return status;
- }
-
- status = axis2_svc_grp_set_parent(svc_grp, env, conf);
- if(AXIS2_SUCCESS != status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting parent to service group %s failed",
- svc_grp_name);
- return status;
- }
-
- phase_resolver = axis2_phase_resolver_create_with_config_and_svc(env, conf, svc);
- if(!phase_resolver)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s",
- axis2_svc_get_name(svc, env));
- return AXIS2_FAILURE;
- }
-
- status = axis2_phase_resolver_build_execution_chains_for_svc(phase_resolver, env);
- axis2_phase_resolver_free(phase_resolver, env);
- if(AXIS2_SUCCESS != status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building chains failed within phase resolver "
- "for service %s", axis2_svc_get_name(svc, env));
- return status;
- }
-
- status = axis2_svc_grp_add_svc(svc_grp, env, svc);
- if(AXIS2_SUCCESS != status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding service %s to service group %s failed",
- svc_grp_name, svc_grp_name);
- return status;
- }
-
- status = axis2_conf_add_svc_grp(conf, env, svc_grp);
- return status;
-}
-
-AXIS2_EXTERN axis2_svc_t *AXIS2_CALL
-axis2_conf_get_svc(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * svc_name)
-{
- AXIS2_PARAM_CHECK(env->error, svc_name, NULL);
-
- return axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING);
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_remove_svc(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * svc_name)
-{
- AXIS2_PARAM_CHECK(env->error, svc_name, AXIS2_FAILURE);
-
- axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL);
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_param(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axutil_param_t * param)
-{
- axis2_status_t status = AXIS2_FAILURE;
- axis2_char_t *param_name = axutil_param_get_name(param, env);
-
- AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE);
-
- if(axis2_conf_is_param_locked(conf, env, param_name))
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for Axis2 configuration",
- param_name);
- return AXIS2_FAILURE;
- }
- else
- {
- status = axutil_param_container_add_param(conf->param_container, env, param);
- }
- return status;
-}
-
-AXIS2_EXTERN axutil_param_t *AXIS2_CALL
-axis2_conf_get_param(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * name)
-{
- AXIS2_PARAM_CHECK(env->error, name, NULL);
-
- if(!conf->param_container)
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Param container is not set in axis2 configuraion");
- return NULL;
- }
-
- return axutil_param_container_get_param(conf->param_container, env, name);
-
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_all_params(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return axutil_param_container_get_params(conf->param_container, env);
-
-}
-
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-axis2_conf_is_param_locked(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * param_name)
-{
- axutil_param_t *param = NULL;
-
- AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE);
-
- param = axis2_conf_get_param(conf, env, param_name);
- return (param && axutil_param_is_locked(param, env));
-}
-
-AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL
-axis2_conf_get_transport_in(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const AXIS2_TRANSPORT_ENUMS trans_enum)
-{
- return (axis2_transport_in_desc_t *)conf->transports_in[trans_enum];
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_transport_in(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_transport_in_desc_t * transport,
- const AXIS2_TRANSPORT_ENUMS trans_enum)
-{
- AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE);
-
- conf->transports_in[trans_enum] = transport;
-
- return AXIS2_SUCCESS;
-
-}
-
-AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL
-axis2_conf_get_transport_out(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const AXIS2_TRANSPORT_ENUMS trans_enum)
-{
- return conf->transports_out[trans_enum];
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_transport_out(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_transport_out_desc_t * transport,
- const AXIS2_TRANSPORT_ENUMS trans_enum)
-{
- AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE);
-
- conf->transports_out[trans_enum] = transport;
-
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_transport_in_desc_t **AXIS2_CALL
-axis2_conf_get_all_in_transports(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return (axis2_transport_in_desc_t **)conf->transports_in;
-}
-
-AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
-axis2_conf_get_module(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axutil_qname_t * qname)
-{
- axis2_char_t *name = NULL;
- axis2_module_desc_t *ret = NULL;
- axis2_char_t *module_name = NULL;
- axutil_qname_t *mod_qname = NULL;
- const axis2_char_t *def_mod_ver = NULL;
-
- AXIS2_PARAM_CHECK(env->error, qname, NULL);
-
- name = axutil_qname_to_string((axutil_qname_t *)qname, env);
- ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING);
- if(ret)
- {
- return ret;
- }
- module_name = axutil_qname_get_localpart(qname, env);
- if(!module_name)
- {
- return NULL;
- }
- def_mod_ver = axis2_conf_get_default_module_version(conf, env, module_name);
- mod_qname = axis2_core_utils_get_module_qname(env, name, def_mod_ver);
- if(!mod_qname)
- {
- return NULL;
- }
- name = axutil_qname_to_string(mod_qname, env);
- ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING);
- axutil_qname_free(mod_qname, env);
- mod_qname = NULL;
- return ret;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_all_engaged_modules(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->engaged_module_list;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_in_phases_upto_and_including_post_dispatch(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->in_phases_upto_and_including_post_dispatch;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_out_flow(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->out_phases;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_in_fault_flow(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->in_fault_phases;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_out_fault_flow(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->out_fault_phases;
-}
-
-AXIS2_EXTERN axis2_transport_out_desc_t **AXIS2_CALL
-axis2_conf_get_all_out_transports(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return (axis2_transport_out_desc_t **)conf->transports_out;
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_faulty_svcs(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->faulty_svcs;
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_faulty_modules(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->faulty_modules;
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_svcs(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- /*axutil_hash_t *sgs = NULL;
- axutil_hash_index_t *index_i = NULL;
- axutil_hash_index_t *index_j = NULL;
- void *value = NULL;
- void *value2 = NULL;
- axis2_svc_grp_t *axis_svc_grp = NULL;
- axutil_hash_t *svcs = NULL;
- axis2_svc_t *svc = NULL;
- axis2_char_t *svc_name = NULL;
- */
-
- /* Do we need to do all the following of retrieving all service groups and
- * then add all services from each group to conf->all_svcs and then finally
- * return conf->all_svcs?. We have already done this when
- * adding each service group to the conf, so just returning conf->all_svcs
- * here would be enough - Damitha */
- /*sgs = axis2_conf_get_all_svc_grps(conf, env);
- index_i = axutil_hash_first(sgs, env);
- while(index_i)
- {
- axutil_hash_this(index_i, NULL, NULL, &value);
- axis_svc_grp = (axis2_svc_grp_t *)value;
- svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env);
- index_j = axutil_hash_first(svcs, env);
- while(index_j)
- {
- axutil_hash_this(index_j, NULL, NULL, &value2);
- svc = (axis2_svc_t *)value2;
- svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env);
- axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc);
-
- index_j = axutil_hash_next(env, index_j);
- }
-
- index_i = axutil_hash_next(env, index_i);
- }*/
- return conf->all_svcs;
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_svcs_to_load(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- axutil_hash_t *sgs = NULL;
- axutil_hash_index_t *index_i = NULL;
- axutil_hash_index_t *index_j = NULL;
- void *value = NULL;
- void *value2 = NULL;
- axis2_svc_grp_t *axis_svc_grp = NULL;
- axutil_hash_t *svcs = NULL;
- axis2_svc_t *svc = NULL;
- axis2_char_t *svc_name = NULL;
-
- sgs = axis2_conf_get_all_svc_grps(conf, env);
- index_i = axutil_hash_first(sgs, env);
- while(index_i)
- {
- axutil_hash_this(index_i, NULL, NULL, &value);
- axis_svc_grp = (axis2_svc_grp_t *)value;
- svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env);
- index_j = axutil_hash_first(svcs, env);
- while(index_j)
- {
- axutil_param_t *param = NULL;
- axutil_hash_this(index_j, NULL, NULL, &value2);
- svc = (axis2_svc_t *)value2;
- svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env);
- param = axis2_svc_get_param(svc, env, AXIS2_LOAD_SVC_STARTUP);
- if(param)
- {
- axutil_hash_set(conf->all_init_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc);
- }
-
- index_j = axutil_hash_next(env, index_j);
- }
-
- index_i = axutil_hash_next(env, index_i);
- }
- return conf->all_init_svcs;
-}
-
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-axis2_conf_is_engaged(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axutil_qname_t * module_name)
-{
- const axutil_qname_t *def_mod_qname = NULL;
- axis2_module_desc_t *def_mod = NULL;
- int i = 0;
- int size = 0;
-
- AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FALSE);
-
- def_mod
- = axis2_conf_get_default_module(conf, env, axutil_qname_get_localpart(module_name, env));
- if(def_mod)
- {
- def_mod_qname = axis2_module_desc_get_qname(def_mod, env);
- }
-
- size = axutil_array_list_size(conf->engaged_module_list, env);
- for(i = 0; i < size; i++)
- {
- axutil_qname_t *qname = NULL;
- qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
- if(axutil_qname_equals(module_name, env, qname) || (def_mod_qname && axutil_qname_equals(
- def_mod_qname, env, qname)))
- {
- return AXIS2_TRUE;
- }
- }
-
- return AXIS2_FALSE;
-}
-
-AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL
-axis2_conf_get_phases_info(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->phases_info;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_phases_info(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_phases_info_t * phases_info)
-{
- AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE);
-
- if(conf->phases_info)
- {
- axis2_phases_info_free(phases_info, env);
- conf->phases_info = NULL;
- }
- conf->phases_info = phases_info;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_msg_recv(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * key,
- axis2_msg_recv_t * msg_recv)
-{
- AXIS2_PARAM_CHECK(env->error, key, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error, msg_recv, AXIS2_FAILURE);
- if(!conf->msg_recvs)
- {
- conf->msg_recvs = axutil_hash_make(env);
- if(!conf->msg_recvs)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receiver map failed");
- return AXIS2_FAILURE;
- }
- }
- axutil_hash_set(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING, msg_recv);
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL
-axis2_conf_get_msg_recv(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_char_t * key)
-{
- return (axis2_msg_recv_t *)axutil_hash_get(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING);
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_out_phases(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axutil_array_list_t * out_phases)
-{
- AXIS2_PARAM_CHECK(env->error, out_phases, AXIS2_FAILURE);
-
- if(conf->out_phases)
- {
- axutil_array_list_free(conf->out_phases, env);
- conf->out_phases = NULL;
- }
- conf->out_phases = out_phases;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
-axis2_conf_get_out_phases(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->out_phases;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_in_fault_phases(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axutil_array_list_t * list)
-{
- AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE);
-
- if(conf->in_fault_phases)
- {
- axutil_array_list_free(conf->in_fault_phases, env);
- conf->in_fault_phases = NULL;
- }
- conf->in_fault_phases = list;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_out_fault_phases(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axutil_array_list_t * list)
-{
- AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE);
-
- if(conf->out_fault_phases)
- {
- axutil_array_list_free(conf->out_fault_phases, env);
- conf->out_fault_phases = NULL;
- }
- conf->out_fault_phases = list;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
-axis2_conf_get_all_modules(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->all_modules;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_module(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_module_desc_t * module)
-{
- const axutil_qname_t *module_qname = NULL;
-
- AXIS2_PARAM_CHECK(env->error, module, AXIS2_FAILURE);
-
- axis2_module_desc_set_parent(module, env, conf);
-
- module_qname = axis2_module_desc_get_qname(module, env);
- if(module_qname)
- {
- axis2_char_t *module_name = NULL;
- module_name = axutil_qname_to_string((axutil_qname_t *)module_qname, env);
- axutil_hash_set(conf->all_modules, module_name, AXIS2_HASH_KEY_STRING, module);
- }
-
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_default_dispatchers(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- axis2_phase_t *dispatch = NULL;
- axis2_status_t status = AXIS2_FAILURE;
- axis2_disp_t *rest_dispatch = NULL;
- axis2_disp_t *soap_action_based_dispatch = NULL;
- axis2_disp_t *soap_msg_body_based_dispatch = NULL;
- axis2_handler_t *handler = NULL;
- axis2_phase_t *post_dispatch = NULL;
- axis2_disp_checker_t *disp_checker = NULL;
-
- dispatch = axis2_phase_create(env, AXIS2_PHASE_DISPATCH);
- if(!dispatch)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", AXIS2_PHASE_DISPATCH);
- return AXIS2_FAILURE;
- }
-
- rest_dispatch = axis2_rest_disp_create(env);
- if(!rest_dispatch)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating rest dispatcher failed");
- return AXIS2_FAILURE;
- }
-
- handler = axis2_disp_get_base(rest_dispatch, env);
- axis2_disp_free(rest_dispatch, env);
- axis2_phase_add_handler_at(dispatch, env, 0, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
-
- soap_msg_body_based_dispatch = axis2_soap_body_disp_create(env);
- if(!soap_msg_body_based_dispatch)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap body based dispatcher failed");
- return AXIS2_FAILURE;
- }
-
- handler = axis2_disp_get_base(soap_msg_body_based_dispatch, env);
- axis2_disp_free(soap_msg_body_based_dispatch, env);
- axis2_phase_add_handler_at(dispatch, env, 1, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
-
- soap_action_based_dispatch = axis2_soap_action_disp_create(env);
- if(!soap_action_based_dispatch)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap action based dispatcher failed");
- return AXIS2_FAILURE;
- }
-
- handler = axis2_disp_get_base(soap_action_based_dispatch, env);
- axis2_disp_free(soap_action_based_dispatch, env);
- axis2_phase_add_handler_at(dispatch, env, 2, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
-
- status
- = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch);
- if(AXIS2_SUCCESS != status)
- {
- axis2_phase_free(dispatch, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding dispatcher into in phases upto and including post dispatch list failed");
- return status;
- }
-
- post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH);
- if(!post_dispatch)
- {
- axis2_phase_free(dispatch, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
- AXIS2_PHASE_POST_DISPATCH);
- return AXIS2_FAILURE;
- }
-
- disp_checker = axis2_disp_checker_create(env);
- handler = axis2_disp_checker_get_base(disp_checker, env);
- axis2_disp_checker_free(disp_checker, env);
- axis2_phase_add_handler_at(post_dispatch, env, 0, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
- handler = axis2_ctx_handler_create(env, NULL);
- axis2_phase_add_handler_at(post_dispatch, env, 1, handler);
- axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
-
- status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env,
- post_dispatch);
- if(AXIS2_SUCCESS != status)
- {
- axis2_phase_free(dispatch, env);
- axis2_phase_free(post_dispatch, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding post dispatcher into in phases upto and including post dispatch list failed");
- return status;
- }
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_dispatch_phase(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_phase_t * dispatch)
-{
- axis2_status_t status = AXIS2_FAILURE;
- axis2_handler_t *handler = NULL;
- axis2_phase_t *post_dispatch = NULL;
- axis2_disp_checker_t *disp_checker = NULL;
-
- AXIS2_PARAM_CHECK(env->error, dispatch, AXIS2_FAILURE);
-
- status
- = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch);
- if(AXIS2_FAILURE == status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding dispatcher into in phases upto and including post dispatch list failed");
- return AXIS2_FAILURE;
- }
-
- post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH);
- if(!post_dispatch)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
- AXIS2_PHASE_POST_DISPATCH);
- axis2_phase_free(dispatch, env);
- return AXIS2_FAILURE;
- }
-
- disp_checker = axis2_disp_checker_create(env);
-
- handler = axis2_disp_checker_get_base(disp_checker, env);
- axis2_phase_add_handler_at(post_dispatch, env, 0, handler);
-
- status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env,
- post_dispatch);
- if(AXIS2_FAILURE == status)
- {
- axis2_phase_free(dispatch, env);
- axis2_phase_free(post_dispatch, env);
- axis2_disp_checker_free(disp_checker, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "Adding post dispatcher into in phases upto and including post dispatch list failed");
- return AXIS2_FAILURE;
- }
- return AXIS2_SUCCESS;
-}
-
-/**
- * For each module reference qname stored in dep_engine this function is called.
- * All module_desc instances are stored in axis2_conf. So each module_desc
- * is retrieved from there by giving module_qname and engaged globally by
- * calling phase_resolvers engage_module_globally function. Modules are added
- * to axis2_conf's engaged module list.
- */
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_engage_module(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axutil_qname_t * module_ref)
-{
- axis2_module_desc_t *module_desc = NULL;
- axis2_bool_t is_new_module = AXIS2_FALSE;
- axis2_bool_t to_be_engaged = AXIS2_TRUE;
- axis2_dep_engine_t *dep_engine = NULL;
- axis2_status_t status = AXIS2_FAILURE;
- axis2_char_t *file_name = NULL;
-
- AXIS2_PARAM_CHECK(env->error, module_ref, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
-
- module_desc = axis2_conf_get_module(conf, env, module_ref);
- if(!module_desc)
- {
- axutil_file_t *file = NULL;
- const axis2_char_t *repos_path = NULL;
- axis2_arch_file_data_t *file_data = NULL;
- axis2_char_t *temp_path1 = NULL;
- axis2_char_t *temp_path2 = NULL;
- axis2_char_t *temp_path3 = NULL;
- axis2_char_t *path = NULL;
- axutil_param_t *module_dir_param = NULL;
- axis2_char_t *module_dir = NULL;
- axis2_bool_t flag;
- axis2_char_t *axis2_xml = NULL;
-
- file_name = axutil_qname_get_localpart(module_ref, env);
- file = (axutil_file_t *)axis2_arch_reader_create_module_arch(env, file_name);
- /* This flag is to check whether conf is built using axis2
- * xml configuration file instead of a repository. */
- flag = axis2_conf_get_axis2_flag(conf, env);
-
- if(!flag)
- {
- repos_path = axis2_conf_get_repo(conf, env);
- temp_path1 = axutil_stracat(env, repos_path, AXIS2_PATH_SEP_STR);
- temp_path2 = axutil_stracat(env, temp_path1, AXIS2_MODULE_FOLDER);
- temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR);
- path = axutil_stracat(env, temp_path3, file_name);
- AXIS2_FREE(env->allocator, temp_path1);
- AXIS2_FREE(env->allocator, temp_path2);
- AXIS2_FREE(env->allocator, temp_path3);
- }
- else
- {
- /**
- * This case is to obtain module path from the axis2.xml
- */
- axis2_xml = (axis2_char_t *)axis2_conf_get_axis2_xml(conf, env);
- module_dir_param = axis2_conf_get_param(conf, env, AXIS2_MODULE_DIR);
-
- if(module_dir_param)
- {
- module_dir = (axis2_char_t *)axutil_param_get_value(module_dir_param, env);
- }
- else
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
- "moduleDir parameter not available in axis2.xml.");
-
- return AXIS2_FAILURE;
- }
-
- temp_path1 = axutil_strcat(env, module_dir, AXIS2_PATH_SEP_STR, NULL);
- path = axutil_strcat(env, temp_path1, file_name, NULL);
- }
-
- axutil_file_set_path(file, env, path);
- file_data = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_MODULE, file);
- /*if(!flag)
- {
- dep_engine = axis2_dep_engine_create_with_repos_name(env, repos_path);
- }
- else
- {
- dep_engine = axis2_dep_engine_create_with_axis2_xml(env, axis2_xml);
- }*/
- dep_engine = conf->dep_engine;
-
- axis2_dep_engine_set_current_file_item(dep_engine, env, file_data);
-
- /* this module_dir set the path of the module directory
- * Pertaining to this module. This value will use inside the
- * axis2_dep_engine_build_module function
- */
-
- axis2_dep_engine_set_module_dir(dep_engine, env, path);
-
- if(path)
- {
- AXIS2_FREE(env->allocator, path);
- }
-
- if(file_data)
- {
- axis2_arch_file_data_free(file_data, env);
- }
-
- module_desc = axis2_dep_engine_build_module(dep_engine, env, file, conf);
- axutil_file_free(file, env);
- is_new_module = AXIS2_TRUE;
- }
-
- if(module_desc)
- {
- int size = 0;
- int i = 0;
- const axutil_qname_t *module_qname = NULL;
-
- size = axutil_array_list_size(conf->engaged_module_list, env);
- module_qname = axis2_module_desc_get_qname(module_desc, env);
- for(i = 0; i < size; i++)
- {
- axutil_qname_t *qname = NULL;
-
- qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
- if(axutil_qname_equals(module_qname, env, qname))
- {
- to_be_engaged = AXIS2_FALSE;
- }
- }
- }
- else
- {
- AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE, AXIS2_FAILURE);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Either module description not set or building"
- "module description failed for module %s", file_name);
-
- return AXIS2_FAILURE;
- }
-
- if(to_be_engaged)
- {
- axis2_phase_resolver_t *phase_resolver = NULL;
- axutil_qname_t *module_qref_l = NULL;
- const axutil_qname_t *module_qname = NULL;
- axis2_char_t *module_name = NULL;
-
- module_qname = axis2_module_desc_get_qname(module_desc, env);
- module_name = axutil_qname_get_localpart(module_qname, env);
- phase_resolver = axis2_phase_resolver_create_with_config(env, conf);
- if(!phase_resolver)
- {
- return AXIS2_FAILURE;
- }
-
- status = axis2_phase_resolver_engage_module_globally(phase_resolver, env, module_desc);
- axis2_phase_resolver_free(phase_resolver, env);
- if(!status)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s globally failed",
- module_name);
- return status;
- }
- module_qref_l = axutil_qname_clone((axutil_qname_t *)module_qname, env);
- status = axutil_array_list_add(conf->engaged_module_list, env, module_qref_l);
- }
-
- if(is_new_module)
- {
- status = axis2_conf_add_module(conf, env, module_desc);
- }
-
- return status;
-}
-
-AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
-axis2_conf_get_repo(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->axis2_repo;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_repo(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_char_t * repos_path)
-{
- if(conf->axis2_repo)
- {
- AXIS2_FREE(env->allocator, conf->axis2_repo);
- conf->axis2_repo = NULL;
- }
- conf->axis2_repo = axutil_strdup(env, repos_path);
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
-axis2_conf_get_axis2_xml(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return axutil_strdup(env, conf->axis2_xml);
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_axis2_xml(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_char_t * axis2_xml)
-{
- AXIS2_PARAM_CHECK(env->error, axis2_xml, AXIS2_FAILURE);
- conf->axis2_xml = axutil_strdup(env, axis2_xml);
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_dep_engine(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_dep_engine_t * dep_engine)
-{
- conf->dep_engine = dep_engine;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
-axis2_conf_get_default_module_version(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * module_name)
-{
- axutil_hash_t *def_ver_map = NULL;
- AXIS2_PARAM_CHECK(env->error, module_name, NULL);
-
- def_ver_map = conf->name_to_version_map;
- if(!def_ver_map)
- {
- return NULL;
- }
- return axutil_hash_get(def_ver_map, module_name, AXIS2_HASH_KEY_STRING);
-}
-
-AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
-axis2_conf_get_default_module(
- const axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * module_name)
-{
- axis2_module_desc_t *ret_mod = NULL;
- axis2_char_t *mod_name = NULL;
- const axis2_char_t *mod_ver = NULL;
- axutil_hash_t *all_modules = NULL;
- axutil_qname_t *mod_qname = NULL;
-
- AXIS2_PARAM_CHECK(env->error, module_name, NULL);
-
- all_modules = conf->all_modules;
- mod_ver = axis2_conf_get_default_module_version(conf, env, module_name);
-
- if(!mod_ver)
- {
- mod_name = axutil_strdup(env, module_name);
- }
- else
- {
- axis2_char_t *tmp_name = NULL;
- tmp_name = axutil_stracat(env, module_name, "-");
- mod_name = axutil_stracat(env, tmp_name, mod_ver);
- AXIS2_FREE(env->allocator, tmp_name);
- }
- mod_qname = axutil_qname_create(env, mod_name, NULL, NULL);
- AXIS2_FREE(env->allocator, mod_name);
- mod_name = NULL;
-
- if(!mod_qname)
- {
- return NULL;
- }
- ret_mod = (axis2_module_desc_t *)axutil_hash_get(all_modules, axutil_qname_to_string(mod_qname,
- env), AXIS2_HASH_KEY_STRING);
-
- return ret_mod;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_add_default_module_version(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * module_name,
- const axis2_char_t * module_version)
-{
- axutil_hash_t *name_to_ver_map = NULL;
-
- AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK(env->error, module_version, AXIS2_FAILURE);
- /*
- * If we already have a default module version we don't put
- * it again
- */
- name_to_ver_map = conf->name_to_version_map;
-
- if(!axutil_hash_get(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING))
- {
- axis2_char_t *new_entry = axutil_strdup(env, module_version);
- if(!new_entry)
- {
- return AXIS2_FAILURE;
- }
- axutil_hash_set(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING, new_entry);
- return AXIS2_SUCCESS;
- }
- return AXIS2_FAILURE;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_engage_module_with_version(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- const axis2_char_t * module_name,
- const axis2_char_t * version_id)
-{
- axutil_qname_t *module_qname = NULL;
- axis2_status_t status = AXIS2_FAILURE;
-
- AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE);
-
- module_qname = axis2_core_utils_get_module_qname(env, module_name, version_id);
- if(!module_qname)
- {
- return AXIS2_FAILURE;
- }
- status = axis2_conf_engage_module(conf, env, module_qname);
- axutil_qname_free(module_qname, env);
- return status;
-}
-
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-axis2_conf_get_enable_mtom(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->enable_mtom;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_enable_mtom(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_bool_t enable_mtom)
-{
- conf->enable_mtom = enable_mtom;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-axis2_conf_get_axis2_flag(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->axis2_flag;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_axis2_flag(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_bool_t axis2_flag)
-{
- conf->axis2_flag = axis2_flag;
- return AXIS2_SUCCESS;
-}
-
-AXIS2_EXTERN axis2_bool_t AXIS2_CALL
-axis2_conf_get_enable_security(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->enable_security;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_enable_security(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- axis2_bool_t enable_security)
-{
- AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
-
- conf->enable_security = enable_security;
- return AXIS2_SUCCESS;
-}
-
-#if 0
-/* this seemed to be not used after 1.6.0 */
-AXIS2_EXTERN void *AXIS2_CALL
-axis2_conf_get_security_context(
- axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->security_context;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_set_security_context(
- axis2_conf_t * conf,
- const axutil_env_t * env,
- void *security_context)
-{
- AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
-
- conf->security_context = (void *) security_context;
- return AXIS2_SUCCESS;
-}
-#endif
-
-AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL
-axis2_conf_get_param_container(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->param_container;
-}
-
-AXIS2_EXTERN axis2_desc_t *AXIS2_CALL
-axis2_conf_get_base(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->base;
-}
-
-AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL
-axis2_conf_get_handlers(
- const axis2_conf_t * conf,
- const axutil_env_t * env)
-{
- return conf->handlers;
-}
-
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
-axis2_conf_disengage_module(
- const axis2_conf_t *conf,
- const axutil_env_t *env,
- const axutil_qname_t *module_ref)
-{
- axis2_module_desc_t *module_desc = NULL;
- axutil_hash_index_t *index = NULL;
- axis2_char_t *mod_name = NULL;
- int size = 0, i = 0;
- if(!module_ref)
- return AXIS2_FAILURE;
-
- mod_name = axutil_qname_get_localpart(module_ref, env);
- module_desc = axis2_conf_get_module(conf, env, module_ref);
- if(!module_desc)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "The requested module %s does not exist",
- mod_name);
- return AXIS2_FAILURE;
- }
- if(!axis2_conf_is_engaged((axis2_conf_t*)conf, env, module_ref))
- {
- AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, "%s Module is not engaged globally", mod_name);
- return AXIS2_FAILURE;
- }
- if(!conf->all_svcs)
- {
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "configuration does not have any services");
- return AXIS2_FAILURE;
-
- }
- for(index = axutil_hash_first(conf->all_svcs, env); index; index = axutil_hash_next(env, index))
- {
- axis2_svc_t *svc = NULL;
- void *v = NULL;
- const axis2_char_t *svc_name = NULL;
- axutil_hash_this(index, NULL, NULL, &v);
- svc = (axis2_svc_t *)v;
- if(svc)
- {
- svc_name = axis2_svc_get_name(svc, env);
- axis2_svc_disengage_module(svc, env, module_desc,(axis2_conf_t*) conf);
- }
- }
-
- size = axutil_array_list_size(conf->engaged_module_list, env);
- for(i = 0; i < size; i++)
- {
- axutil_qname_t *qname = NULL;
- qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
- if(axutil_qname_equals(module_ref, env, qname))
- {
- axutil_array_list_remove(conf->engaged_module_list, env, i);
- return AXIS2_SUCCESS;
- }
- }
-
- return AXIS2_FAILURE;
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 <string.h>
+#include <axis2_disp.h>
+#include "axis2_disp_checker.h"
+#include <axis2_conf.h>
+#include <axutil_dir_handler.h>
+#include <axis2_dep_engine.h>
+#include <axis2_arch_reader.h>
+#include <axis2_core_utils.h>
+
+struct axis2_conf
+{
+ axutil_hash_t *svc_grps;
+ axis2_transport_in_desc_t *transports_in[AXIS2_TRANSPORT_ENUM_MAX];
+ axis2_transport_out_desc_t *transports_out[AXIS2_TRANSPORT_ENUM_MAX];
+
+ /**
+ * All the modules already engaged can be found here.
+ */
+ axutil_array_list_t *engaged_module_list;
+
+ /*To store all the available modules (including version) */
+ axutil_hash_t *all_modules;
+
+ /*To store mapping between default version to module name */
+ axutil_hash_t *name_to_version_map;
+ axutil_array_list_t *out_phases;
+ axutil_array_list_t *in_fault_phases;
+ axutil_array_list_t *out_fault_phases;
+
+ /* All the system specific phases are stored here */
+ axutil_array_list_t *in_phases_upto_and_including_post_dispatch;
+
+ axis2_phases_info_t *phases_info;
+ axutil_hash_t *all_svcs;
+ axutil_hash_t *all_init_svcs;
+ axutil_hash_t *msg_recvs;
+ axutil_hash_t *faulty_svcs;
+ axutil_hash_t *faulty_modules;
+ axis2_char_t *axis2_repo;
+ axis2_char_t *axis2_xml;
+ axis2_dep_engine_t *dep_engine;
+ axutil_array_list_t *handlers;
+ axis2_bool_t enable_mtom;
+ /*This is used in rampart */
+ axis2_bool_t enable_security;
+
+ /** Configuration parameter container */
+ axutil_param_container_t *param_container;
+
+ /** Base description struct */
+ axis2_desc_t *base;
+
+ /** Mark whether conf is built using axis2 XML*/
+ axis2_bool_t axis2_flag;
+
+#if 0
+/* this seemed to be not used after 1.6.0 */
+/* This is a hack to keep rampart_context at client side */
+void *security_context;
+#endif
+};
+
+AXIS2_EXTERN axis2_conf_t *AXIS2_CALL
+axis2_conf_create(
+ const axutil_env_t * env)
+{
+ axis2_conf_t *conf = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_phase_t *phase = NULL;
+ int i = 0;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ conf = (axis2_conf_t *)AXIS2_MALLOC(env->allocator, sizeof(axis2_conf_t));
+ if(!conf)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "No memory");
+ return NULL;
+ }
+
+ memset((void *)conf, 0, sizeof(axis2_conf_t));
+
+ conf->param_container = (axutil_param_container_t *)axutil_param_container_create(env);
+ if(!conf->param_container)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating parameter container failed");
+ return NULL;
+ }
+
+ conf->svc_grps = axutil_hash_make(env);
+ if(!conf->svc_grps)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed");
+ return NULL;
+ }
+
+ for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
+ {
+ conf->transports_in[i] = NULL;
+ }
+
+ for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
+ {
+ conf->transports_out[i] = NULL;
+ }
+
+ conf->engaged_module_list = axutil_array_list_create(env, 0);
+ if(!conf->engaged_module_list)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating engaged module list failed");
+ return NULL;
+ }
+
+ conf->handlers = axutil_array_list_create(env, 0);
+ if(!conf->handlers)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating handler list failed");
+ return NULL;
+ }
+
+ conf->in_phases_upto_and_including_post_dispatch = axutil_array_list_create(env, 0);
+ if(!conf->in_phases_upto_and_including_post_dispatch)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Creating in phases list upto and including post dispatch failed");
+ return NULL;
+ }
+ else
+ {
+ axis2_disp_t *uri_dispatch = NULL;
+ axis2_disp_t *addr_dispatch = NULL;
+
+ phase = axis2_phase_create(env, AXIS2_PHASE_TRANSPORT_IN);
+ if(!phase)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
+ AXIS2_PHASE_TRANSPORT_IN);
+ return NULL;
+ }
+
+ /* In case of using security we need to find the service/operation parameters before the
+ * dispatch phase. This is required to give parameters to the security inflow.*/
+ uri_dispatch = axis2_req_uri_disp_create(env);
+ if(uri_dispatch)
+ {
+ axis2_handler_t *handler = NULL;
+ handler = axis2_disp_get_base(uri_dispatch, env);
+ axis2_disp_free(uri_dispatch, env);
+ axis2_phase_add_handler_at(phase, env, 0, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+ }
+
+ addr_dispatch = axis2_addr_disp_create(env);
+ if(addr_dispatch)
+ {
+ axis2_handler_t *handler = NULL;
+ handler = axis2_disp_get_base(addr_dispatch, env);
+ axis2_disp_free(addr_dispatch, env);
+ axis2_phase_add_handler_at(phase, env, 1, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+ }
+
+ status
+ = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase);
+ if(AXIS2_SUCCESS != status)
+ {
+ axis2_conf_free(conf, env);
+ axis2_phase_free(phase, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding phase %s into in phases upto and including post dispatch list failed",
+ AXIS2_PHASE_TRANSPORT_IN);
+ return NULL;
+ }
+
+ phase = axis2_phase_create(env, AXIS2_PHASE_PRE_DISPATCH);
+ if(!phase)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
+ AXIS2_PHASE_PRE_DISPATCH);
+ return NULL;
+ }
+
+ status
+ = axutil_array_list_add(conf->in_phases_upto_and_including_post_dispatch, env, phase);
+ if(AXIS2_SUCCESS != status)
+ {
+ axis2_conf_free(conf, env);
+ axis2_phase_free(phase, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding phase %s into in phases upto and including post dispatch list failed",
+ AXIS2_PHASE_PRE_DISPATCH);
+ return NULL;
+ }
+ }
+
+ conf->all_svcs = axutil_hash_make(env);
+ if(!conf->all_svcs)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed");
+ return NULL;
+ }
+
+ conf->all_init_svcs = axutil_hash_make(env);
+ if(!conf->all_init_svcs)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all init services map failed");
+ return NULL;
+ }
+
+ conf->msg_recvs = axutil_hash_make(env);
+ if(!conf->msg_recvs)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receivers map failed.");
+ return NULL;
+ }
+
+ conf->faulty_svcs = axutil_hash_make(env);
+ if(!conf->faulty_svcs)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault services map failed");
+ return NULL;
+ }
+
+ conf->faulty_modules = axutil_hash_make(env);
+ if(!conf->faulty_modules)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating fault modules map failed");
+ return NULL;
+ }
+
+ conf->all_modules = axutil_hash_make(env);
+ if(!conf->all_modules)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all modules map failed");
+ return NULL;
+ }
+
+ conf->name_to_version_map = axutil_hash_make(env);
+ if(!conf->name_to_version_map)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating name to version map failed");
+ return NULL;
+ }
+
+ conf->base = axis2_desc_create(env);
+ if(!conf->base)
+ {
+ axis2_conf_free(conf, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Creating Axis2 configuration base description failed");
+ return NULL;
+ }
+
+ return conf;
+}
+
+AXIS2_EXTERN void AXIS2_CALL
+axis2_conf_free(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ int i = 0;
+
+ if(!conf)
+ {
+ /* nothing to free */
+ return;
+ }
+
+ if(conf->param_container)
+ {
+ axutil_param_container_free(conf->param_container, env);
+ }
+
+ if(conf->svc_grps)
+ {
+ axutil_hash_index_t *hi = NULL;
+ void *val = NULL;
+ for(hi = axutil_hash_first(conf->svc_grps, env); hi; hi = axutil_hash_next(env, hi))
+ {
+ axis2_svc_grp_t *svc_grp = NULL;
+ axutil_hash_this(hi, NULL, NULL, &val);
+ svc_grp = (axis2_svc_grp_t *)val;
+ if(svc_grp)
+ {
+ axis2_svc_grp_free(svc_grp, env);
+ }
+ }
+ axutil_hash_free(conf->svc_grps, env);
+ }
+
+ for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
+ {
+ if(conf->transports_in[i])
+ {
+ axis2_transport_in_desc_free(conf->transports_in[i], env);
+ }
+ }
+
+ for(i = 0; i < AXIS2_TRANSPORT_ENUM_MAX; i++)
+ {
+ if(conf->transports_out[i])
+ {
+ axis2_transport_out_desc_free(conf->transports_out[i], env);
+ }
+ }
+
+ if(conf->dep_engine)
+ {
+ axis2_dep_engine_free(conf->dep_engine, env);
+ }
+
+ if(conf->all_modules)
+ {
+ axutil_hash_index_t *hi = NULL;
+ void *val = NULL;
+ for(hi = axutil_hash_first(conf->all_modules, env); hi; hi = axutil_hash_next(env, hi))
+ {
+ axis2_module_desc_t *module_desc = NULL;
+ axutil_hash_this(hi, NULL, NULL, &val);
+ module_desc = (axis2_module_desc_t *)val;
+ if(module_desc)
+ {
+ axis2_module_desc_free(module_desc, env);
+ }
+ }
+ axutil_hash_free(conf->all_modules, env);
+ }
+
+ if(conf->name_to_version_map)
+ {
+ axutil_hash_index_t *hi = NULL;
+ void *val = NULL;
+ for(hi = axutil_hash_first(conf->name_to_version_map, env); hi; hi = axutil_hash_next(env,
+ hi))
+ {
+ axis2_char_t *module_ver = NULL;
+ axutil_hash_this(hi, NULL, NULL, &val);
+ module_ver = (axis2_char_t *)val;
+ if(module_ver)
+ {
+ AXIS2_FREE(env->allocator, module_ver);
+ }
+ }
+ axutil_hash_free(conf->name_to_version_map, env);
+ }
+
+ if(conf->engaged_module_list)
+ {
+ for(i = 0; i < axutil_array_list_size(conf->engaged_module_list, env); i++)
+ {
+ axutil_qname_t *module_desc_qname = NULL;
+ module_desc_qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list,
+ env, i);
+ if(module_desc_qname)
+ {
+ axutil_qname_free(module_desc_qname, env);
+ }
+ }
+ axutil_array_list_free(conf->engaged_module_list, env);
+ }
+
+ if(conf->out_phases)
+ {
+ for(i = 0; i < axutil_array_list_size(conf->out_phases, env); i++)
+ {
+ axis2_phase_t *phase = NULL;
+ phase = (axis2_phase_t *)axutil_array_list_get(conf->out_phases, env, i);
+ if(phase)
+ {
+ axis2_phase_free(phase, env);
+ }
+ }
+ axutil_array_list_free(conf->out_phases, env);
+ }
+
+ if(conf->in_fault_phases)
+ {
+ for(i = 0; i < axutil_array_list_size(conf->in_fault_phases, env); i++)
+ {
+ axis2_phase_t *phase = NULL;
+ phase = (axis2_phase_t *)axutil_array_list_get(conf->in_fault_phases, env, i);
+ if(phase)
+ {
+ axis2_phase_free(phase, env);
+ }
+ }
+ axutil_array_list_free(conf->in_fault_phases, env);
+ }
+
+ if(conf->out_fault_phases)
+ {
+ for(i = 0; i < axutil_array_list_size(conf->out_fault_phases, env); i++)
+ {
+ axis2_phase_t *phase = NULL;
+ phase = (axis2_phase_t *)axutil_array_list_get(conf->out_fault_phases, env, i);
+ if(phase)
+ {
+ axis2_phase_free(phase, env);
+ }
+ }
+ axutil_array_list_free(conf->out_fault_phases, env);
+ }
+
+ if(conf->in_phases_upto_and_including_post_dispatch)
+ {
+ for(i = 0; i < axutil_array_list_size(conf-> in_phases_upto_and_including_post_dispatch,
+ env); i++)
+ {
+ axis2_phase_t *phase = NULL;
+ phase = (axis2_phase_t *)axutil_array_list_get(
+ conf-> in_phases_upto_and_including_post_dispatch, env, i);
+ if(phase)
+ {
+ axis2_phase_free(phase, env);
+ }
+ }
+ axutil_array_list_free(conf-> in_phases_upto_and_including_post_dispatch, env);
+ }
+
+ if(conf->all_svcs)
+ {
+ axutil_hash_free(conf->all_svcs, env);
+ }
+
+ if(conf->all_init_svcs)
+ {
+ axutil_hash_free(conf->all_init_svcs, env);
+ }
+
+ if(conf->msg_recvs)
+ {
+ axutil_hash_index_t *hi = NULL;
+ void *val = NULL;
+ for(hi = axutil_hash_first(conf->msg_recvs, env); hi; hi = axutil_hash_next(env, hi))
+ {
+ axis2_msg_recv_t *msg_recv = NULL;
+ axutil_hash_this(hi, NULL, NULL, &val);
+ msg_recv = (axis2_msg_recv_t *)val;
+ if(msg_recv)
+ {
+ axis2_msg_recv_free(msg_recv, env);
+ msg_recv = NULL;
+ }
+ }
+ axutil_hash_free(conf->msg_recvs, env);
+ }
+
+ if(conf->faulty_svcs)
+ {
+ axutil_hash_free(conf->faulty_svcs, env);
+ }
+
+ if(conf->faulty_modules)
+ {
+ axutil_hash_index_t *hi = NULL;
+ void *val = NULL;
+ for(hi = axutil_hash_first(conf->faulty_modules, env); hi; hi = axutil_hash_next(env, hi))
+ {
+ axis2_module_desc_t *module_desc = NULL;
+ axutil_hash_this(hi, NULL, NULL, &val);
+ module_desc = (axis2_module_desc_t *)val;
+ if(module_desc)
+ {
+ axis2_module_desc_free(module_desc, env);
+ }
+ }
+ axutil_hash_free(conf->faulty_modules, env);
+ }
+
+ if(conf->handlers)
+ {
+ int i = 0;
+ for(i = 0; i < axutil_array_list_size(conf->handlers, env); i++)
+ {
+ axis2_handler_desc_t *handler_desc = NULL;
+ handler_desc = (axis2_handler_desc_t *)axutil_array_list_get(conf->handlers, env, i);
+ if(handler_desc)
+ {
+ axis2_handler_desc_free(handler_desc, env);
+ }
+ }
+ axutil_array_list_free(conf->handlers, env);
+ }
+
+ if(conf->axis2_repo)
+ {
+ AXIS2_FREE(env->allocator, conf->axis2_repo);
+ }
+
+ if(conf->base)
+ {
+ axis2_desc_free(conf->base, env);
+ }
+
+ if(conf->axis2_xml)
+ {
+ AXIS2_FREE(env->allocator, conf->axis2_xml);
+ }
+
+ AXIS2_FREE(env->allocator, conf);
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_svc_grp(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_svc_grp_t * svc_grp)
+{
+ axutil_hash_t *svcs = NULL;
+ axutil_hash_index_t *index_i = NULL;
+ axis2_char_t *svc_name = NULL;
+ const axis2_char_t *svc_grp_name = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, svc_grp, AXIS2_FAILURE);
+
+ svcs = axis2_svc_grp_get_all_svcs(svc_grp, env);
+ if(!conf->all_svcs)
+ {
+ conf->all_svcs = axutil_hash_make(env);
+ if(!conf->all_svcs)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating all services map failed");
+ return AXIS2_FAILURE;
+ }
+ }
+
+ index_i = axutil_hash_first(svcs, env);
+ while(index_i)
+ {
+ void *value = NULL;
+ axis2_svc_t *desc = NULL;
+ axis2_svc_t *temp_svc = NULL;
+ const axutil_qname_t *svc_qname = NULL;
+
+ axutil_hash_this(index_i, NULL, NULL, &value);
+ desc = (axis2_svc_t *)value;
+ svc_qname = axis2_svc_get_qname(desc, env);
+ svc_name = axutil_qname_get_localpart(svc_qname, env);
+ temp_svc = axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING);
+
+ /* No two service names deployed in the engine can be same */
+ if(temp_svc)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_TWO_SVCS_CANNOT_HAVE_SAME_NAME, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "There is already a service called %s in the "
+ "all services list of axis2 configuration.", svc_name);
+ return AXIS2_FAILURE;
+ }
+
+ index_i = axutil_hash_next(env, index_i);
+ }
+
+ svcs = axis2_svc_grp_get_all_svcs(svc_grp, env);
+ index_i = axutil_hash_first(svcs, env);
+
+ while(index_i)
+ {
+ void *value = NULL;
+ axis2_svc_t *desc = NULL;
+
+ axutil_hash_this(index_i, NULL, NULL, &value);
+ desc = (axis2_svc_t *)value;
+ svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(desc, env), env);
+ axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, desc);
+ index_i = axutil_hash_next(env, index_i);
+ }
+
+ svc_grp_name = axis2_svc_grp_get_name(svc_grp, env);
+ if(!conf->svc_grps)
+ {
+ conf->svc_grps = axutil_hash_make(env);
+ if(!conf->svc_grps)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating service group map failed");
+ return AXIS2_FAILURE;
+ }
+ }
+
+ axutil_hash_set(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING, svc_grp);
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_svc_grp_t *AXIS2_CALL
+axis2_conf_get_svc_grp(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * svc_grp_name)
+{
+ AXIS2_PARAM_CHECK(env->error, svc_grp_name, NULL);
+
+ if(!conf->svc_grps)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_CONF, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Axis2 configuration does not contain a service group map");
+ return NULL;
+ }
+ return (axis2_svc_grp_t *)(axutil_hash_get(conf->svc_grps, svc_grp_name, AXIS2_HASH_KEY_STRING));
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_svc_grps(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->svc_grps;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_svc(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_svc_t * svc)
+{
+ axis2_phase_resolver_t *phase_resolver = NULL;
+ axis2_svc_grp_t *svc_grp = NULL;
+ const axis2_char_t *svc_grp_name = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+
+ AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE);
+
+ /* We need to first create a service group with the same name as the
+ * service and make it the parent of service */
+ svc_grp_name = axis2_svc_get_name(svc, env);
+ if(!svc_grp_name)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Service has no name set");
+ return AXIS2_FAILURE;
+ }
+
+ svc_grp = axis2_svc_grp_create(env);
+ if(!svc_grp)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Creating service group as parent of service %s failed", svc_grp_name);
+ return AXIS2_FAILURE;
+ }
+
+ status = axis2_svc_grp_set_name(svc_grp, env, svc_grp_name);
+ if(AXIS2_SUCCESS != status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting name to service group failed");
+ return status;
+ }
+
+ status = axis2_svc_grp_set_parent(svc_grp, env, conf);
+ if(AXIS2_SUCCESS != status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Setting parent to service group %s failed",
+ svc_grp_name);
+ return status;
+ }
+
+ phase_resolver = axis2_phase_resolver_create_with_config_and_svc(env, conf, svc);
+ if(!phase_resolver)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase resolver failed for service %s",
+ axis2_svc_get_name(svc, env));
+ return AXIS2_FAILURE;
+ }
+
+ status = axis2_phase_resolver_build_execution_chains_for_svc(phase_resolver, env);
+ axis2_phase_resolver_free(phase_resolver, env);
+ if(AXIS2_SUCCESS != status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Building chains failed within phase resolver "
+ "for service %s", axis2_svc_get_name(svc, env));
+ return status;
+ }
+
+ status = axis2_svc_grp_add_svc(svc_grp, env, svc);
+ if(AXIS2_SUCCESS != status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Adding service %s to service group %s failed",
+ svc_grp_name, svc_grp_name);
+ return status;
+ }
+
+ status = axis2_conf_add_svc_grp(conf, env, svc_grp);
+ return status;
+}
+
+AXIS2_EXTERN axis2_svc_t *AXIS2_CALL
+axis2_conf_get_svc(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * svc_name)
+{
+ AXIS2_PARAM_CHECK(env->error, svc_name, NULL);
+
+ return axutil_hash_get(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING);
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_remove_svc(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * svc_name)
+{
+ AXIS2_PARAM_CHECK(env->error, svc_name, AXIS2_FAILURE);
+
+ axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, NULL);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_param(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axutil_param_t * param)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_char_t *param_name = axutil_param_get_name(param, env);
+
+ AXIS2_PARAM_CHECK(env->error, param, AXIS2_FAILURE);
+
+ if(axis2_conf_is_param_locked(conf, env, param_name))
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_PARAMETER_LOCKED_CANNOT_OVERRIDE, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Parameter %s is locked for Axis2 configuration",
+ param_name);
+ return AXIS2_FAILURE;
+ }
+ else
+ {
+ status = axutil_param_container_add_param(conf->param_container, env, param);
+ }
+ return status;
+}
+
+AXIS2_EXTERN axutil_param_t *AXIS2_CALL
+axis2_conf_get_param(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * name)
+{
+ AXIS2_PARAM_CHECK(env->error, name, NULL);
+
+ if(!conf->param_container)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_STATE_PARAM_CONTAINER, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Param container is not set in axis2 configuraion");
+ return NULL;
+ }
+
+ return axutil_param_container_get_param(conf->param_container, env, name);
+
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_all_params(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return axutil_param_container_get_params(conf->param_container, env);
+
+}
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_conf_is_param_locked(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * param_name)
+{
+ axutil_param_t *param = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, param_name, AXIS2_FALSE);
+
+ param = axis2_conf_get_param(conf, env, param_name);
+ return (param && axutil_param_is_locked(param, env));
+}
+
+AXIS2_EXTERN axis2_transport_in_desc_t *AXIS2_CALL
+axis2_conf_get_transport_in(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const AXIS2_TRANSPORT_ENUMS trans_enum)
+{
+ return (axis2_transport_in_desc_t *)conf->transports_in[trans_enum];
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_transport_in(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_transport_in_desc_t * transport,
+ const AXIS2_TRANSPORT_ENUMS trans_enum)
+{
+ AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE);
+
+ conf->transports_in[trans_enum] = transport;
+
+ return AXIS2_SUCCESS;
+
+}
+
+AXIS2_EXTERN axis2_transport_out_desc_t *AXIS2_CALL
+axis2_conf_get_transport_out(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const AXIS2_TRANSPORT_ENUMS trans_enum)
+{
+ return conf->transports_out[trans_enum];
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_transport_out(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_transport_out_desc_t * transport,
+ const AXIS2_TRANSPORT_ENUMS trans_enum)
+{
+ AXIS2_PARAM_CHECK(env->error, transport, AXIS2_FAILURE);
+
+ conf->transports_out[trans_enum] = transport;
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_transport_in_desc_t **AXIS2_CALL
+axis2_conf_get_all_in_transports(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return (axis2_transport_in_desc_t **)conf->transports_in;
+}
+
+AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
+axis2_conf_get_module(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axutil_qname_t * qname)
+{
+ axis2_char_t *name = NULL;
+ axis2_module_desc_t *ret = NULL;
+ axis2_char_t *module_name = NULL;
+ axutil_qname_t *mod_qname = NULL;
+ const axis2_char_t *def_mod_ver = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, qname, NULL);
+
+ name = axutil_qname_to_string((axutil_qname_t *)qname, env);
+ ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING);
+ if(ret)
+ {
+ return ret;
+ }
+ module_name = axutil_qname_get_localpart(qname, env);
+ if(!module_name)
+ {
+ return NULL;
+ }
+ def_mod_ver = axis2_conf_get_default_module_version(conf, env, module_name);
+ mod_qname = axis2_core_utils_get_module_qname(env, name, def_mod_ver);
+ if(!mod_qname)
+ {
+ return NULL;
+ }
+ name = axutil_qname_to_string(mod_qname, env);
+ ret = (axis2_module_desc_t *)axutil_hash_get(conf->all_modules, name, AXIS2_HASH_KEY_STRING);
+ axutil_qname_free(mod_qname, env);
+ mod_qname = NULL;
+ return ret;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_all_engaged_modules(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->engaged_module_list;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_in_phases_upto_and_including_post_dispatch(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->in_phases_upto_and_including_post_dispatch;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_out_flow(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->out_phases;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_in_fault_flow(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->in_fault_phases;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_out_fault_flow(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->out_fault_phases;
+}
+
+AXIS2_EXTERN axis2_transport_out_desc_t **AXIS2_CALL
+axis2_conf_get_all_out_transports(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return (axis2_transport_out_desc_t **)conf->transports_out;
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_faulty_svcs(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->faulty_svcs;
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_faulty_modules(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->faulty_modules;
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_svcs(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ /*axutil_hash_t *sgs = NULL;
+ axutil_hash_index_t *index_i = NULL;
+ axutil_hash_index_t *index_j = NULL;
+ void *value = NULL;
+ void *value2 = NULL;
+ axis2_svc_grp_t *axis_svc_grp = NULL;
+ axutil_hash_t *svcs = NULL;
+ axis2_svc_t *svc = NULL;
+ axis2_char_t *svc_name = NULL;
+ */
+
+ /* Do we need to do all the following of retrieving all service groups and
+ * then add all services from each group to conf->all_svcs and then finally
+ * return conf->all_svcs?. We have already done this when
+ * adding each service group to the conf, so just returning conf->all_svcs
+ * here would be enough - Damitha */
+ /*sgs = axis2_conf_get_all_svc_grps(conf, env);
+ index_i = axutil_hash_first(sgs, env);
+ while(index_i)
+ {
+ axutil_hash_this(index_i, NULL, NULL, &value);
+ axis_svc_grp = (axis2_svc_grp_t *)value;
+ svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env);
+ index_j = axutil_hash_first(svcs, env);
+ while(index_j)
+ {
+ axutil_hash_this(index_j, NULL, NULL, &value2);
+ svc = (axis2_svc_t *)value2;
+ svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env);
+ axutil_hash_set(conf->all_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc);
+
+ index_j = axutil_hash_next(env, index_j);
+ }
+
+ index_i = axutil_hash_next(env, index_i);
+ }*/
+ return conf->all_svcs;
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_svcs_to_load(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ axutil_hash_t *sgs = NULL;
+ axutil_hash_index_t *index_i = NULL;
+ axutil_hash_index_t *index_j = NULL;
+ void *value = NULL;
+ void *value2 = NULL;
+ axis2_svc_grp_t *axis_svc_grp = NULL;
+ axutil_hash_t *svcs = NULL;
+ axis2_svc_t *svc = NULL;
+ axis2_char_t *svc_name = NULL;
+
+ sgs = axis2_conf_get_all_svc_grps(conf, env);
+ index_i = axutil_hash_first(sgs, env);
+ while(index_i)
+ {
+ axutil_hash_this(index_i, NULL, NULL, &value);
+ axis_svc_grp = (axis2_svc_grp_t *)value;
+ svcs = axis2_svc_grp_get_all_svcs(axis_svc_grp, env);
+ index_j = axutil_hash_first(svcs, env);
+ while(index_j)
+ {
+ axutil_param_t *param = NULL;
+ axutil_hash_this(index_j, NULL, NULL, &value2);
+ svc = (axis2_svc_t *)value2;
+ svc_name = axutil_qname_get_localpart(axis2_svc_get_qname(svc, env), env);
+ param = axis2_svc_get_param(svc, env, AXIS2_LOAD_SVC_STARTUP);
+ if(param)
+ {
+ axutil_hash_set(conf->all_init_svcs, svc_name, AXIS2_HASH_KEY_STRING, svc);
+ }
+
+ index_j = axutil_hash_next(env, index_j);
+ }
+
+ index_i = axutil_hash_next(env, index_i);
+ }
+ return conf->all_init_svcs;
+}
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_conf_is_engaged(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axutil_qname_t * module_name)
+{
+ const axutil_qname_t *def_mod_qname = NULL;
+ axis2_module_desc_t *def_mod = NULL;
+ int i = 0;
+ int size = 0;
+
+ AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FALSE);
+
+ def_mod
+ = axis2_conf_get_default_module(conf, env, axutil_qname_get_localpart(module_name, env));
+ if(def_mod)
+ {
+ def_mod_qname = axis2_module_desc_get_qname(def_mod, env);
+ }
+
+ size = axutil_array_list_size(conf->engaged_module_list, env);
+ for(i = 0; i < size; i++)
+ {
+ axutil_qname_t *qname = NULL;
+ qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
+ if(axutil_qname_equals(module_name, env, qname) || (def_mod_qname && axutil_qname_equals(
+ def_mod_qname, env, qname)))
+ {
+ return AXIS2_TRUE;
+ }
+ }
+
+ return AXIS2_FALSE;
+}
+
+AXIS2_EXTERN axis2_phases_info_t *AXIS2_CALL
+axis2_conf_get_phases_info(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->phases_info;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_phases_info(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_phases_info_t * phases_info)
+{
+ AXIS2_PARAM_CHECK(env->error, phases_info, AXIS2_FAILURE);
+
+ if(conf->phases_info)
+ {
+ axis2_phases_info_free(phases_info, env);
+ conf->phases_info = NULL;
+ }
+ conf->phases_info = phases_info;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_msg_recv(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * key,
+ axis2_msg_recv_t * msg_recv)
+{
+ AXIS2_PARAM_CHECK(env->error, key, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error, msg_recv, AXIS2_FAILURE);
+ if(!conf->msg_recvs)
+ {
+ conf->msg_recvs = axutil_hash_make(env);
+ if(!conf->msg_recvs)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating message receiver map failed");
+ return AXIS2_FAILURE;
+ }
+ }
+ axutil_hash_set(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING, msg_recv);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_msg_recv_t *AXIS2_CALL
+axis2_conf_get_msg_recv(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_char_t * key)
+{
+ return (axis2_msg_recv_t *)axutil_hash_get(conf->msg_recvs, key, AXIS2_HASH_KEY_STRING);
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_out_phases(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axutil_array_list_t * out_phases)
+{
+ AXIS2_PARAM_CHECK(env->error, out_phases, AXIS2_FAILURE);
+
+ if(conf->out_phases)
+ {
+ axutil_array_list_free(conf->out_phases, env);
+ conf->out_phases = NULL;
+ }
+ conf->out_phases = out_phases;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_conf_get_out_phases(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->out_phases;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_in_fault_phases(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axutil_array_list_t * list)
+{
+ AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE);
+
+ if(conf->in_fault_phases)
+ {
+ axutil_array_list_free(conf->in_fault_phases, env);
+ conf->in_fault_phases = NULL;
+ }
+ conf->in_fault_phases = list;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_out_fault_phases(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axutil_array_list_t * list)
+{
+ AXIS2_PARAM_CHECK(env->error, list, AXIS2_FAILURE);
+
+ if(conf->out_fault_phases)
+ {
+ axutil_array_list_free(conf->out_fault_phases, env);
+ conf->out_fault_phases = NULL;
+ }
+ conf->out_fault_phases = list;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_hash_t *AXIS2_CALL
+axis2_conf_get_all_modules(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->all_modules;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_module(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_module_desc_t * module)
+{
+ const axutil_qname_t *module_qname = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, module, AXIS2_FAILURE);
+
+ axis2_module_desc_set_parent(module, env, conf);
+
+ module_qname = axis2_module_desc_get_qname(module, env);
+ if(module_qname)
+ {
+ axis2_char_t *module_name = NULL;
+ module_name = axutil_qname_to_string((axutil_qname_t *)module_qname, env);
+ axutil_hash_set(conf->all_modules, module_name, AXIS2_HASH_KEY_STRING, module);
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_default_dispatchers(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ axis2_phase_t *dispatch = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_disp_t *rest_dispatch = NULL;
+ axis2_disp_t *soap_action_based_dispatch = NULL;
+ axis2_disp_t *soap_msg_body_based_dispatch = NULL;
+ axis2_handler_t *handler = NULL;
+ axis2_phase_t *post_dispatch = NULL;
+ axis2_disp_checker_t *disp_checker = NULL;
+
+ dispatch = axis2_phase_create(env, AXIS2_PHASE_DISPATCH);
+ if(!dispatch)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed", AXIS2_PHASE_DISPATCH);
+ return AXIS2_FAILURE;
+ }
+
+ rest_dispatch = axis2_rest_disp_create(env);
+ if(!rest_dispatch)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating rest dispatcher failed");
+ return AXIS2_FAILURE;
+ }
+
+ handler = axis2_disp_get_base(rest_dispatch, env);
+ axis2_disp_free(rest_dispatch, env);
+ axis2_phase_add_handler_at(dispatch, env, 0, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+
+ soap_msg_body_based_dispatch = axis2_soap_body_disp_create(env);
+ if(!soap_msg_body_based_dispatch)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap body based dispatcher failed");
+ return AXIS2_FAILURE;
+ }
+
+ handler = axis2_disp_get_base(soap_msg_body_based_dispatch, env);
+ axis2_disp_free(soap_msg_body_based_dispatch, env);
+ axis2_phase_add_handler_at(dispatch, env, 1, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+
+ soap_action_based_dispatch = axis2_soap_action_disp_create(env);
+ if(!soap_action_based_dispatch)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating soap action based dispatcher failed");
+ return AXIS2_FAILURE;
+ }
+
+ handler = axis2_disp_get_base(soap_action_based_dispatch, env);
+ axis2_disp_free(soap_action_based_dispatch, env);
+ axis2_phase_add_handler_at(dispatch, env, 2, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+
+ status
+ = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch);
+ if(AXIS2_SUCCESS != status)
+ {
+ axis2_phase_free(dispatch, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding dispatcher into in phases upto and including post dispatch list failed");
+ return status;
+ }
+
+ post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH);
+ if(!post_dispatch)
+ {
+ axis2_phase_free(dispatch, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
+ AXIS2_PHASE_POST_DISPATCH);
+ return AXIS2_FAILURE;
+ }
+
+ disp_checker = axis2_disp_checker_create(env);
+ handler = axis2_disp_checker_get_base(disp_checker, env);
+ axis2_disp_checker_free(disp_checker, env);
+ axis2_phase_add_handler_at(post_dispatch, env, 0, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+ handler = axis2_ctx_handler_create(env, NULL);
+ axis2_phase_add_handler_at(post_dispatch, env, 1, handler);
+ axutil_array_list_add(conf->handlers, env, axis2_handler_get_handler_desc(handler, env));
+
+ status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env,
+ post_dispatch);
+ if(AXIS2_SUCCESS != status)
+ {
+ axis2_phase_free(dispatch, env);
+ axis2_phase_free(post_dispatch, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding post dispatcher into in phases upto and including post dispatch list failed");
+ return status;
+ }
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_dispatch_phase(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_phase_t * dispatch)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_handler_t *handler = NULL;
+ axis2_phase_t *post_dispatch = NULL;
+ axis2_disp_checker_t *disp_checker = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, dispatch, AXIS2_FAILURE);
+
+ status
+ = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env, dispatch);
+ if(AXIS2_FAILURE == status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding dispatcher into in phases upto and including post dispatch list failed");
+ return AXIS2_FAILURE;
+ }
+
+ post_dispatch = axis2_phase_create(env, AXIS2_PHASE_POST_DISPATCH);
+ if(!post_dispatch)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Creating phase %s failed",
+ AXIS2_PHASE_POST_DISPATCH);
+ axis2_phase_free(dispatch, env);
+ return AXIS2_FAILURE;
+ }
+
+ disp_checker = axis2_disp_checker_create(env);
+
+ handler = axis2_disp_checker_get_base(disp_checker, env);
+ axis2_phase_add_handler_at(post_dispatch, env, 0, handler);
+
+ status = axutil_array_list_add(conf-> in_phases_upto_and_including_post_dispatch, env,
+ post_dispatch);
+ if(AXIS2_FAILURE == status)
+ {
+ axis2_phase_free(dispatch, env);
+ axis2_phase_free(post_dispatch, env);
+ axis2_disp_checker_free(disp_checker, env);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Adding post dispatcher into in phases upto and including post dispatch list failed");
+ return AXIS2_FAILURE;
+ }
+ return AXIS2_SUCCESS;
+}
+
+/**
+ * For each module reference qname stored in dep_engine this function is called.
+ * All module_desc instances are stored in axis2_conf. So each module_desc
+ * is retrieved from there by giving module_qname and engaged globally by
+ * calling phase_resolvers engage_module_globally function. Modules are added
+ * to axis2_conf's engaged module list.
+ */
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_engage_module(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axutil_qname_t * module_ref)
+{
+ axis2_module_desc_t *module_desc = NULL;
+ axis2_bool_t is_new_module = AXIS2_FALSE;
+ axis2_bool_t to_be_engaged = AXIS2_TRUE;
+ axis2_dep_engine_t *dep_engine = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ axis2_char_t *file_name = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, module_ref, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
+
+ module_desc = axis2_conf_get_module(conf, env, module_ref);
+ if(!module_desc)
+ {
+ axutil_file_t *file = NULL;
+ const axis2_char_t *repos_path = NULL;
+ axis2_arch_file_data_t *file_data = NULL;
+ axis2_char_t *temp_path1 = NULL;
+ axis2_char_t *temp_path2 = NULL;
+ axis2_char_t *temp_path3 = NULL;
+ axis2_char_t *path = NULL;
+ axutil_param_t *module_dir_param = NULL;
+ axis2_char_t *module_dir = NULL;
+ axis2_bool_t flag;
+ axis2_char_t *axis2_xml = NULL;
+
+ file_name = axutil_qname_get_localpart(module_ref, env);
+ file = (axutil_file_t *)axis2_arch_reader_create_module_arch(env, file_name);
+ /* This flag is to check whether conf is built using axis2
+ * xml configuration file instead of a repository. */
+ flag = axis2_conf_get_axis2_flag(conf, env);
+
+ if(!flag)
+ {
+ repos_path = axis2_conf_get_repo(conf, env);
+ temp_path1 = axutil_stracat(env, repos_path, AXIS2_PATH_SEP_STR);
+ temp_path2 = axutil_stracat(env, temp_path1, AXIS2_MODULE_FOLDER);
+ temp_path3 = axutil_stracat(env, temp_path2, AXIS2_PATH_SEP_STR);
+ path = axutil_stracat(env, temp_path3, file_name);
+ AXIS2_FREE(env->allocator, temp_path1);
+ AXIS2_FREE(env->allocator, temp_path2);
+ AXIS2_FREE(env->allocator, temp_path3);
+ }
+ else
+ {
+ /**
+ * This case is to obtain module path from the axis2.xml
+ */
+ axis2_xml = (axis2_char_t *)axis2_conf_get_axis2_xml(conf, env);
+ module_dir_param = axis2_conf_get_param(conf, env, AXIS2_MODULE_DIR);
+
+ if(module_dir_param)
+ {
+ module_dir = (axis2_char_t *)axutil_param_get_value(module_dir_param, env);
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "moduleDir parameter not available in axis2.xml.");
+
+ return AXIS2_FAILURE;
+ }
+
+ temp_path1 = axutil_strcat(env, module_dir, AXIS2_PATH_SEP_STR, NULL);
+ path = axutil_strcat(env, temp_path1, file_name, NULL);
+ }
+
+ axutil_file_set_path(file, env, path);
+ file_data = axis2_arch_file_data_create_with_type_and_file(env, AXIS2_MODULE, file);
+ /*if(!flag)
+ {
+ dep_engine = axis2_dep_engine_create_with_repos_name(env, repos_path);
+ }
+ else
+ {
+ dep_engine = axis2_dep_engine_create_with_axis2_xml(env, axis2_xml);
+ }*/
+ dep_engine = conf->dep_engine;
+
+ axis2_dep_engine_set_current_file_item(dep_engine, env, file_data);
+
+ /* this module_dir set the path of the module directory
+ * Pertaining to this module. This value will use inside the
+ * axis2_dep_engine_build_module function
+ */
+
+ axis2_dep_engine_set_module_dir(dep_engine, env, path);
+
+ if(path)
+ {
+ AXIS2_FREE(env->allocator, path);
+ }
+
+ if(file_data)
+ {
+ axis2_arch_file_data_free(file_data, env);
+ }
+
+ module_desc = axis2_dep_engine_build_module(dep_engine, env, file, conf);
+ axutil_file_free(file, env);
+ is_new_module = AXIS2_TRUE;
+ }
+
+ if(module_desc)
+ {
+ int size = 0;
+ int i = 0;
+ const axutil_qname_t *module_qname = NULL;
+
+ size = axutil_array_list_size(conf->engaged_module_list, env);
+ module_qname = axis2_module_desc_get_qname(module_desc, env);
+ for(i = 0; i < size; i++)
+ {
+ axutil_qname_t *qname = NULL;
+
+ qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
+ if(axutil_qname_equals(module_qname, env, qname))
+ {
+ to_be_engaged = AXIS2_FALSE;
+ }
+ }
+ }
+ else
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_INVALID_MODULE, AXIS2_FAILURE);
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Either module description not set or building"
+ "module description failed for module %s", file_name);
+
+ return AXIS2_FAILURE;
+ }
+
+ if(to_be_engaged)
+ {
+ axis2_phase_resolver_t *phase_resolver = NULL;
+ axutil_qname_t *module_qref_l = NULL;
+ const axutil_qname_t *module_qname = NULL;
+ axis2_char_t *module_name = NULL;
+
+ module_qname = axis2_module_desc_get_qname(module_desc, env);
+ module_name = axutil_qname_get_localpart(module_qname, env);
+ phase_resolver = axis2_phase_resolver_create_with_config(env, conf);
+ if(!phase_resolver)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ status = axis2_phase_resolver_engage_module_globally(phase_resolver, env, module_desc);
+ axis2_phase_resolver_free(phase_resolver, env);
+ if(!status)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Engaging module %s globally failed",
+ module_name);
+ return status;
+ }
+ module_qref_l = axutil_qname_clone((axutil_qname_t *)module_qname, env);
+ status = axutil_array_list_add(conf->engaged_module_list, env, module_qref_l);
+ }
+
+ if(is_new_module)
+ {
+ status = axis2_conf_add_module(conf, env, module_desc);
+ }
+
+ return status;
+}
+
+AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
+axis2_conf_get_repo(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->axis2_repo;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_repo(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_char_t * repos_path)
+{
+ if(conf->axis2_repo)
+ {
+ AXIS2_FREE(env->allocator, conf->axis2_repo);
+ conf->axis2_repo = NULL;
+ }
+ conf->axis2_repo = axutil_strdup(env, repos_path);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
+axis2_conf_get_axis2_xml(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return axutil_strdup(env, conf->axis2_xml);
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_axis2_xml(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_char_t * axis2_xml)
+{
+ AXIS2_PARAM_CHECK(env->error, axis2_xml, AXIS2_FAILURE);
+ conf->axis2_xml = axutil_strdup(env, axis2_xml);
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN struct axis2_dep_engine * AXIS2_CALL
+axis2_conf_get_dep_engine(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->dep_engine;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_dep_engine(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_dep_engine_t * dep_engine)
+{
+ conf->dep_engine = dep_engine;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN const axis2_char_t *AXIS2_CALL
+axis2_conf_get_default_module_version(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * module_name)
+{
+ axutil_hash_t *def_ver_map = NULL;
+ AXIS2_PARAM_CHECK(env->error, module_name, NULL);
+
+ def_ver_map = conf->name_to_version_map;
+ if(!def_ver_map)
+ {
+ return NULL;
+ }
+ return axutil_hash_get(def_ver_map, module_name, AXIS2_HASH_KEY_STRING);
+}
+
+AXIS2_EXTERN axis2_module_desc_t *AXIS2_CALL
+axis2_conf_get_default_module(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * module_name)
+{
+ axis2_module_desc_t *ret_mod = NULL;
+ axis2_char_t *mod_name = NULL;
+ const axis2_char_t *mod_ver = NULL;
+ axutil_hash_t *all_modules = NULL;
+ axutil_qname_t *mod_qname = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, module_name, NULL);
+
+ all_modules = conf->all_modules;
+ mod_ver = axis2_conf_get_default_module_version(conf, env, module_name);
+
+ if(!mod_ver)
+ {
+ mod_name = axutil_strdup(env, module_name);
+ }
+ else
+ {
+ axis2_char_t *tmp_name = NULL;
+ tmp_name = axutil_stracat(env, module_name, "-");
+ mod_name = axutil_stracat(env, tmp_name, mod_ver);
+ AXIS2_FREE(env->allocator, tmp_name);
+ }
+ mod_qname = axutil_qname_create(env, mod_name, NULL, NULL);
+ AXIS2_FREE(env->allocator, mod_name);
+ mod_name = NULL;
+
+ if(!mod_qname)
+ {
+ return NULL;
+ }
+ ret_mod = (axis2_module_desc_t *)axutil_hash_get(all_modules, axutil_qname_to_string(mod_qname,
+ env), AXIS2_HASH_KEY_STRING);
+
+ return ret_mod;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_add_default_module_version(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * module_name,
+ const axis2_char_t * module_version)
+{
+ axutil_hash_t *name_to_ver_map = NULL;
+
+ AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK(env->error, module_version, AXIS2_FAILURE);
+ /*
+ * If we already have a default module version we don't put
+ * it again
+ */
+ name_to_ver_map = conf->name_to_version_map;
+
+ if(!axutil_hash_get(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING))
+ {
+ axis2_char_t *new_entry = axutil_strdup(env, module_version);
+ if(!new_entry)
+ {
+ return AXIS2_FAILURE;
+ }
+ axutil_hash_set(name_to_ver_map, module_name, AXIS2_HASH_KEY_STRING, new_entry);
+ return AXIS2_SUCCESS;
+ }
+ return AXIS2_FAILURE;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_engage_module_with_version(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ const axis2_char_t * module_name,
+ const axis2_char_t * version_id)
+{
+ axutil_qname_t *module_qname = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+
+ AXIS2_PARAM_CHECK(env->error, module_name, AXIS2_FAILURE);
+
+ module_qname = axis2_core_utils_get_module_qname(env, module_name, version_id);
+ if(!module_qname)
+ {
+ return AXIS2_FAILURE;
+ }
+ status = axis2_conf_engage_module(conf, env, module_qname);
+ axutil_qname_free(module_qname, env);
+ return status;
+}
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_conf_get_enable_mtom(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->enable_mtom;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_enable_mtom(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_bool_t enable_mtom)
+{
+ conf->enable_mtom = enable_mtom;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_conf_get_axis2_flag(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->axis2_flag;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_axis2_flag(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_bool_t axis2_flag)
+{
+ conf->axis2_flag = axis2_flag;
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+axis2_conf_get_enable_security(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->enable_security;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_enable_security(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ axis2_bool_t enable_security)
+{
+ AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
+
+ conf->enable_security = enable_security;
+ return AXIS2_SUCCESS;
+}
+
+#if 0
+/* this seemed to be not used after 1.6.0 */
+AXIS2_EXTERN void *AXIS2_CALL
+axis2_conf_get_security_context(
+ axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->security_context;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_set_security_context(
+ axis2_conf_t * conf,
+ const axutil_env_t * env,
+ void *security_context)
+{
+ AXIS2_PARAM_CHECK(env->error, conf, AXIS2_FAILURE);
+
+ conf->security_context = (void *) security_context;
+ return AXIS2_SUCCESS;
+}
+#endif
+
+AXIS2_EXTERN axutil_param_container_t *AXIS2_CALL
+axis2_conf_get_param_container(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->param_container;
+}
+
+AXIS2_EXTERN axis2_desc_t *AXIS2_CALL
+axis2_conf_get_base(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->base;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL
+axis2_conf_get_handlers(
+ const axis2_conf_t * conf,
+ const axutil_env_t * env)
+{
+ return conf->handlers;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_conf_disengage_module(
+ const axis2_conf_t *conf,
+ const axutil_env_t *env,
+ const axutil_qname_t *module_ref)
+{
+ axis2_module_desc_t *module_desc = NULL;
+ axutil_hash_index_t *index = NULL;
+ axis2_char_t *mod_name = NULL;
+ int size = 0, i = 0;
+ if(!module_ref)
+ return AXIS2_FAILURE;
+
+ mod_name = axutil_qname_get_localpart(module_ref, env);
+ module_desc = axis2_conf_get_module(conf, env, module_ref);
+ if(!module_desc)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "The requested module %s does not exist",
+ mod_name);
+ return AXIS2_FAILURE;
+ }
+ if(!axis2_conf_is_engaged((axis2_conf_t*)conf, env, module_ref))
+ {
+ AXIS2_LOG_INFO(env->log, AXIS2_LOG_SI, "%s Module is not engaged globally", mod_name);
+ return AXIS2_FAILURE;
+ }
+ if(!conf->all_svcs)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "configuration does not have any services");
+ return AXIS2_FAILURE;
+
+ }
+ for(index = axutil_hash_first(conf->all_svcs, env); index; index = axutil_hash_next(env, index))
+ {
+ axis2_svc_t *svc = NULL;
+ void *v = NULL;
+ const axis2_char_t *svc_name = NULL;
+ axutil_hash_this(index, NULL, NULL, &v);
+ svc = (axis2_svc_t *)v;
+ if(svc)
+ {
+ svc_name = axis2_svc_get_name(svc, env);
+ axis2_svc_disengage_module(svc, env, module_desc,(axis2_conf_t*) conf);
+ }
+ }
+
+ size = axutil_array_list_size(conf->engaged_module_list, env);
+ for(i = 0; i < size; i++)
+ {
+ axutil_qname_t *qname = NULL;
+ qname = (axutil_qname_t *)axutil_array_list_get(conf->engaged_module_list, env, i);
+ if(axutil_qname_equals(module_ref, env, qname))
+ {
+ axutil_array_list_remove(conf->engaged_module_list, env, i);
+ return AXIS2_SUCCESS;
+ }
+ }
+
+ return AXIS2_FAILURE;
+}