| /* |
| * Copyright 2004,2005 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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 <axis2_svr_callback.h> |
| #include <axis2_engine.h> |
| |
| /** |
| * @brief Message Receiver struct impl |
| * Axis2 Message Receiver impl |
| */ |
| typedef struct axis2_svr_callback_impl |
| { |
| axis2_svr_callback_t svr_callback; |
| axis2_char_t *scope; |
| } axis2_svr_callback_impl_t; |
| |
| #define AXIS2_INTF_TO_IMPL(svr_callback) ((axis2_svr_callback_impl_t *) svr_callback) |
| |
| /*************************** Function headers *********************************/ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_free (axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_handle_result(axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env, |
| axis2_msg_ctx_t *msg_ctx); |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_handle_fault(axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env, |
| axis2_msg_ctx_t *msg_ctx); |
| |
| /************************* End of function headers ****************************/ |
| |
| axis2_svr_callback_t * AXIS2_CALL |
| axis2_svr_callback_create (axis2_env_t **env) |
| { |
| axis2_svr_callback_impl_t *svr_callback_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, NULL); |
| |
| svr_callback_impl = (axis2_svr_callback_impl_t *) malloc (sizeof (axis2_svr_callback_impl_t)); |
| |
| if(NULL == svr_callback_impl) |
| { |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| return NULL; |
| } |
| |
| svr_callback_impl->svr_callback.ops = NULL; |
| |
| svr_callback_impl->svr_callback.ops = (axis2_svr_callback_ops_t *) |
| AXIS2_MALLOC( (*env)->allocator, sizeof(axis2_svr_callback_ops_t)); |
| |
| if(NULL == svr_callback_impl->svr_callback.ops) |
| { |
| AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE); |
| axis2_svr_callback_free(&(svr_callback_impl->svr_callback), env); |
| |
| return NULL; |
| } |
| |
| svr_callback_impl->svr_callback.ops->free = axis2_svr_callback_free; |
| svr_callback_impl->svr_callback.ops->handle_result = |
| axis2_svr_callback_handle_result; |
| svr_callback_impl->svr_callback.ops->handle_fault = |
| axis2_svr_callback_handle_fault; |
| |
| return &(svr_callback_impl->svr_callback); |
| } |
| |
| /******************************************************************************/ |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_free (axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env) |
| { |
| axis2_svr_callback_impl_t *svr_callback_impl = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| svr_callback_impl = AXIS2_INTF_TO_IMPL(svr_callback); |
| |
| if(NULL != svr_callback->ops) |
| { |
| AXIS2_FREE((*env)->allocator, svr_callback->ops); |
| svr_callback->ops = NULL; |
| } |
| |
| if(svr_callback_impl) |
| { |
| AXIS2_FREE((*env)->allocator, svr_callback_impl); |
| svr_callback_impl = NULL; |
| } |
| |
| return AXIS2_SUCCESS; |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_handle_result(axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env, |
| axis2_msg_ctx_t *msg_ctx) |
| { |
| axis2_engine_t *engine = NULL; |
| axis2_conf_ctx_t *conf_ctx = NULL; |
| axis2_svc_ctx_t *svc_ctx = NULL; |
| axis2_op_ctx_t *op_ctx = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, msg_ctx, AXIS2_FAILURE); |
| |
| op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env); |
| svc_ctx = AXIS2_OP_CTX_GET_PARENT(op_ctx, env); |
| conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env); |
| engine = axis2_engine_create(env, conf_ctx); |
| if(!engine) |
| { |
| return AXIS2_FAILURE; |
| } |
| return AXIS2_ENGINE_SEND(engine, env, msg_ctx); |
| } |
| |
| axis2_status_t AXIS2_CALL |
| axis2_svr_callback_handle_fault(axis2_svr_callback_t *svr_callback, |
| axis2_env_t **env, |
| axis2_msg_ctx_t *msg_ctx) |
| { |
| axis2_engine_t *engine = NULL; |
| axis2_conf_ctx_t *conf_ctx = NULL; |
| axis2_svc_ctx_t *svc_ctx = NULL; |
| axis2_op_ctx_t *op_ctx = NULL; |
| axis2_msg_ctx_t *fault_ctx = NULL; |
| |
| AXIS2_ENV_CHECK(env, AXIS2_FAILURE); |
| AXIS2_PARAM_CHECK((*env)->error, msg_ctx, AXIS2_FAILURE); |
| |
| op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env); |
| svc_ctx = AXIS2_OP_CTX_GET_PARENT(op_ctx, env); |
| conf_ctx = AXIS2_SVC_CTX_GET_CONF_CTX(svc_ctx, env); |
| engine = axis2_engine_create(env, conf_ctx); |
| if(!engine) |
| { |
| return AXIS2_FAILURE; |
| } |
| |
| fault_ctx = AXIS2_ENGINE_CREATE_FAULT_MSG_CTX(engine, env, msg_ctx); |
| return AXIS2_ENGINE_SEND_FAULT(engine, env, fault_ctx); |
| } |