| /* |
| * 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 <axiom.h> |
| #include <axiom_mime_parser.h> |
| #include <axis2_util.h> |
| #include <axis2_addr.h> |
| #include <axutil_http_chunked_stream.h> |
| #include <axis2_amqp_defines.h> |
| #include <axis2_amqp_util.h> |
| |
| AXIS2_EXTERN axis2_char_t* AXIS2_CALL |
| axis2_amqp_util_get_in_desc_conf_value_string( |
| axis2_transport_in_desc_t* in_desc, |
| const axutil_env_t* env, |
| const axis2_char_t* param_name) |
| { |
| axutil_param_t* param = NULL; |
| axis2_char_t* value = NULL; |
| |
| param = (axutil_param_t*)axutil_param_container_get_param( |
| axis2_transport_in_desc_param_container(in_desc, env), env, param_name); |
| if(param) |
| { |
| value = axutil_param_get_value(param, env); |
| } |
| |
| return value; |
| } |
| |
| AXIS2_EXTERN int AXIS2_CALL |
| axis2_amqp_util_get_in_desc_conf_value_int( |
| axis2_transport_in_desc_t* in_desc, |
| const axutil_env_t* env, |
| const axis2_char_t* param_name) |
| { |
| axis2_char_t* value_str = NULL; |
| int value = AXIS2_QPID_NULL_CONF_INT; |
| |
| value_str = axis2_amqp_util_get_in_desc_conf_value_string(in_desc, env, param_name); |
| if(value_str) |
| { |
| value = atoi(value_str); |
| } |
| |
| return value; |
| } |
| |
| AXIS2_EXTERN axis2_char_t* AXIS2_CALL |
| axis2_amqp_util_get_out_desc_conf_value_string( |
| axis2_transport_out_desc_t* out_desc, |
| const axutil_env_t* env, |
| const axis2_char_t* param_name) |
| { |
| axutil_param_t* param = NULL; |
| axis2_char_t* value = NULL; |
| |
| param = (axutil_param_t*)axutil_param_container_get_param( |
| axis2_transport_out_desc_param_container(out_desc, env), env, param_name); |
| if(param) |
| { |
| value = axutil_param_get_value(param, env); |
| } |
| |
| return value; |
| } |
| |
| AXIS2_EXTERN int AXIS2_CALL |
| axis2_amqp_util_get_out_desc_conf_value_int( |
| axis2_transport_out_desc_t* out_desc, |
| const axutil_env_t* env, |
| const axis2_char_t* param_name) |
| { |
| axis2_char_t* value_str = NULL; |
| int value = AXIS2_QPID_NULL_CONF_INT; |
| |
| value_str = axis2_amqp_util_get_out_desc_conf_value_string(out_desc, env, param_name); |
| if(value_str) |
| { |
| value = atoi(value_str); |
| } |
| |
| return value; |
| } |
| |
| AXIS2_EXTERN axiom_soap_envelope_t* AXIS2_CALL |
| axis2_amqp_util_get_soap_envelope( |
| axis2_amqp_response_t* response, |
| const axutil_env_t* env, |
| axis2_msg_ctx_t* msg_ctx) |
| { |
| axiom_xml_reader_t* xml_reader = NULL; |
| axiom_stax_builder_t* stax_builder = NULL; |
| axiom_soap_builder_t* soap_builder = NULL; |
| axiom_soap_envelope_t* soap_envelope = NULL; |
| const axis2_char_t* soap_ns_uri = NULL; |
| axis2_char_t *soap_body_str = NULL; |
| int soap_body_len = 0; |
| axis2_bool_t is_mtom = AXIS2_FALSE; |
| axutil_hash_t *binary_data_map = NULL; |
| axis2_bool_t is_soap_11 = AXIS2_FALSE; |
| |
| if(!response || !response->data || !response->content_type) |
| { |
| return NULL; |
| } |
| |
| is_soap_11 = axis2_msg_ctx_get_is_soap_11(msg_ctx, env); |
| |
| /* Handle MTOM */ |
| if(strstr(response->content_type, AXIS2_AMQP_HEADER_ACCEPT_MULTIPART_RELATED)) |
| { |
| axis2_char_t* mime_boundary = axis2_amqp_util_get_value_from_content_type(env, |
| response->content_type, AXIS2_AMQP_HEADER_CONTENT_TYPE_MIME_BOUNDARY); |
| |
| if(mime_boundary) |
| { |
| axiom_mime_parser_t *mime_parser = NULL; |
| int soap_body_len = 0; |
| axutil_param_t *buffer_size_param = NULL; |
| axutil_param_t *max_buffers_param = NULL; |
| axutil_param_t *attachment_dir_param = NULL; |
| axis2_char_t *value_size = NULL; |
| axis2_char_t *value_num = NULL; |
| axis2_char_t *value_dir = NULL; |
| int size = 0; |
| int num = 0; |
| |
| mime_parser = axiom_mime_parser_create(env); |
| |
| buffer_size_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_BUFFER_SIZE); |
| |
| if(buffer_size_param) |
| { |
| value_size = (axis2_char_t *)axutil_param_get_value(buffer_size_param, env); |
| |
| if(value_size) |
| { |
| size = atoi(value_size); |
| axiom_mime_parser_set_buffer_size(mime_parser, env, size); |
| } |
| } |
| |
| max_buffers_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_MTOM_MAX_BUFFERS); |
| |
| if(max_buffers_param) |
| { |
| value_num = (axis2_char_t*)axutil_param_get_value(max_buffers_param, env); |
| |
| if(value_num) |
| { |
| num = atoi(value_num); |
| axiom_mime_parser_set_max_buffers(mime_parser, env, num); |
| } |
| } |
| |
| attachment_dir_param = axis2_msg_ctx_get_parameter(msg_ctx, env, AXIS2_ATTACHMENT_DIR); |
| |
| if(attachment_dir_param) |
| { |
| value_dir = (axis2_char_t*)axutil_param_get_value(attachment_dir_param, env); |
| |
| if(value_dir) |
| { |
| axiom_mime_parser_set_attachment_dir(mime_parser, env, value_dir); |
| } |
| } |
| |
| if(mime_parser) |
| { |
| axis2_callback_info_t* callback_ctx = NULL; |
| axutil_stream_t* stream = NULL; |
| |
| callback_ctx = (axis2_callback_info_t*)AXIS2_MALLOC(env->allocator, |
| sizeof(axis2_callback_info_t)); |
| |
| stream = axutil_stream_create_basic(env); |
| |
| if(stream) |
| { |
| axutil_stream_write(stream, env, response->data, response->length); |
| callback_ctx->env = env; |
| callback_ctx->in_stream = stream; |
| callback_ctx->content_length = response->length; |
| callback_ctx->unread_len = response->length; |
| callback_ctx->chunked_stream = NULL; |
| } |
| |
| /*binary_data_map = |
| axiom_mime_parser_parse(mime_parser, env, |
| axis2_amqp_util_on_data_request, |
| (void*)callback_ctx, |
| mime_boundary);*/ |
| |
| if(!binary_data_map) |
| { |
| return AXIS2_FAILURE; |
| } |
| |
| soap_body_len = axiom_mime_parser_get_soap_body_len(mime_parser, env); |
| |
| soap_body_str = axiom_mime_parser_get_soap_body_str(mime_parser, env); |
| |
| axutil_stream_free(stream, env); |
| AXIS2_FREE(env->allocator, callback_ctx); |
| axiom_mime_parser_free(mime_parser, env); |
| } |
| |
| AXIS2_FREE(env->allocator, mime_boundary); |
| } |
| |
| is_mtom = AXIS2_TRUE; |
| } |
| else |
| { |
| soap_body_str = response->data; |
| soap_body_len = axutil_strlen(response->data); |
| } |
| |
| soap_body_len = axutil_strlen(soap_body_str); |
| |
| xml_reader = axiom_xml_reader_create_for_memory(env, soap_body_str, soap_body_len, NULL, |
| AXIS2_XML_PARSER_TYPE_BUFFER); |
| if(!xml_reader) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create XML Reader"); |
| return NULL; |
| } |
| |
| stax_builder = axiom_stax_builder_create(env, xml_reader); |
| if(!stax_builder) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create StAX Builder"); |
| return NULL; |
| } |
| |
| soap_ns_uri = is_soap_11 ? AXIOM_SOAP11_SOAP_ENVELOPE_NAMESPACE_URI |
| : AXIOM_SOAP12_SOAP_ENVELOPE_NAMESPACE_URI; |
| |
| soap_builder = axiom_soap_builder_create(env, stax_builder, soap_ns_uri); |
| if(!soap_builder) |
| { |
| AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Failed to Create SOAP Builder"); |
| return NULL; |
| } |
| |
| if(binary_data_map) |
| { |
| axiom_soap_builder_set_mime_body_parts(soap_builder, env, binary_data_map); |
| } |
| |
| soap_envelope = axiom_soap_builder_get_soap_envelope(soap_builder, env); |
| return soap_envelope; |
| } |
| |
| AXIS2_EXTERN axis2_bool_t AXIS2_CALL |
| axis2_amqp_util_conf_ctx_get_server_side( |
| axis2_conf_ctx_t* conf_ctx, |
| const axutil_env_t* env) |
| { |
| axutil_property_t* property = NULL; |
| axis2_char_t* value = NULL; |
| |
| property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_IS_SVR_SIDE); |
| if(!property) |
| return AXIS2_TRUE; |
| |
| value = (axis2_char_t*)axutil_property_get_value(property, env); |
| if(!value) |
| return AXIS2_TRUE; |
| |
| return (axutil_strcmp(value, AXIS2_VALUE_TRUE) == 0) ? AXIS2_TRUE : AXIS2_FALSE; |
| } |
| |
| AXIS2_EXTERN axis2_char_t *AXIS2_CALL |
| axis2_amqp_util_get_value_from_content_type( |
| const axutil_env_t * env, |
| const axis2_char_t * content_type, |
| const axis2_char_t * key) |
| { |
| axis2_char_t *tmp = NULL; |
| axis2_char_t *tmp_content_type = NULL; |
| axis2_char_t *tmp2 = NULL; |
| |
| AXIS2_PARAM_CHECK(env->error, content_type, NULL); |
| AXIS2_PARAM_CHECK(env->error, key, NULL); |
| |
| tmp_content_type = axutil_strdup(env, content_type); |
| |
| if(!tmp_content_type) |
| { |
| return NULL; |
| } |
| |
| tmp = strstr(tmp_content_type, key); |
| |
| if(!tmp) |
| { |
| AXIS2_FREE(env->allocator, tmp_content_type); |
| return NULL; |
| } |
| |
| tmp = strchr(tmp, AXIS2_AMQP_EQ); |
| tmp2 = strchr(tmp, AXIS2_AMQP_SEMI_COLON); |
| |
| if(tmp2) |
| { |
| *tmp2 = AXIS2_AMQP_ESC_NULL; |
| } |
| |
| if(!tmp) |
| { |
| AXIS2_FREE(env->allocator, tmp_content_type); |
| return NULL; |
| } |
| |
| tmp2 = axutil_strdup(env, tmp + 1); |
| |
| AXIS2_FREE(env->allocator, tmp_content_type); |
| |
| if(*tmp2 == AXIS2_AMQP_DOUBLE_QUOTE) |
| { |
| tmp = tmp2; |
| tmp2 = axutil_strdup(env, tmp + 1); |
| tmp2[strlen(tmp2) - 1] = AXIS2_AMQP_ESC_NULL; |
| |
| if(tmp) |
| { |
| AXIS2_FREE(env->allocator, tmp); |
| tmp = NULL; |
| } |
| } |
| |
| /* handle XOP */ |
| if(*tmp2 == AXIS2_AMQP_B_SLASH && *(tmp2 + 1) == '\"') |
| { |
| tmp = tmp2; |
| tmp2 = axutil_strdup(env, tmp + 2); |
| tmp2[strlen(tmp2) - 3] = AXIS2_AMQP_ESC_NULL; |
| |
| if(tmp) |
| { |
| AXIS2_FREE(env->allocator, tmp); |
| tmp = NULL; |
| } |
| } |
| |
| return tmp2; |
| } |
| |
| AXIS2_EXTERN int AXIS2_CALL |
| axis2_amqp_util_on_data_request( |
| char* buffer, |
| int size, |
| void* ctx) |
| { |
| const axutil_env_t* env = NULL; |
| int len = -1; |
| axis2_callback_info_t* cb_ctx = (axis2_callback_info_t*)ctx; |
| axutil_stream_t* in_stream = NULL; |
| |
| if(!buffer || !ctx) |
| { |
| return 0; |
| } |
| |
| if(cb_ctx->unread_len <= 0 && -1 != cb_ctx->content_length) |
| { |
| return 0; |
| } |
| |
| env = ((axis2_callback_info_t*)ctx)->env; |
| |
| in_stream = (axutil_stream_t*)((axis2_callback_info_t *)ctx)->in_stream; |
| --size; /* reserve space to insert trailing null */ |
| |
| len = axutil_stream_read(in_stream, env, buffer, size); |
| |
| if(len > 0) |
| { |
| buffer[len] = AXIS2_AMQP_ESC_NULL; |
| ((axis2_callback_info_t*)ctx)->unread_len -= len; |
| } |
| else if(len == 0) |
| { |
| ((axis2_callback_info_t*)ctx)->unread_len = 0; |
| } |
| |
| return len; |
| } |
| |
| AXIS2_EXTERN axis2_char_t* AXIS2_CALL |
| axis2_amqp_util_conf_ctx_get_dual_channel_queue_name( |
| axis2_conf_ctx_t* conf_ctx, |
| const axutil_env_t* env) |
| { |
| axutil_property_t* property = NULL; |
| axis2_char_t* queue_name = NULL; |
| axis2_char_t* value = NULL; |
| |
| /* Get property */ |
| property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_QUEUE_NAME); |
| if(!property) /* Very first call */ |
| { |
| property = axutil_property_create(env); |
| |
| axis2_conf_ctx_set_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_QUEUE_NAME, |
| property); |
| } |
| |
| /* Get queue name */ |
| value = (axis2_char_t*)axutil_property_get_value(property, env); |
| |
| /* AMQP listener and the sender are the two parties that are |
| * interested in the queue. Either party can create the queue. |
| * If the queue is already created by one party, "value" is |
| * not NULL. If "value" is NULL, that mean the caller of |
| * this method is supposed to create the queue */ |
| if(value) |
| { |
| queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, axutil_strlen(value) + 1); |
| strcpy(queue_name, value); |
| |
| /*axutil_property_set_value(property, env, NULL);*/ |
| } |
| else |
| { |
| /* Create new queue name */ |
| queue_name = axutil_stracat(env, AXIS2_AMQP_TEMP_QUEUE_NAME_PREFIX, axutil_uuid_gen(env)); |
| |
| /* Put queue name in the conf_ctx so that the sender will know */ |
| axutil_property_set_value(property, env, (void*)queue_name); |
| } |
| |
| return queue_name; |
| } |
| |
| AXIS2_EXTERN axis2_char_t* AXIS2_CALL |
| axis2_amqp_util_conf_ctx_get_qpid_broker_ip( |
| axis2_conf_ctx_t* conf_ctx, |
| const axutil_env_t* env) |
| { |
| axutil_property_t* property = NULL; |
| void* value = NULL; |
| axis2_char_t* broker_ip = AXIS2_QPID_DEFAULT_BROKER_IP; |
| |
| property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP); |
| |
| if(property) |
| { |
| value = axutil_property_get_value(property, env); |
| |
| if(value) |
| { |
| broker_ip = (axis2_char_t*)value; |
| } |
| } |
| |
| return broker_ip; |
| } |
| |
| AXIS2_EXTERN int AXIS2_CALL |
| axis2_amqp_util_conf_ctx_get_qpid_broker_port( |
| axis2_conf_ctx_t* conf_ctx, |
| const axutil_env_t* env) |
| { |
| axutil_property_t* property = NULL; |
| void* value = NULL; |
| int broker_port = AXIS2_QPID_DEFAULT_BROKER_PORT; |
| |
| property = axis2_conf_ctx_get_property(conf_ctx, env, AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT); |
| |
| if(property) |
| { |
| value = axutil_property_get_value(property, env); |
| |
| if(value) |
| { |
| broker_port = *(int*)value; |
| } |
| } |
| |
| return broker_port; |
| } |
| |
| AXIS2_EXTERN axis2_bool_t AXIS2_CALL |
| axis2_amqp_util_msg_ctx_get_use_separate_listener( |
| axis2_msg_ctx_t* msg_ctx, |
| const axutil_env_t* env) |
| { |
| axutil_property_t* property = NULL; |
| axis2_char_t* value = NULL; |
| axis2_bool_t use_separate_listener = AXIS2_FALSE; |
| |
| property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_USE_SEPARATE_LISTENER); |
| |
| if(property) |
| { |
| value = (axis2_char_t*)axutil_property_get_value(property, env); |
| |
| if(value && (axutil_strcmp(AXIS2_VALUE_TRUE, value) == 0)) |
| { |
| use_separate_listener = AXIS2_TRUE; |
| } |
| } |
| |
| return use_separate_listener; |
| } |
| |
| AXIS2_EXTERN axis2_amqp_destination_info_t* AXIS2_CALL |
| axis2_amqp_util_msg_ctx_get_destination_info( |
| axis2_msg_ctx_t* msg_ctx, |
| const axutil_env_t* env) |
| { |
| /* The destination URI that is expected by this method |
| * should be of one of the following formats |
| * 1. amqp://IP:PORT/services/SERVICE_NAME |
| * 2. jms:/SERVICE_NAME?java.naming.provider.url=tcp://IP:PORT... |
| * 3. TempQueue... */ |
| |
| axis2_endpoint_ref_t* endpoint_ref = NULL; |
| axis2_amqp_destination_info_t* destination_info = NULL; |
| |
| destination_info = (axis2_amqp_destination_info_t*)AXIS2_MALLOC(env->allocator, |
| sizeof(axis2_amqp_destination_info_t)); |
| |
| destination_info->broker_ip = NULL; |
| destination_info->broker_port = AXIS2_QPID_NULL_CONF_INT; |
| destination_info->queue_name = NULL; |
| |
| endpoint_ref = axis2_msg_ctx_get_to(msg_ctx, env); |
| |
| if(endpoint_ref) |
| { |
| const axis2_char_t* endpoint_address_original = NULL; |
| axis2_char_t* endpoint_address = NULL; |
| char* substr = NULL; |
| char* token = NULL; |
| endpoint_address_original = axis2_endpoint_ref_get_address(endpoint_ref, env); |
| |
| if(!endpoint_address_original) |
| return NULL; |
| |
| endpoint_address = (axis2_char_t*)AXIS2_MALLOC(env->allocator, (sizeof(axis2_char_t) |
| * axutil_strlen(endpoint_address_original)) + 1); |
| strcpy((char*)endpoint_address, (char*)endpoint_address_original); |
| |
| if((substr = strstr(endpoint_address, AXIS2_AMQP_EPR_PREFIX))) /* Start with amqp: */ |
| { |
| if(strstr(endpoint_address, AXIS2_AMQP_EPR_ANON_SERVICE_NAME)) |
| { |
| /* Server reply to dual-channel client */ |
| axutil_property_t* property = NULL; |
| property = axis2_msg_ctx_get_property(msg_ctx, env, |
| AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); |
| |
| if(property) |
| { |
| axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, |
| env); |
| |
| if(queue_name) |
| { |
| destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, |
| (sizeof(axis2_char_t) * strlen(queue_name)) + 1); |
| strcpy(destination_info->queue_name, queue_name); |
| } |
| } |
| } |
| else |
| { |
| substr += strlen(AXIS2_AMQP_EPR_PREFIX) + 2; /* 2 -> "//" */ |
| if(substr) /* IP:PORT/services/SERVICE_NAME */ |
| { |
| token = strtok(substr, ":"); |
| if(token) /* IP */ |
| { |
| axis2_char_t* broker_ip = (axis2_char_t*)AXIS2_MALLOC(env->allocator, |
| (sizeof(axis2_char_t) * strlen(token)) + 1); |
| strcpy(broker_ip, token); |
| destination_info->broker_ip = broker_ip; |
| |
| token = strtok(NULL, "/"); /* PORT */ |
| if(token) |
| { |
| destination_info->broker_port = atoi(token); |
| |
| token = strtok(NULL, "#"); /* ... services/SERVICE_NAME */ |
| if(token) |
| { |
| if((substr = strstr(token, AXIS2_AMQP_EPR_SERVICE_PREFIX))) |
| { |
| substr += strlen(AXIS2_AMQP_EPR_SERVICE_PREFIX) + 1; /* 1 -> "/" */ |
| if(substr) |
| { |
| axis2_char_t* queue_name = (axis2_char_t*)AXIS2_MALLOC( |
| env->allocator, (sizeof(axis2_char_t) * strlen(substr)) |
| + 1); |
| strcpy(queue_name, substr); |
| destination_info->queue_name = queue_name; |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| else if(0 == strcmp(endpoint_address, AXIS2_WSA_ANONYMOUS_URL)) /* Required to work with Sandesha2 */ |
| { |
| axutil_property_t* property = NULL; |
| property = axis2_msg_ctx_get_property(msg_ctx, env, |
| AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); |
| |
| if(property) |
| { |
| axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, env); |
| |
| if(queue_name) |
| { |
| destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, |
| (sizeof(axis2_char_t) * strlen(queue_name)) + 1); |
| strcpy(destination_info->queue_name, queue_name); |
| } |
| } |
| } |
| else if((substr = strstr(endpoint_address, "jms:/")) && (substr == endpoint_address)) |
| { |
| |
| } |
| |
| AXIS2_FREE(env->allocator, endpoint_address); |
| } |
| else |
| { |
| /* Single-channel blocking */ |
| axutil_property_t* property = NULL; |
| property = axis2_msg_ctx_get_property(msg_ctx, env, AXIS2_AMQP_MSG_CTX_PROPERTY_REPLY_TO); |
| |
| if(property) |
| { |
| axis2_char_t* queue_name = (axis2_char_t*)axutil_property_get_value(property, env); |
| |
| if(queue_name) |
| { |
| destination_info->queue_name = (axis2_char_t*)AXIS2_MALLOC(env->allocator, |
| (sizeof(axis2_char_t) * strlen(queue_name)) + 1); |
| strcpy(destination_info->queue_name, queue_name); |
| } |
| } |
| } |
| |
| /* Get broker IP/Port from conf_ctx if they are not |
| * found in the destination URI */ |
| if(!destination_info->broker_ip) |
| { |
| axis2_conf_ctx_t* conf_ctx = NULL; |
| |
| conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); |
| if(conf_ctx) |
| { |
| axutil_property_t* property = NULL; |
| property = axis2_conf_ctx_get_property(conf_ctx, env, |
| AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_IP); |
| |
| if(property) |
| { |
| axis2_char_t* broker_ip = (axis2_char_t*)axutil_property_get_value(property, env); |
| |
| if(broker_ip) |
| { |
| destination_info->broker_ip = (axis2_char_t*)AXIS2_MALLOC(env->allocator, |
| (sizeof(axis2_char_t) * strlen(broker_ip)) + 1); |
| strcpy(destination_info->broker_ip, broker_ip); |
| } |
| } |
| |
| } |
| } |
| |
| if(AXIS2_QPID_NULL_CONF_INT == destination_info->broker_port) |
| { |
| axis2_conf_ctx_t* conf_ctx = NULL; |
| |
| conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); |
| if(conf_ctx) |
| { |
| axutil_property_t* property = NULL; |
| property = axis2_conf_ctx_get_property(conf_ctx, env, |
| AXIS2_AMQP_CONF_CTX_PROPERTY_BROKER_PORT); |
| |
| if(property) |
| { |
| void* value = axutil_property_get_value(property, env); |
| |
| if(value) |
| { |
| destination_info->broker_port = *(int*)value; |
| } |
| } |
| } |
| } |
| |
| return destination_info; |
| } |
| |
| AXIS2_EXTERN int AXIS2_CALL |
| axis2_amqp_util_msg_ctx_get_request_timeout( |
| axis2_msg_ctx_t* msg_ctx, |
| const axutil_env_t* env) |
| { |
| axis2_conf_ctx_t* conf_ctx = NULL; |
| axutil_property_t* property = NULL; |
| void* value = NULL; |
| int request_timeout = AXIS2_QPID_DEFAULT_REQUEST_TIMEOUT; |
| |
| conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); |
| |
| if(conf_ctx) |
| { |
| property = axis2_conf_ctx_get_property(conf_ctx, env, |
| AXIS2_AMQP_CONF_CTX_PROPERTY_REQUEST_TIMEOUT); |
| |
| if(property) |
| { |
| value = axutil_property_get_value(property, env); |
| |
| if(value) |
| { |
| request_timeout = *(int*)value; |
| } |
| } |
| } |
| |
| return request_timeout; |
| } |
| |
| AXIS2_EXTERN axis2_bool_t AXIS2_CALL |
| axis2_amqp_util_msg_ctx_get_server_side( |
| axis2_msg_ctx_t* msg_ctx, |
| const axutil_env_t* env) |
| { |
| axis2_conf_ctx_t* conf_ctx = NULL; |
| axis2_bool_t is_server = AXIS2_FALSE; |
| |
| conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env); |
| |
| if(conf_ctx) |
| { |
| is_server = axis2_amqp_util_conf_ctx_get_server_side(conf_ctx, env); |
| } |
| |
| return is_server; |
| } |
| |
| AXIS2_EXTERN void AXIS2_CALL |
| axis2_amqp_response_free( |
| axis2_amqp_response_t* response, |
| const axutil_env_t* env) |
| { |
| if(response) |
| { |
| if(response->data) |
| { |
| AXIS2_FREE(env->allocator, response->data); |
| } |
| |
| if(response->content_type) |
| { |
| AXIS2_FREE(env->allocator, response->content_type); |
| } |
| |
| AXIS2_FREE(env->allocator, response); |
| } |
| } |
| |
| AXIS2_EXTERN void AXIS2_CALL |
| axis2_amqp_destination_info_free( |
| axis2_amqp_destination_info_t* destination_info, |
| const axutil_env_t* env) |
| { |
| if(destination_info) |
| { |
| if(destination_info->broker_ip) |
| { |
| AXIS2_FREE(env->allocator, destination_info->broker_ip); |
| } |
| |
| if(destination_info->queue_name) |
| { |
| AXIS2_FREE(env->allocator, destination_info->queue_name); |
| } |
| |
| AXIS2_FREE(env->allocator, destination_info); |
| } |
| } |
| |