From 39f3d5600820c41c2bcf720e0084e748530a4d9b Mon Sep 17 00:00:00 2001 From: nandika Date: Sat, 4 Feb 2012 11:38:22 +0000 Subject: 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 --- src/core/engine/conf.c | 3800 ++++++++++++++++++++++++------------------------ 1 file 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 -#include -#include "axis2_disp_checker.h" -#include -#include -#include -#include -#include - -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 +#include +#include "axis2_disp_checker.h" +#include +#include +#include +#include +#include + +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; +} -- cgit v1.1-32-gdbae