/* * 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 #include struct axis2_svc_ctx { /** base context struct */ axis2_ctx_t *base; /** parent of op context is a service context instance */ struct axis2_svc_grp_ctx *parent; /** service associated with this service context */ axis2_svc_t *svc; /** id of the service associated with this context */ axis2_char_t *svc_id; /** service qname */ axutil_qname_t *svc_qname; }; AXIS2_EXTERN axis2_svc_ctx_t *AXIS2_CALL axis2_svc_ctx_create( const axutil_env_t * env, axis2_svc_t * svc, struct axis2_svc_grp_ctx *svc_grp_ctx) { axis2_svc_ctx_t *svc_ctx = NULL; svc_ctx = AXIS2_MALLOC(env->allocator, sizeof(axis2_svc_ctx_t)); if(!svc_ctx) { AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); return NULL; } svc_ctx->base = NULL; svc_ctx->parent = NULL; svc_ctx->svc = NULL; svc_ctx->svc_id = NULL; svc_ctx->svc_qname = NULL; svc_ctx->base = axis2_ctx_create(env); if(!(svc_ctx->base)) { axis2_svc_ctx_free(svc_ctx, env); return NULL; } if(svc) { svc_ctx->svc = svc; svc_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(svc, env); if(svc_ctx->svc_qname) { svc_ctx->svc_id = axutil_qname_get_localpart(svc_ctx->svc_qname, env); } } if(svc_grp_ctx) { svc_ctx->parent = svc_grp_ctx; } return svc_ctx; } axis2_ctx_t *AXIS2_CALL axis2_svc_ctx_get_base( const axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env) { return svc_ctx->base; } struct axis2_svc_grp_ctx *AXIS2_CALL axis2_svc_ctx_get_parent( const axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env) { return svc_ctx->parent; } axis2_status_t AXIS2_CALL axis2_svc_ctx_set_parent( axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env, axis2_svc_grp_ctx_t * parent) { svc_ctx->parent = parent; return AXIS2_SUCCESS; } void AXIS2_CALL axis2_svc_ctx_free( struct axis2_svc_ctx *svc_ctx, const axutil_env_t * env) { if(svc_ctx->base) { axis2_ctx_free(svc_ctx->base, env); } AXIS2_FREE(env->allocator, svc_ctx); return; } axis2_status_t AXIS2_CALL axis2_svc_ctx_init( struct axis2_svc_ctx * svc_ctx, const axutil_env_t * env, axis2_conf_t * conf) { if(svc_ctx->svc_qname) { axis2_char_t *svc_name = axutil_qname_get_localpart(svc_ctx->svc_qname, env); svc_ctx->svc = axis2_conf_get_svc(conf, env, svc_name); } return AXIS2_SUCCESS; } const axis2_char_t *AXIS2_CALL axis2_svc_ctx_get_svc_id( const axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env) { return svc_ctx->svc_id; } axis2_svc_t *AXIS2_CALL axis2_svc_ctx_get_svc( const axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env) { return svc_ctx->svc; } axis2_status_t AXIS2_CALL axis2_svc_ctx_set_svc( axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env, axis2_svc_t * svc) { AXIS2_PARAM_CHECK(env->error, svc, AXIS2_FAILURE); svc_ctx->svc = svc; svc_ctx->svc_qname = (axutil_qname_t *)axis2_svc_get_qname(svc, env); if(svc_ctx->svc_qname) { svc_ctx->svc_id = axutil_qname_get_localpart(svc_ctx->svc_qname, env); } return AXIS2_SUCCESS; } struct axis2_conf_ctx *AXIS2_CALL axis2_svc_ctx_get_conf_ctx( const axis2_svc_ctx_t * svc_ctx, const axutil_env_t * env) { return axis2_svc_grp_ctx_get_parent(svc_ctx->parent, env); } axis2_op_ctx_t *AXIS2_CALL axis2_svc_ctx_create_op_ctx( struct axis2_svc_ctx * svc_ctx, const axutil_env_t * env, const axutil_qname_t * qname) { axis2_op_t *op = NULL; if(svc_ctx->svc) { op = axis2_svc_get_op_with_qname(svc_ctx->svc, env, qname); return axis2_op_ctx_create(env, op, svc_ctx); } return NULL; }