You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2007/11/21 11:01:51 UTC
svn commit: r597014 [2/2] - in /webservices/axis2/trunk/c/src/core:
clientapi/op_client.c clientapi/svc_client.c context/msg_ctx.c
transport/http/sender/http_sender.c
Modified: webservices/axis2/trunk/c/src/core/transport/http/sender/http_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/http/sender/http_sender.c?rev=597014&r1=597013&r2=597014&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/http/sender/http_sender.c (original)
+++ webservices/axis2/trunk/c/src/core/transport/http/sender/http_sender.c Wed Nov 21 02:01:51 2007
@@ -40,1159 +40,1163 @@
struct axis2_http_sender
{
- axis2_char_t *http_version;
- axis2_bool_t chunked;
- int so_timeout;
- int connection_timeout;
- axiom_output_t *om_output;
- axis2_http_client_t *client;
- axis2_bool_t is_soap;
+ axis2_char_t *http_version;
+ axis2_bool_t chunked;
+ int so_timeout;
+ int connection_timeout;
+ axiom_output_t *om_output;
+ axis2_http_client_t *client;
+ axis2_bool_t is_soap;
};
static axis2_char_t *axutil_url_encode (const axutil_env_t * env,
- axis2_char_t * dest,
- axis2_char_t * buff, int len);
+ axis2_char_t * dest,
+ axis2_char_t * buff, int len);
static int is_safe_or_unreserve (char c);
#ifndef AXIS2_LIBCURL_ENABLED
static void axis2_http_sender_add_header_list (axis2_http_simple_request_t *
- request,
- const axutil_env_t * env,
- axutil_array_list_t *
- array_list);
+ request,
+ const axutil_env_t * env,
+ axutil_array_list_t *
+ array_list);
static axis2_status_t axis2_http_sender_configure_proxy (axis2_http_sender_t *
- sender,
- const axutil_env_t *
- env,
- axis2_msg_ctx_t *
- msg_ctx);
+ sender,
+ const axutil_env_t *
+ env,
+ axis2_msg_ctx_t *
+ msg_ctx);
static axis2_status_t
axis2_http_sender_configure_server_cert (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx);
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx);
static axis2_status_t
axis2_http_sender_configure_key_file (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx);
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx);
static axis2_status_t
axis2_http_sender_configure_http_auth (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_request_t * request);
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_request_t * request);
static axis2_status_t
axis2_http_sender_configure_http_basic_auth (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_request_t *
- request);
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_request_t *
+ request);
#endif
AXIS2_EXTERN axis2_http_sender_t *AXIS2_CALL
axis2_http_sender_create (const axutil_env_t * env)
{
- axis2_http_sender_t *sender = NULL;
- AXIS2_ENV_CHECK (env, NULL);
+ axis2_http_sender_t *sender = NULL;
+ AXIS2_ENV_CHECK (env, NULL);
- sender = (axis2_http_sender_t *) AXIS2_MALLOC
- (env->allocator, sizeof (axis2_http_sender_t));
+ sender = (axis2_http_sender_t *) AXIS2_MALLOC
+ (env->allocator, sizeof (axis2_http_sender_t));
- if (!sender)
+ if (!sender)
{
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
- return NULL;
+ AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
}
- sender->http_version = (axis2_char_t *) AXIS2_HTTP_HEADER_PROTOCOL_11;
- sender->so_timeout = AXIS2_HTTP_DEFAULT_SO_TIMEOUT;
- sender->connection_timeout = AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT;
- /* unlike the java impl we don't have a default om output
- * it should be explicitly set and it's a MUST
- */
- sender->om_output = NULL;
- sender->chunked = AXIS2_FALSE;
- sender->client = NULL;
+ sender->http_version = (axis2_char_t *) AXIS2_HTTP_HEADER_PROTOCOL_11;
+ sender->so_timeout = AXIS2_HTTP_DEFAULT_SO_TIMEOUT;
+ sender->connection_timeout = AXIS2_HTTP_DEFAULT_CONNECTION_TIMEOUT;
+ /* unlike the java impl we don't have a default om output
+ * it should be explicitly set and it's a MUST
+ */
+ sender->om_output = NULL;
+ sender->chunked = AXIS2_FALSE;
+ sender->client = NULL;
- return sender;
+ return sender;
}
AXIS2_EXTERN void AXIS2_CALL
axis2_http_sender_free (axis2_http_sender_t * sender,
- const axutil_env_t * env)
+ const axutil_env_t * env)
{
- AXIS2_ENV_CHECK (env, void);
+ AXIS2_ENV_CHECK (env, void);
- if (sender->http_version)
+ if (sender->http_version)
{
- AXIS2_FREE (env->allocator, sender->http_version);
+ AXIS2_FREE (env->allocator, sender->http_version);
}
- /* Do not free this here since it will be required in later processing
- * of the response soap message
- */
- sender->client = NULL;
- AXIS2_FREE (env->allocator, sender);
- return;
+ /* Do not free this here since it will be required in later processing
+ * of the response soap message
+ */
+ sender->client = NULL;
+ AXIS2_FREE (env->allocator, sender);
+ return;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_send (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axiom_soap_envelope_t * out,
- const axis2_char_t * str_url,
- const axis2_char_t * soap_action)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axiom_soap_envelope_t * out,
+ const axis2_char_t * str_url,
+ const axis2_char_t * soap_action)
{
#ifdef AXIS2_LIBCURL_ENABLED
- return axis2_libcurl_http_send (sender, env, msg_ctx, out, str_url,
- soap_action);
+ return axis2_libcurl_http_send (sender, env, msg_ctx, out, str_url,
+ soap_action);
#else
- axis2_http_simple_request_t *request = NULL;
- axis2_http_request_line_t *request_line = NULL;
- axutil_url_t *url = NULL;
- axiom_xml_writer_t *xml_writer = NULL;
- axis2_char_t *buffer = NULL;
- unsigned int buffer_size = 0;
- const axis2_char_t *char_set_enc = NULL;
- axutil_string_t *char_set_enc_str = NULL;
- int status_code = -1;
- axis2_http_simple_response_t *response = NULL;
- axis2_char_t *content_type = NULL;
- axis2_bool_t content_type_deepl_copy = AXIS2_TRUE;
- axis2_byte_t *output_stream = NULL;
- int output_stream_size = 0;
- axis2_bool_t doing_mtom = AXIS2_FALSE;
- axutil_property_t *dump_property = NULL;
- axutil_param_t *ssl_pp_param = NULL; /* ssl passphrase */
- axis2_char_t *ssl_pp = NULL;
- axutil_property_t *content_type_property = NULL;
- axutil_hash_t *content_type_hash = NULL;
- axis2_char_t *content_type_value = NULL;
- axutil_property_t *method = NULL;
- axis2_char_t *method_value = NULL;
- axis2_bool_t send_via_get = AXIS2_FALSE;
- axiom_node_t *data_out = NULL;
- axiom_node_t *body_node = NULL;
- axiom_soap_body_t *soap_body = NULL;
- axis2_bool_t is_soap = AXIS2_TRUE;
- axutil_property_t *http_property = NULL;
- axutil_array_list_t *array_list;
- soap_body = axiom_soap_envelope_get_body (out, env);
-
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, out, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, str_url, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, soap_action, AXIS2_FAILURE);
-
- if (AXIS2_TRUE == axis2_msg_ctx_get_doing_rest (msg_ctx, env))
- is_soap = AXIS2_FALSE;
- else
- is_soap = AXIS2_TRUE;
-
- url = axutil_url_parse_string (env, str_url);
-
- if (!is_soap)
- {
- if (!soap_body)
- {
- AXIS2_ERROR_SET (env->error,
- AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL,
- AXIS2_FAILURE);
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "%s",
- AXIS2_ERROR_GET_MESSAGE (env->error));
- return AXIS2_FAILURE;
- }
- body_node = axiom_soap_body_get_base_node (soap_body, env);
- if (!body_node)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "body_node is NULL");
- return AXIS2_FAILURE;
- }
- data_out = axiom_node_get_first_element (body_node, env);
-
- method = (axutil_property_t *) axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_HTTP_METHOD);
- if (method)
- method_value = (axis2_char_t *) axutil_property_get_value (method,
- env);
-
- /* The default is POST */
- if (method_value && 0 == axutil_strcmp (method_value, AXIS2_HTTP_GET))
- {
- send_via_get = AXIS2_TRUE;
- }
- }
-
- if (!url)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "url is NULL");
- return AXIS2_FAILURE;
- }
-
- if (sender->client)
- {
- axis2_http_client_free (sender->client, env);
- sender->client = NULL;
- }
-
- sender->client = axis2_http_client_create (env, url);
- if (!sender->client)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "sender->client is NULL");
- return AXIS2_FAILURE;
- }
-
- /* configure proxy settings if we have set so
- */
-
- axis2_http_sender_configure_proxy (sender, env, msg_ctx);
-
- if (!send_via_get)
- {
- axutil_property_t *property = NULL;
-
- /* We put the client into msg_ctx so that we can free it once the processing
- * is done at client side
- */
- property = axutil_property_create (env);
- axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
- axutil_property_set_free_func (property, env,
- axis2_http_client_free_void_arg);
- axutil_property_set_value (property, env, sender->client);
- axis2_msg_ctx_set_property (msg_ctx, env, AXIS2_HTTP_CLIENT, property);
-
- doing_mtom = axis2_msg_ctx_get_doing_mtom (msg_ctx, env);
-
- if (!sender->om_output)
- {
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NULL_OM_OUTPUT,
- AXIS2_FAILURE);
- return AXIS2_FAILURE;
- }
- xml_writer = axiom_output_get_xml_writer (sender->om_output, env);
-
- char_set_enc_str = axis2_msg_ctx_get_charset_encoding (msg_ctx, env);
- if (!char_set_enc_str)
- {
- char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING;
- }
- else
- {
- char_set_enc = axutil_string_get_buffer (char_set_enc_str, env);
- }
-
- if (is_soap)
- {
- dump_property = axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_DUMP_INPUT_MSG_TRUE);
- if (dump_property)
- {
- axis2_char_t *dump_true =
- axutil_property_get_value (dump_property, env);
- if (0 == axutil_strcmp (dump_true, AXIS2_VALUE_TRUE))
- {
- axis2_http_client_set_dump_input_msg (sender->client,
- env, AXIS2_TRUE);
- }
- }
-
- axiom_output_set_do_optimize (sender->om_output, env, doing_mtom);
- axiom_soap_envelope_serialize (out, env, sender->om_output,
- AXIS2_FALSE);
- }
- else
- {
- axiom_node_serialize (data_out, env, sender->om_output);
- }
-
- if (doing_mtom)
- {
- axiom_output_flush (sender->om_output, env, &output_stream,
- &output_stream_size);
- }
- else
- {
- buffer = axiom_xml_writer_get_xml (xml_writer, env);
- }
-
- if (!buffer && !doing_mtom)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "NULL xml returned"
- "from xml writer");
- return AXIS2_FAILURE;
- }
-
- request_line =
- axis2_http_request_line_create (env, "POST",
- axutil_url_get_path (url, env),
- sender->http_version);
- }
- else
- {
- axis2_char_t *request_params = NULL;
- axis2_char_t *path = NULL;
-
- request_params = axis2_http_sender_get_param_string (sender,
- env, msg_ctx);
- path = axutil_strcat (env,
- axutil_url_get_path (url, env),
- "?", request_params, NULL);
-
- request_line = axis2_http_request_line_create (env, "GET", path,
- sender->http_version);
- }
-
- request = axis2_http_simple_request_create (env, request_line, NULL, 0,
- NULL);
-
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_USER_AGENT, "Axis2/C");
-
- http_property =
- axis2_msg_ctx_get_property (msg_ctx,
- env, AXIS2_TRANSPORT_HEADER_PROPERTY);
- if (http_property)
- {
- array_list = (axutil_array_list_t *)
- axutil_property_get_value (http_property, env);
- axis2_http_sender_add_header_list (request, env, array_list);
- }
-
- if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11 (msg_ctx, env))
- {
- if ('\"' != *soap_action)
- {
- axis2_char_t *tmp_soap_action = NULL;
- tmp_soap_action =
- AXIS2_MALLOC (env->allocator,
- (axutil_strlen (soap_action) +
- 5) * sizeof (axis2_char_t));
- sprintf (tmp_soap_action, "\"%s\"", soap_action);
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_SOAP_ACTION,
- tmp_soap_action);
- AXIS2_FREE (env->allocator, tmp_soap_action);
- }
- else
- {
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_SOAP_ACTION,
- (const axis2_char_t *)
- soap_action);
- }
- }
-
- if (!send_via_get)
- {
- buffer_size = axiom_xml_writer_get_xml_size (xml_writer, env);
-
- if (AXIS2_FALSE == sender->chunked)
- {
- axis2_char_t tmp_buf[10];
- if (!buffer)
- {
- buffer_size = output_stream_size;
- }
-
- if (buffer_size)
- {
- sprintf (tmp_buf, "%d", buffer_size);
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_CONTENT_LENGTH,
- tmp_buf);
- }
- }
- else
- {
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_TRANSFER_ENCODING,
- AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED);
- }
-
- if (is_soap)
- {
- if (doing_mtom)
- {
- content_type =
- (axis2_char_t *) axiom_output_get_content_type (sender->
- om_output,
- env);
- if (AXIS2_TRUE != axis2_msg_ctx_get_is_soap_11 (msg_ctx, env) &&
- axutil_strcmp (soap_action, ""))
- {
- /* handle SOAP action for SOAP 1.2 case */
- axis2_char_t *temp_content_type = NULL;
- temp_content_type = axutil_stracat (env,
- content_type,
- ";action=\"");
- content_type = temp_content_type;
- temp_content_type = axutil_stracat (env,
- content_type,
- soap_action);
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- temp_content_type =
- axutil_stracat (env, content_type, "\"");
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- }
- else
- {
- content_type_deepl_copy = AXIS2_FALSE;
- }
- }
- else if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11 (msg_ctx, env))
- {
- axis2_char_t *temp_content_type = NULL;
- content_type =
- (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML;
- content_type = axutil_stracat (env, content_type, ";charset=");
- temp_content_type = axutil_stracat (env,
- content_type, char_set_enc);
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- }
- else
- {
- axis2_char_t *temp_content_type = NULL;
- content_type =
- (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP;
- content_type = axutil_stracat (env, content_type, ";charset=");
- temp_content_type = axutil_stracat (env,
- content_type, char_set_enc);
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- if (axutil_strcmp (soap_action, ""))
- {
- temp_content_type = axutil_stracat (env,
- content_type,
- ";action=\"");
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- temp_content_type = axutil_stracat (env,
- content_type,
- soap_action);
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- temp_content_type =
- axutil_stracat (env, content_type, "\"");
- AXIS2_FREE (env->allocator, content_type);
- content_type = temp_content_type;
- }
- /*temp_content_type = axutil_stracat(env, content_type, ";");
- AXIS2_FREE(env->allocator, content_type);
- content_type = temp_content_type; */
- }
- }
- else
- {
- content_type_property = (axutil_property_t *)
- axis2_msg_ctx_get_property (msg_ctx,
- env,
- AXIS2_USER_DEFINED_HTTP_HEADER_CONTENT_TYPE);
-
- if (content_type_property)
- {
- content_type_hash = (axutil_hash_t *)
- axutil_property_get_value (content_type_property, env);
- if (content_type_hash)
- {
- content_type_value =
- (char *) axutil_hash_get (content_type_hash,
- AXIS2_HTTP_HEADER_CONTENT_TYPE,
- AXIS2_HASH_KEY_STRING);
- }
- }
- if (content_type_value)
- content_type = content_type_value;
- else
- content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML;
-
- content_type_deepl_copy = AXIS2_FALSE;
- }
-
- axis2_http_sender_util_add_header (env,
- request,
- AXIS2_HTTP_HEADER_CONTENT_TYPE,
- content_type);
-
- if (content_type_deepl_copy && content_type)
- {
- AXIS2_FREE (env->allocator, content_type);
- content_type = NULL;
- }
- }
-
- if (0 ==
- axutil_strcmp (sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_11))
- {
- axis2_char_t *header = NULL;
- int server_len = 0;
- server_len = axutil_strlen (axutil_url_get_server (url, env));
- header = AXIS2_MALLOC (env->allocator,
- server_len + 10 * sizeof (axis2_char_t));
- sprintf (header, "%s:%d",
- axutil_url_get_server (url, env), axutil_url_get_port (url,
- env));
- axis2_http_sender_util_add_header (env, request, AXIS2_HTTP_HEADER_HOST,
- header);
- AXIS2_FREE (env->allocator, header);
- header = NULL;
- }
-
- if (doing_mtom)
- {
- axutil_stream_t *stream = axis2_http_simple_request_get_body (request,
- env);
- if (stream)
- {
- axutil_stream_write (stream, env, output_stream,
- output_stream_size);
- }
- }
- else
- {
- axis2_http_simple_request_set_body_string (request,
- env, buffer, buffer_size);
- }
-
- axis2_http_sender_configure_server_cert (sender, env, msg_ctx);
-
- axis2_http_sender_configure_key_file (sender, env, msg_ctx);
-
- axis2_http_sender_get_timeout_values (sender, env, msg_ctx);
- axis2_http_client_set_timeout (sender->client, env, sender->so_timeout);
-
- ssl_pp_param = axis2_msg_ctx_get_parameter (msg_ctx,
- env, AXIS2_SSL_PASSPHRASE);
-
- if (ssl_pp_param)
- {
- ssl_pp = axutil_param_get_value (ssl_pp_param, env);
- }
-
- /* how should this status_code be handled? */
- status_code = axis2_http_client_send (sender->client, env, request, ssl_pp);
-
- status_code = axis2_http_client_recieve_header (sender->client, env);
-
- if (AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL == status_code)
- {
- axis2_status_t auth_status;
- auth_status = axis2_http_sender_configure_http_auth (sender,
- env,
- msg_ctx, request);
-
- if (auth_status != AXIS2_SUCCESS)
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Error in setting HTTP"
- " Authentication header");
-
- status_code = axis2_http_client_send (sender->client,
- env, request, ssl_pp);
-
- status_code = axis2_http_client_recieve_header (sender->client, env);
- }
- /*AXIS2_FREE(env->allocator, buffer);
- buffer = NULL; */
-
- axis2_http_simple_request_free (request, env);
- request = NULL;
-
- AXIS2_FREE (env->allocator, output_stream);
- output_stream = NULL;
-
- if (status_code < 0)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "status_code < 0");
- return AXIS2_FAILURE;
- }
-
- response = axis2_http_client_get_response (sender->client, env);
- if (AXIS2_HTTP_RESPONSE_OK_CODE_VAL == status_code ||
- AXIS2_HTTP_RESPONSE_ACK_CODE_VAL == status_code)
- {
- return axis2_http_sender_process_response (sender, env,
- msg_ctx, response);
- }
- else if (AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL == status_code)
- {
- axis2_http_header_t *tmp_header = NULL;
- axis2_char_t *tmp_header_val = NULL;
- axis2_op_t *op = NULL;
-
- op = axis2_msg_ctx_get_op (msg_ctx, env);
- if (op)
- {
- const axis2_char_t *mep =
- axis2_op_get_msg_exchange_pattern (op, env);
- AXIS2_ERROR_SET (env->error,
- AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR,
- AXIS2_FAILURE);
- /* handle one way case */
-
- if (axutil_strcmp (mep, AXIS2_MEP_URI_OUT_ONLY) == 0 ||
- axutil_strcmp (mep, AXIS2_MEP_URI_ROBUST_OUT_ONLY) == 0)
- {
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI,
- "mep is AXIS2_MEP_URI_OUT_ONLY or"
- "AXIS2_MEP_URI_ROBUST_OUT_ONLY");
- return AXIS2_FAILURE;
- }
- }
-
- /* set an error to indicate error code status */
- tmp_header =
- axis2_http_simple_response_get_first_header (response,
- env,
- AXIS2_HTTP_HEADER_CONTENT_TYPE);
- if (tmp_header)
- {
- tmp_header_val = axis2_http_header_get_value (tmp_header, env);
- }
-
- if (tmp_header_val && (axutil_strstr (tmp_header_val,
- AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)
- || axutil_strstr (tmp_header_val,
- AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)))
- {
- return axis2_http_sender_process_response (sender,
- env, msg_ctx, response);
- }
- }
- AXIS2_ERROR_SET (env->error,
- AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE);
- return AXIS2_FAILURE;
+ axis2_http_simple_request_t *request = NULL;
+ axis2_http_request_line_t *request_line = NULL;
+ axutil_url_t *url = NULL;
+ axiom_xml_writer_t *xml_writer = NULL;
+ axis2_char_t *buffer = NULL;
+ unsigned int buffer_size = 0;
+ const axis2_char_t *char_set_enc = NULL;
+ axutil_string_t *char_set_enc_str = NULL;
+ int status_code = -1;
+ axis2_http_simple_response_t *response = NULL;
+ axis2_char_t *content_type = NULL;
+ axis2_bool_t content_type_deepl_copy = AXIS2_TRUE;
+ axis2_byte_t *output_stream = NULL;
+ int output_stream_size = 0;
+ axis2_bool_t doing_mtom = AXIS2_FALSE;
+ axutil_property_t *dump_property = NULL;
+ axutil_param_t *ssl_pp_param = NULL; /* ssl passphrase */
+ axis2_char_t *ssl_pp = NULL;
+ axutil_property_t *content_type_property = NULL;
+ axutil_hash_t *content_type_hash = NULL;
+ axis2_char_t *content_type_value = NULL;
+ axutil_property_t *method = NULL;
+ axis2_char_t *method_value = NULL;
+ axis2_bool_t send_via_get = AXIS2_FALSE;
+ axiom_node_t *data_out = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_soap_body_t *soap_body = NULL;
+ axis2_bool_t is_soap = AXIS2_TRUE;
+ axutil_property_t *http_property = NULL;
+ axutil_array_list_t *array_list;
+ soap_body = axiom_soap_envelope_get_body (out, env);
+
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, out, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, str_url, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, soap_action, AXIS2_FAILURE);
+
+ if (AXIS2_TRUE == axis2_msg_ctx_get_doing_rest (msg_ctx, env))
+ is_soap = AXIS2_FALSE;
+ else
+ is_soap = AXIS2_TRUE;
+
+ url = axutil_url_parse_string (env, str_url);
+
+ if (!is_soap)
+ {
+ if (!soap_body)
+ {
+ AXIS2_ERROR_SET (env->error,
+ AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL,
+ AXIS2_FAILURE);
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "%s",
+ AXIS2_ERROR_GET_MESSAGE (env->error));
+ return AXIS2_FAILURE;
+ }
+ body_node = axiom_soap_body_get_base_node (soap_body, env);
+ if (!body_node)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "body_node is NULL");
+ return AXIS2_FAILURE;
+ }
+ data_out = axiom_node_get_first_element (body_node, env);
+
+ method = (axutil_property_t *) axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_HTTP_METHOD);
+ if (method)
+ method_value = (axis2_char_t *) axutil_property_get_value (method,
+ env);
+
+ /* The default is POST */
+ if (method_value && 0 == axutil_strcmp (method_value, AXIS2_HTTP_GET))
+ {
+ send_via_get = AXIS2_TRUE;
+ }
+ }
+
+ if (!url)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "url is NULL");
+ return AXIS2_FAILURE;
+ }
+
+ if (sender->client)
+ {
+ axis2_http_client_free (sender->client, env);
+ sender->client = NULL;
+ }
+
+ sender->client = axis2_http_client_create (env, url);
+ if (!sender->client)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "sender->client is NULL");
+ return AXIS2_FAILURE;
+ }
+
+ /* configure proxy settings if we have set so
+ */
+
+ axis2_http_sender_configure_proxy (sender, env, msg_ctx);
+
+ if (!send_via_get)
+ {
+ axutil_property_t *property = NULL;
+
+ /* We put the client into msg_ctx so that we can free it once the processing
+ * is done at client side
+ */
+ property = axutil_property_create (env);
+ axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
+ axutil_property_set_free_func (property, env,
+ axis2_http_client_free_void_arg);
+ axutil_property_set_value (property, env, sender->client);
+ axis2_msg_ctx_set_property (msg_ctx, env, AXIS2_HTTP_CLIENT, property);
+
+ doing_mtom = axis2_msg_ctx_get_doing_mtom (msg_ctx, env);
+
+ if (!sender->om_output)
+ {
+ AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NULL_OM_OUTPUT,
+ AXIS2_FAILURE);
+ return AXIS2_FAILURE;
+ }
+ xml_writer = axiom_output_get_xml_writer (sender->om_output, env);
+
+ char_set_enc_str = axis2_msg_ctx_get_charset_encoding (msg_ctx, env);
+ if (!char_set_enc_str)
+ {
+ char_set_enc = AXIS2_DEFAULT_CHAR_SET_ENCODING;
+ }
+ else
+ {
+ char_set_enc = axutil_string_get_buffer (char_set_enc_str, env);
+ }
+
+ if (is_soap)
+ {
+ dump_property = axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_DUMP_INPUT_MSG_TRUE);
+ if (dump_property)
+ {
+ axis2_char_t *dump_true =
+ axutil_property_get_value (dump_property, env);
+ if (0 == axutil_strcmp (dump_true, AXIS2_VALUE_TRUE))
+ {
+ axis2_http_client_set_dump_input_msg (sender->client,
+ env, AXIS2_TRUE);
+ }
+ }
+
+ axiom_output_set_do_optimize (sender->om_output, env, doing_mtom);
+ axiom_soap_envelope_serialize (out, env, sender->om_output,
+ AXIS2_FALSE);
+ }
+ else
+ {
+ axiom_node_serialize (data_out, env, sender->om_output);
+ }
+
+ if (doing_mtom)
+ {
+ axiom_output_flush (sender->om_output, env, &output_stream,
+ &output_stream_size);
+ }
+ else
+ {
+ buffer = axiom_xml_writer_get_xml (xml_writer, env);
+ }
+
+ if (!buffer && !doing_mtom)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "NULL xml returned"
+ "from xml writer");
+ return AXIS2_FAILURE;
+ }
+
+ request_line =
+ axis2_http_request_line_create (env, "POST",
+ axutil_url_get_path (url, env),
+ sender->http_version);
+ }
+ else
+ {
+ axis2_char_t *request_params = NULL;
+ axis2_char_t *path = NULL;
+
+ request_params = axis2_http_sender_get_param_string (sender,
+ env, msg_ctx);
+ path = axutil_strcat (env,
+ axutil_url_get_path (url, env),
+ "?", request_params, NULL);
+
+ request_line = axis2_http_request_line_create (env, "GET", path,
+ sender->http_version);
+ }
+
+ request = axis2_http_simple_request_create (env, request_line, NULL, 0,
+ NULL);
+
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_USER_AGENT, "Axis2/C");
+
+ http_property =
+ axis2_msg_ctx_get_property (msg_ctx,
+ env, AXIS2_TRANSPORT_HEADER_PROPERTY);
+ if (http_property)
+ {
+ array_list = (axutil_array_list_t *)
+ axutil_property_get_value (http_property, env);
+ axis2_http_sender_add_header_list (request, env, array_list);
+ }
+
+ if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11 (msg_ctx, env))
+ {
+ if ('\"' != *soap_action)
+ {
+ axis2_char_t *tmp_soap_action = NULL;
+ tmp_soap_action =
+ AXIS2_MALLOC (env->allocator,
+ (axutil_strlen (soap_action) +
+ 5) * sizeof (axis2_char_t));
+ sprintf (tmp_soap_action, "\"%s\"", soap_action);
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_SOAP_ACTION,
+ tmp_soap_action);
+ AXIS2_FREE (env->allocator, tmp_soap_action);
+ }
+ else
+ {
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_SOAP_ACTION,
+ (const axis2_char_t *)
+ soap_action);
+ }
+ }
+
+ if (!send_via_get)
+ {
+ buffer_size = axiom_xml_writer_get_xml_size (xml_writer, env);
+
+ if (AXIS2_FALSE == sender->chunked)
+ {
+ axis2_char_t tmp_buf[10];
+ if (!buffer)
+ {
+ buffer_size = output_stream_size;
+ }
+
+ if (buffer_size)
+ {
+ sprintf (tmp_buf, "%d", buffer_size);
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_CONTENT_LENGTH,
+ tmp_buf);
+ }
+ }
+ else
+ {
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_TRANSFER_ENCODING,
+ AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED);
+ }
+
+ if (is_soap)
+ {
+ if (doing_mtom)
+ {
+ content_type =
+ (axis2_char_t *) axiom_output_get_content_type (sender->
+ om_output,
+ env);
+ if (AXIS2_TRUE != axis2_msg_ctx_get_is_soap_11 (msg_ctx, env) &&
+ axutil_strcmp (soap_action, ""))
+ {
+ /* handle SOAP action for SOAP 1.2 case */
+ axis2_char_t *temp_content_type = NULL;
+ temp_content_type = axutil_stracat (env,
+ content_type,
+ ";action=\"");
+ content_type = temp_content_type;
+ temp_content_type = axutil_stracat (env,
+ content_type,
+ soap_action);
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ temp_content_type =
+ axutil_stracat (env, content_type, "\"");
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ }
+ else
+ {
+ content_type_deepl_copy = AXIS2_FALSE;
+ }
+ }
+ else if (AXIS2_TRUE == axis2_msg_ctx_get_is_soap_11 (msg_ctx, env))
+ {
+ axis2_char_t *temp_content_type = NULL;
+ content_type =
+ (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML;
+ content_type = axutil_stracat (env, content_type, ";charset=");
+ temp_content_type = axutil_stracat (env,
+ content_type, char_set_enc);
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ }
+ else
+ {
+ axis2_char_t *temp_content_type = NULL;
+ content_type =
+ (axis2_char_t *) AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP;
+ content_type = axutil_stracat (env, content_type, ";charset=");
+ temp_content_type = axutil_stracat (env,
+ content_type, char_set_enc);
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ if (axutil_strcmp (soap_action, ""))
+ {
+ temp_content_type = axutil_stracat (env,
+ content_type,
+ ";action=\"");
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ temp_content_type = axutil_stracat (env,
+ content_type,
+ soap_action);
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ temp_content_type =
+ axutil_stracat (env, content_type, "\"");
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = temp_content_type;
+ }
+ /*temp_content_type = axutil_stracat(env, content_type, ";");
+ AXIS2_FREE(env->allocator, content_type);
+ content_type = temp_content_type; */
+ }
+ }
+ else
+ {
+ content_type_property = (axutil_property_t *)
+ axis2_msg_ctx_get_property (msg_ctx,
+ env,
+ AXIS2_USER_DEFINED_HTTP_HEADER_CONTENT_TYPE);
+
+ if (content_type_property)
+ {
+ content_type_hash = (axutil_hash_t *)
+ axutil_property_get_value (content_type_property, env);
+ if (content_type_hash)
+ {
+ content_type_value =
+ (char *) axutil_hash_get (content_type_hash,
+ AXIS2_HTTP_HEADER_CONTENT_TYPE,
+ AXIS2_HASH_KEY_STRING);
+ }
+ }
+ if (content_type_value)
+ content_type = content_type_value;
+ else
+ content_type = AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML;
+
+ content_type_deepl_copy = AXIS2_FALSE;
+ }
+
+ axis2_http_sender_util_add_header (env,
+ request,
+ AXIS2_HTTP_HEADER_CONTENT_TYPE,
+ content_type);
+
+ if (content_type_deepl_copy && content_type)
+ {
+ AXIS2_FREE (env->allocator, content_type);
+ content_type = NULL;
+ }
+ }
+
+ if (0 ==
+ axutil_strcmp (sender->http_version, AXIS2_HTTP_HEADER_PROTOCOL_11))
+ {
+ axis2_char_t *header = NULL;
+ int server_len = 0;
+ server_len = axutil_strlen (axutil_url_get_server (url, env));
+ header = AXIS2_MALLOC (env->allocator,
+ server_len + 10 * sizeof (axis2_char_t));
+ sprintf (header, "%s:%d",
+ axutil_url_get_server (url, env), axutil_url_get_port (url,
+ env));
+ axis2_http_sender_util_add_header (env, request, AXIS2_HTTP_HEADER_HOST,
+ header);
+ AXIS2_FREE (env->allocator, header);
+ header = NULL;
+ }
+
+ if (doing_mtom)
+ {
+ axutil_stream_t *stream = axis2_http_simple_request_get_body (request,
+ env);
+ if (stream)
+ {
+ axutil_stream_write (stream, env, output_stream,
+ output_stream_size);
+ }
+ }
+ else
+ {
+ axis2_http_simple_request_set_body_string (request,
+ env, buffer, buffer_size);
+ }
+
+ axis2_http_sender_configure_server_cert (sender, env, msg_ctx);
+
+ axis2_http_sender_configure_key_file (sender, env, msg_ctx);
+
+ axis2_http_sender_get_timeout_values (sender, env, msg_ctx);
+ axis2_http_client_set_timeout (sender->client, env, sender->so_timeout);
+
+ ssl_pp_param = axis2_msg_ctx_get_parameter (msg_ctx,
+ env, AXIS2_SSL_PASSPHRASE);
+
+ if (ssl_pp_param)
+ {
+ ssl_pp = axutil_param_get_value (ssl_pp_param, env);
+ }
+
+ /* how should this status_code be handled? */
+ status_code = axis2_http_client_send (sender->client, env, request, ssl_pp);
+
+ status_code = axis2_http_client_recieve_header (sender->client, env);
+
+ if (AXIS2_HTTP_RESPONSE_HTTP_UNAUTHORIZED_CODE_VAL == status_code)
+ {
+ axis2_status_t auth_status;
+ auth_status = axis2_http_sender_configure_http_auth (sender,
+ env,
+ msg_ctx, request);
+
+ if (auth_status != AXIS2_SUCCESS)
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Error in setting HTTP"
+ " Authentication header");
+
+ status_code = axis2_http_client_send (sender->client,
+ env, request, ssl_pp);
+
+ status_code = axis2_http_client_recieve_header (sender->client, env);
+ }
+ /*AXIS2_FREE(env->allocator, buffer);
+ buffer = NULL; */
+
+ axis2_http_simple_request_free (request, env);
+ request = NULL;
+
+ AXIS2_FREE (env->allocator, output_stream);
+ output_stream = NULL;
+
+ if (status_code < 0)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "status_code < 0");
+ return AXIS2_FAILURE;
+ }
+
+ response = axis2_http_client_get_response (sender->client, env);
+ if (AXIS2_HTTP_RESPONSE_OK_CODE_VAL == status_code ||
+ AXIS2_HTTP_RESPONSE_ACK_CODE_VAL == status_code)
+ {
+ return axis2_http_sender_process_response (sender, env,
+ msg_ctx, response);
+ }
+ else if (AXIS2_HTTP_RESPONSE_INTERNAL_SERVER_ERROR_CODE_VAL == status_code)
+ {
+ axis2_http_header_t *tmp_header = NULL;
+ axis2_char_t *tmp_header_val = NULL;
+ axis2_op_t *op = NULL;
+
+ op = axis2_msg_ctx_get_op (msg_ctx, env);
+ if (op)
+ {
+ const axis2_char_t *mep =
+ axis2_op_get_msg_exchange_pattern (op, env);
+ AXIS2_ERROR_SET (env->error,
+ AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR,
+ AXIS2_FAILURE);
+ /* handle one way case */
+
+ if (axutil_strcmp (mep, AXIS2_MEP_URI_OUT_ONLY) == 0 ||
+ axutil_strcmp (mep, AXIS2_MEP_URI_ROBUST_OUT_ONLY) == 0)
+ {
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI,
+ "mep is AXIS2_MEP_URI_OUT_ONLY or"
+ "AXIS2_MEP_URI_ROBUST_OUT_ONLY");
+ return AXIS2_FAILURE;
+ }
+ }
+
+ /* set an error to indicate error code status */
+ tmp_header =
+ axis2_http_simple_response_get_first_header (response,
+ env,
+ AXIS2_HTTP_HEADER_CONTENT_TYPE);
+ if (tmp_header)
+ {
+ tmp_header_val = axis2_http_header_get_value (tmp_header, env);
+ }
+
+ if (tmp_header_val && (axutil_strstr (tmp_header_val,
+ AXIS2_HTTP_HEADER_ACCEPT_APPL_SOAP)
+ || axutil_strstr (tmp_header_val,
+ AXIS2_HTTP_HEADER_ACCEPT_TEXT_XML)))
+ {
+ return axis2_http_sender_process_response (sender,
+ env, msg_ctx, response);
+ }
+ }
+ AXIS2_ERROR_SET (env->error,
+ AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR, AXIS2_FAILURE);
+ return AXIS2_FAILURE;
#endif
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_set_chunked (axis2_http_sender_t * sender,
- const axutil_env_t * env, axis2_bool_t chunked)
+ const axutil_env_t * env, axis2_bool_t chunked)
{
- sender->chunked = chunked;
- return AXIS2_SUCCESS;
+ sender->chunked = chunked;
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_set_om_output (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axiom_output_t * om_output)
+ const axutil_env_t * env,
+ axiom_output_t * om_output)
{
- sender->om_output = om_output;
- return AXIS2_SUCCESS;
+ sender->om_output = om_output;
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_get_header_info (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_response_t * response)
-{
- axutil_array_list_t *headers = NULL;
- axis2_char_t *charset = NULL;
- int i = 0;
- axis2_bool_t response_chunked = AXIS2_FALSE;
- int *content_length = NULL;
- axutil_property_t *property = NULL;
- axis2_char_t *content_type = NULL;
-
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, response, AXIS2_FAILURE);
-
- headers = axis2_http_simple_response_get_headers (response, env);
- if (headers == NULL)
- {
- return AXIS2_SUCCESS;
- }
- for (i = 0; i < axutil_array_list_size (headers, env); i++)
- {
- axis2_http_header_t *header = axutil_array_list_get (headers, env, i);
- axis2_char_t *name = axis2_http_header_get_name ((axis2_http_header_t *)
- header, env);
- if (name)
- {
- if (0 == axutil_strcmp (name, AXIS2_HTTP_HEADER_TRANSFER_ENCODING)
- && 0 ==
- axutil_strcmp (axis2_http_header_get_value (header, env),
- AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED))
- {
- axis2_char_t *transfer_encoding = NULL;
- transfer_encoding =
- axutil_strdup (env,
- AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED);
- response_chunked = AXIS2_TRUE;
- axis2_msg_ctx_set_transfer_encoding (msg_ctx,
- env, transfer_encoding);
-
- }
- if (0 != axutil_strcmp (name, AXIS2_HTTP_HEADER_CONTENT_TYPE))
- {
- axis2_char_t *tmp_charset = NULL;
- axis2_char_t *content_type =
- axis2_http_header_get_value (header,
- env);
- tmp_charset = strstr (content_type,
- AXIS2_HTTP_CHAR_SET_ENCODING);
- if (charset)
- {
- charset = axutil_strdup (env, tmp_charset);
- break;
- }
- }
- }
- }
- content_type =
- (axis2_char_t *) axis2_http_simple_response_get_content_type (response,
- env);
- if (content_type)
- {
- if (strstr (content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED)
- && strstr (content_type, AXIS2_HTTP_HEADER_XOP_XML))
- {
- axis2_ctx_t *axis_ctx =
- axis2_op_ctx_get_base (axis2_msg_ctx_get_op_ctx (msg_ctx, env),
- env);
- property = axutil_property_create (env);
- axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
- axutil_property_set_value (property,
- env, axutil_strdup (env, content_type));
- axis2_ctx_set_property (axis_ctx,
- env, MTOM_RECIVED_CONTENT_TYPE, property);
- }
- }
- if (charset)
- {
- axis2_ctx_t *axis_ctx =
- axis2_op_ctx_get_base (axis2_msg_ctx_get_op_ctx (msg_ctx, env), env);
- if (axis_ctx)
- {
- property = axutil_property_create (env);
- axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
- axutil_property_set_value (property, env, charset);
- axis2_ctx_set_property (axis_ctx, env, AXIS2_CHARACTER_SET_ENCODING,
- property);
- }
- }
- if (AXIS2_FALSE == response_chunked)
- {
- int tmp_len = 0;
- content_length = AXIS2_MALLOC (env->allocator, sizeof (int));
- if (!content_length)
- {
- return AXIS2_FAILURE;
- }
- tmp_len = axis2_http_simple_response_get_content_length (response, env);
- memcpy (content_length, &tmp_len, sizeof (int));
- property = axutil_property_create (env);
- axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
- axutil_property_set_value (property, env, content_length);
- axis2_msg_ctx_set_property (msg_ctx, env,
- AXIS2_HTTP_HEADER_CONTENT_LENGTH, property);
- }
- return AXIS2_SUCCESS;
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_response_t * response)
+{
+ axutil_array_list_t *headers = NULL;
+ axis2_char_t *charset = NULL;
+ int i = 0;
+ axis2_bool_t response_chunked = AXIS2_FALSE;
+ int *content_length = NULL;
+ axutil_property_t *property = NULL;
+ axis2_char_t *content_type = NULL;
+ int status_code = 0;
+
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, response, AXIS2_FAILURE);
+
+ headers = axis2_http_simple_response_get_headers (response, env);
+ if (headers == NULL)
+ {
+ return AXIS2_SUCCESS;
+ }
+ for (i = 0; i < axutil_array_list_size (headers, env); i++)
+ {
+ axis2_http_header_t *header = axutil_array_list_get (headers, env, i);
+ axis2_char_t *name = axis2_http_header_get_name ((axis2_http_header_t *)
+ header, env);
+ if (name)
+ {
+ if (0 == axutil_strcmp (name, AXIS2_HTTP_HEADER_TRANSFER_ENCODING)
+ && 0 ==
+ axutil_strcmp (axis2_http_header_get_value (header, env),
+ AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED))
+ {
+ axis2_char_t *transfer_encoding = NULL;
+ transfer_encoding =
+ axutil_strdup (env,
+ AXIS2_HTTP_HEADER_TRANSFER_ENCODING_CHUNKED);
+ response_chunked = AXIS2_TRUE;
+ axis2_msg_ctx_set_transfer_encoding (msg_ctx,
+ env, transfer_encoding);
+
+ }
+ if (0 != axutil_strcmp (name, AXIS2_HTTP_HEADER_CONTENT_TYPE))
+ {
+ axis2_char_t *tmp_charset = NULL;
+ axis2_char_t *content_type =
+ axis2_http_header_get_value (header,
+ env);
+ tmp_charset = strstr (content_type,
+ AXIS2_HTTP_CHAR_SET_ENCODING);
+ if (charset)
+ {
+ charset = axutil_strdup (env, tmp_charset);
+ break;
+ }
+ }
+ }
+ }
+ content_type =
+ (axis2_char_t *) axis2_http_simple_response_get_content_type (response,
+ env);
+ if (content_type)
+ {
+ if (strstr (content_type, AXIS2_HTTP_HEADER_ACCEPT_MULTIPART_RELATED)
+ && strstr (content_type, AXIS2_HTTP_HEADER_XOP_XML))
+ {
+ axis2_ctx_t *axis_ctx =
+ axis2_op_ctx_get_base (axis2_msg_ctx_get_op_ctx (msg_ctx, env),
+ env);
+ property = axutil_property_create (env);
+ axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
+ axutil_property_set_value (property,
+ env, axutil_strdup (env, content_type));
+ axis2_ctx_set_property (axis_ctx,
+ env, MTOM_RECIVED_CONTENT_TYPE, property);
+ }
+ }
+ if (charset)
+ {
+ axis2_ctx_t *axis_ctx =
+ axis2_op_ctx_get_base (axis2_msg_ctx_get_op_ctx (msg_ctx, env), env);
+ if (axis_ctx)
+ {
+ property = axutil_property_create (env);
+ axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
+ axutil_property_set_value (property, env, charset);
+ axis2_ctx_set_property (axis_ctx, env, AXIS2_CHARACTER_SET_ENCODING,
+ property);
+ }
+ }
+ if (AXIS2_FALSE == response_chunked)
+ {
+ int tmp_len = 0;
+ content_length = AXIS2_MALLOC (env->allocator, sizeof (int));
+ if (!content_length)
+ {
+ return AXIS2_FAILURE;
+ }
+ tmp_len = axis2_http_simple_response_get_content_length (response, env);
+ memcpy (content_length, &tmp_len, sizeof (int));
+ property = axutil_property_create (env);
+ axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
+ axutil_property_set_value (property, env, content_length);
+ axis2_msg_ctx_set_property (msg_ctx, env,
+ AXIS2_HTTP_HEADER_CONTENT_LENGTH, property);
+ }
+
+ status_code = axis2_http_simple_response_get_status_code (response, env);
+ axis2_msg_ctx_set_status_code (msg_ctx, env, status_code);
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_process_response (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_response_t * response)
-{
- axutil_stream_t *in_stream = NULL;
- axutil_property_t *property = NULL;
-
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, response, AXIS2_FAILURE);
-
- in_stream = axis2_http_simple_response_get_body (response, env);
- if (!in_stream)
- {
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY,
- AXIS2_FAILURE);
- return AXIS2_FAILURE;
- }
-
- axis2_http_sender_get_header_info (sender, env, msg_ctx, response);
- /*axis_ctx = axis2_op_ctx_get_base( axis2_msg_ctx_get_op_ctx(msg_ctx, env),
- env); */
- property = axutil_property_create (env);
- axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
- axutil_property_set_free_func (property, env, axutil_stream_free_void_arg);
- axutil_property_set_value (property, env, in_stream);
- /*axis2_ctx_set_property(axis_ctx, env, AXIS2_TRANSPORT_IN, property); */
- axis2_msg_ctx_set_property (msg_ctx, env, AXIS2_TRANSPORT_IN, property);
- return AXIS2_SUCCESS;
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_response_t * response)
+{
+ axutil_stream_t *in_stream = NULL;
+ axutil_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, response, AXIS2_FAILURE);
+
+ in_stream = axis2_http_simple_response_get_body (response, env);
+ if (!in_stream)
+ {
+ AXIS2_ERROR_SET (env->error, AXIS2_ERROR_NULL_STREAM_IN_RESPONSE_BODY,
+ AXIS2_FAILURE);
+ return AXIS2_FAILURE;
+ }
+
+ axis2_http_sender_get_header_info (sender, env, msg_ctx, response);
+ /*axis_ctx = axis2_op_ctx_get_base( axis2_msg_ctx_get_op_ctx(msg_ctx, env),
+ env); */
+ property = axutil_property_create (env);
+ axutil_property_set_scope (property, env, AXIS2_SCOPE_REQUEST);
+ axutil_property_set_free_func (property, env, axutil_stream_free_void_arg);
+ axutil_property_set_value (property, env, in_stream);
+ /*axis2_ctx_set_property(axis_ctx, env, AXIS2_TRANSPORT_IN, property); */
+ axis2_msg_ctx_set_property (msg_ctx, env, AXIS2_TRANSPORT_IN, property);
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_get_timeout_values (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx)
{
- axis2_char_t *so_str = NULL;
- axis2_char_t *connection_str = NULL;
- axutil_param_t *tmp_param = NULL;
-
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
-
- tmp_param = axis2_msg_ctx_get_parameter (msg_ctx,
- env, AXIS2_HTTP_SO_TIMEOUT);
-
- if (tmp_param)
- {
- so_str = (axis2_char_t *) axutil_param_get_value (tmp_param, env);
- if (so_str)
- {
- sender->so_timeout = AXIS2_ATOI (so_str);
- }
- }
- tmp_param = axis2_msg_ctx_get_parameter (msg_ctx, env,
- AXIS2_HTTP_CONNECTION_TIMEOUT);
- if (tmp_param)
- {
- connection_str =
- (axis2_char_t *) axutil_param_get_value (tmp_param, env);
- if (connection_str)
- {
- sender->connection_timeout = AXIS2_ATOI (connection_str);
- }
+ axis2_char_t *so_str = NULL;
+ axis2_char_t *connection_str = NULL;
+ axutil_param_t *tmp_param = NULL;
+
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+
+ tmp_param = axis2_msg_ctx_get_parameter (msg_ctx,
+ env, AXIS2_HTTP_SO_TIMEOUT);
+
+ if (tmp_param)
+ {
+ so_str = (axis2_char_t *) axutil_param_get_value (tmp_param, env);
+ if (so_str)
+ {
+ sender->so_timeout = AXIS2_ATOI (so_str);
+ }
+ }
+ tmp_param = axis2_msg_ctx_get_parameter (msg_ctx, env,
+ AXIS2_HTTP_CONNECTION_TIMEOUT);
+ if (tmp_param)
+ {
+ connection_str =
+ (axis2_char_t *) axutil_param_get_value (tmp_param, env);
+ if (connection_str)
+ {
+ sender->connection_timeout = AXIS2_ATOI (connection_str);
+ }
}
- return AXIS2_SUCCESS;
+ return AXIS2_SUCCESS;
}
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_http_sender_set_http_version (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_char_t * version)
+ const axutil_env_t * env,
+ axis2_char_t * version)
{
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- sender->http_version = axutil_strdup (env, version);
- if (!sender->http_version)
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ sender->http_version = axutil_strdup (env, version);
+ if (!sender->http_version)
{
- return AXIS2_FAILURE;
+ return AXIS2_FAILURE;
}
- return AXIS2_SUCCESS;
+ return AXIS2_SUCCESS;
}
#ifndef AXIS2_LIBCURL_ENABLED
static void
axis2_http_sender_add_header_list (axis2_http_simple_request_t * request,
- const axutil_env_t * env,
- axutil_array_list_t * array_list)
+ const axutil_env_t * env,
+ axutil_array_list_t * array_list)
{
- int ii = 0;
- int kk = 0;
- axis2_http_header_t *http_header = NULL;
- ii = axutil_array_list_size (array_list, env);
- for (; kk < ii; kk++)
- {
- http_header =
- (axis2_http_header_t *) axutil_array_list_get (array_list, env, kk);
- axis2_http_simple_request_add_header (request, env, http_header);
+ int ii = 0;
+ int kk = 0;
+ axis2_http_header_t *http_header = NULL;
+ ii = axutil_array_list_size (array_list, env);
+ for (; kk < ii; kk++)
+ {
+ http_header =
+ (axis2_http_header_t *) axutil_array_list_get (array_list, env, kk);
+ axis2_http_simple_request_add_header (request, env, http_header);
}
}
static axis2_status_t
axis2_http_sender_configure_proxy (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx)
{
- axis2_conf_ctx_t *conf_ctx = NULL;
- axis2_conf_t *conf = NULL;
- axis2_transport_out_desc_t *trans_desc = NULL;
- axutil_param_t *proxy_param = NULL;
- axutil_hash_t *transport_attrs = NULL;
- axis2_char_t *proxy_host = NULL;
- axis2_char_t *proxy_port = NULL;
-
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
-
- conf_ctx = axis2_msg_ctx_get_conf_ctx (msg_ctx, env);
- if (!conf_ctx)
- {
- return AXIS2_FAILURE;
- }
- conf = axis2_conf_ctx_get_conf (conf_ctx, env);
- if (!conf)
- {
- return AXIS2_FAILURE;
- }
-
- trans_desc = axis2_conf_get_transport_out (conf,
- env, AXIS2_TRANSPORT_ENUM_HTTP);
- if (!trans_desc)
- {
- return AXIS2_FAILURE;
- }
-
- proxy_param =
- axutil_param_container_get_param
- (axis2_transport_out_desc_param_container (trans_desc, env), env,
- AXIS2_HTTP_PROXY);
- if (proxy_param)
- {
- transport_attrs = axutil_param_get_attributes (proxy_param, env);
- if (transport_attrs)
- {
- axutil_generic_obj_t *obj = NULL;
- axiom_attribute_t *host_attr = NULL;
- axiom_attribute_t *port_attr = NULL;
-
- obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_HOST,
- AXIS2_HASH_KEY_STRING);
- if (!obj)
- {
- return AXIS2_FAILURE;
- }
- host_attr = (axiom_attribute_t *) axutil_generic_obj_get_value (obj,
- env);
- if (!host_attr)
- {
- return AXIS2_FAILURE;
- }
- proxy_host = axiom_attribute_get_value (host_attr, env);
- if (!proxy_host)
- {
- return AXIS2_FAILURE;
- }
- /* Now we get the port */
- obj = NULL;
-
- obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_PORT,
- AXIS2_HASH_KEY_STRING);
- port_attr = (axiom_attribute_t *) axutil_generic_obj_get_value (obj,
- env);
- if (!port_attr)
- {
- return AXIS2_FAILURE;
- }
- proxy_port = axiom_attribute_get_value (port_attr, env);
- if (!proxy_port)
- {
- return AXIS2_FAILURE;
- }
- }
- }
- else
- {
- proxy_param =
- axutil_param_container_get_param
- (axis2_transport_out_desc_param_container (trans_desc, env), env,
- AXIS2_HTTP_PROXY_API);
- if (proxy_param)
- {
- transport_attrs = axutil_param_get_attributes (proxy_param, env);
- if (transport_attrs)
- {
- axutil_generic_obj_t *obj = NULL;
- axiom_attribute_t *host_attr = NULL;
- axiom_attribute_t *port_attr = NULL;
-
- obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_HOST,
- AXIS2_HASH_KEY_STRING);
- if (!obj)
- {
- return AXIS2_FAILURE;
- }
- host_attr =
- (axiom_attribute_t *) axutil_generic_obj_get_value (obj, env);
- if (!host_attr)
- {
- return AXIS2_FAILURE;
- }
- proxy_host = axiom_attribute_get_localname (host_attr, env);
- if (!proxy_host)
- {
- return AXIS2_FAILURE;
- }
- /* Now we get the port */
- obj = NULL;
-
- obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_PORT,
- AXIS2_HASH_KEY_STRING);
- port_attr =
- (axiom_attribute_t *) axutil_generic_obj_get_value (obj, env);
- if (!port_attr)
- {
- return AXIS2_FAILURE;
- }
-
- proxy_port = axiom_attribute_get_localname (port_attr, env);
- if (!proxy_port)
- {
- return AXIS2_FAILURE;
- }
-
- }
- }
+ axis2_conf_ctx_t *conf_ctx = NULL;
+ axis2_conf_t *conf = NULL;
+ axis2_transport_out_desc_t *trans_desc = NULL;
+ axutil_param_t *proxy_param = NULL;
+ axutil_hash_t *transport_attrs = NULL;
+ axis2_char_t *proxy_host = NULL;
+ axis2_char_t *proxy_port = NULL;
+
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+
+ conf_ctx = axis2_msg_ctx_get_conf_ctx (msg_ctx, env);
+ if (!conf_ctx)
+ {
+ return AXIS2_FAILURE;
+ }
+ conf = axis2_conf_ctx_get_conf (conf_ctx, env);
+ if (!conf)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ trans_desc = axis2_conf_get_transport_out (conf,
+ env, AXIS2_TRANSPORT_ENUM_HTTP);
+ if (!trans_desc)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ proxy_param =
+ axutil_param_container_get_param
+ (axis2_transport_out_desc_param_container (trans_desc, env), env,
+ AXIS2_HTTP_PROXY);
+ if (proxy_param)
+ {
+ transport_attrs = axutil_param_get_attributes (proxy_param, env);
+ if (transport_attrs)
+ {
+ axutil_generic_obj_t *obj = NULL;
+ axiom_attribute_t *host_attr = NULL;
+ axiom_attribute_t *port_attr = NULL;
+
+ obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_HOST,
+ AXIS2_HASH_KEY_STRING);
+ if (!obj)
+ {
+ return AXIS2_FAILURE;
+ }
+ host_attr = (axiom_attribute_t *) axutil_generic_obj_get_value (obj,
+ env);
+ if (!host_attr)
+ {
+ return AXIS2_FAILURE;
+ }
+ proxy_host = axiom_attribute_get_value (host_attr, env);
+ if (!proxy_host)
+ {
+ return AXIS2_FAILURE;
+ }
+ /* Now we get the port */
+ obj = NULL;
+
+ obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_PORT,
+ AXIS2_HASH_KEY_STRING);
+ port_attr = (axiom_attribute_t *) axutil_generic_obj_get_value (obj,
+ env);
+ if (!port_attr)
+ {
+ return AXIS2_FAILURE;
+ }
+ proxy_port = axiom_attribute_get_value (port_attr, env);
+ if (!proxy_port)
+ {
+ return AXIS2_FAILURE;
+ }
+ }
+ }
+ else
+ {
+ proxy_param =
+ axutil_param_container_get_param
+ (axis2_transport_out_desc_param_container (trans_desc, env), env,
+ AXIS2_HTTP_PROXY_API);
+ if (proxy_param)
+ {
+ transport_attrs = axutil_param_get_attributes (proxy_param, env);
+ if (transport_attrs)
+ {
+ axutil_generic_obj_t *obj = NULL;
+ axiom_attribute_t *host_attr = NULL;
+ axiom_attribute_t *port_attr = NULL;
+
+ obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_HOST,
+ AXIS2_HASH_KEY_STRING);
+ if (!obj)
+ {
+ return AXIS2_FAILURE;
+ }
+ host_attr =
+ (axiom_attribute_t *) axutil_generic_obj_get_value (obj, env);
+ if (!host_attr)
+ {
+ return AXIS2_FAILURE;
+ }
+ proxy_host = axiom_attribute_get_localname (host_attr, env);
+ if (!proxy_host)
+ {
+ return AXIS2_FAILURE;
+ }
+ /* Now we get the port */
+ obj = NULL;
+
+ obj = axutil_hash_get (transport_attrs, AXIS2_HTTP_PROXY_PORT,
+ AXIS2_HASH_KEY_STRING);
+ port_attr =
+ (axiom_attribute_t *) axutil_generic_obj_get_value (obj, env);
+ if (!port_attr)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ proxy_port = axiom_attribute_get_localname (port_attr, env);
+ if (!proxy_port)
+ {
+ return AXIS2_FAILURE;
+ }
+
+ }
+ }
}
- if (proxy_port && proxy_host)
+ if (proxy_port && proxy_host)
{
- axis2_http_client_set_proxy (sender->client, env, proxy_host,
- AXIS2_ATOI (proxy_port));
+ axis2_http_client_set_proxy (sender->client, env, proxy_host,
+ AXIS2_ATOI (proxy_port));
}
- return AXIS2_SUCCESS;
+ return AXIS2_SUCCESS;
}
#endif
#ifndef AXIS2_LIBCURL_ENABLED
static axis2_status_t
axis2_http_sender_configure_server_cert (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx)
{
- axutil_property_t *server_cert_property = NULL;
- axutil_param_t *server_cert_param = NULL;
- axis2_char_t *server_cert = NULL;
- axis2_status_t status = AXIS2_FAILURE;
+ axutil_property_t *server_cert_property = NULL;
+ axutil_param_t *server_cert_param = NULL;
+ axis2_char_t *server_cert = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
- server_cert_property = axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_SSL_SERVER_CERT);
- if (server_cert_property)
+ server_cert_property = axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_SSL_SERVER_CERT);
+ if (server_cert_property)
{
- server_cert =
- (axis2_char_t *) axutil_property_get_value (server_cert_property,
- env);
+ server_cert =
+ (axis2_char_t *) axutil_property_get_value (server_cert_property,
+ env);
}
- else
+ else
{
- server_cert_param = axis2_msg_ctx_get_parameter (msg_ctx,
- env,
- AXIS2_SSL_SERVER_CERT);
- if (server_cert_param)
- {
- server_cert =
- (axis2_char_t *) axutil_param_get_value (server_cert_param, env);
- }
+ server_cert_param = axis2_msg_ctx_get_parameter (msg_ctx,
+ env,
+ AXIS2_SSL_SERVER_CERT);
+ if (server_cert_param)
+ {
+ server_cert =
+ (axis2_char_t *) axutil_param_get_value (server_cert_param, env);
+ }
}
- if (server_cert)
+ if (server_cert)
{
- status = axis2_http_client_set_server_cert (sender->client,
- env, server_cert);
+ status = axis2_http_client_set_server_cert (sender->client,
+ env, server_cert);
}
- return status;
+ return status;
}
#endif
#ifndef AXIS2_LIBCURL_ENABLED
static axis2_status_t
axis2_http_sender_configure_key_file (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx)
{
- axutil_property_t *key_file_property = NULL;
- axutil_param_t *key_file_param = NULL;
- axis2_char_t *key_file = NULL;
- axis2_status_t status = AXIS2_FAILURE;
+ axutil_property_t *key_file_property = NULL;
+ axutil_param_t *key_file_param = NULL;
+ axis2_char_t *key_file = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
- AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
+ AXIS2_ENV_CHECK (env, AXIS2_FAILURE);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, AXIS2_FAILURE);
- key_file_property = axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_SSL_KEY_FILE);
- if (key_file_property)
+ key_file_property = axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_SSL_KEY_FILE);
+ if (key_file_property)
{
- key_file =
- (axis2_char_t *) axutil_property_get_value (key_file_property, env);
+ key_file =
+ (axis2_char_t *) axutil_property_get_value (key_file_property, env);
}
- else
+ else
{
- key_file_param = axis2_msg_ctx_get_parameter (msg_ctx, env,
- AXIS2_SSL_KEY_FILE);
- if (key_file_param)
- {
- key_file =
- (axis2_char_t *) axutil_param_get_value (key_file_param, env);
- }
+ key_file_param = axis2_msg_ctx_get_parameter (msg_ctx, env,
+ AXIS2_SSL_KEY_FILE);
+ if (key_file_param)
+ {
+ key_file =
+ (axis2_char_t *) axutil_param_get_value (key_file_param, env);
+ }
}
- if (key_file)
+ if (key_file)
{
- status = axis2_http_client_set_key_file (sender->client, env, key_file);
+ status = axis2_http_client_set_key_file (sender->client, env, key_file);
}
- return status;
+ return status;
}
#endif
#ifndef AXIS2_LIBCURL_ENABLED
static axis2_status_t
axis2_http_sender_configure_http_basic_auth (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_request_t *
- request)
-{
- axutil_property_t *http_auth_un = NULL;
- axutil_property_t *http_auth_pw = NULL;
- axis2_char_t *uname = NULL;
- axis2_char_t *passwd = NULL;
-
- http_auth_un = axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_HTTP_AUTH_UNAME);
- http_auth_pw = axis2_msg_ctx_get_property (msg_ctx, env,
- AXIS2_HTTP_AUTH_PASSWD);
- if (http_auth_un && http_auth_pw)
- {
- uname = (axis2_char_t *) axutil_property_get_value (http_auth_un, env);
- passwd = (axis2_char_t *) axutil_property_get_value (http_auth_pw, env);
-
- if (uname && passwd)
- {
- int elen;
- int plen = axutil_strlen (uname) + axutil_strlen (passwd) + 1;
- axis2_char_t *to_encode =
- (axis2_char_t
- *) (AXIS2_MALLOC (env->allocator, sizeof (axis2_char_t) * plen));
- axis2_char_t *encoded = NULL;
- axis2_char_t *auth_str = NULL;
- sprintf (to_encode, "%s:%s", uname, passwd);
- elen = axutil_base64_encode_len (plen);
- encoded = (axis2_char_t *) (AXIS2_MALLOC (env->allocator,
- sizeof (axis2_char_t) *
- elen));
- auth_str =
- (axis2_char_t
- *) (AXIS2_MALLOC (env->allocator,
- sizeof (axis2_char_t) * (elen + 6)));
- axutil_base64_encode (encoded, to_encode, plen);
- sprintf (auth_str, "%s %s", AXIS2_HTTP_AUTH_TYPE_BASIC, encoded);
- axis2_http_sender_util_add_header (env, request,
- AXIS2_HTTP_HEADER_AUTHORIZATION,
- auth_str);
-
- AXIS2_FREE (env->allocator, to_encode);
- to_encode = NULL;
- AXIS2_FREE (env->allocator, encoded);
- encoded = NULL;
- AXIS2_FREE (env->allocator, auth_str);
- auth_str = NULL;
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_request_t *
+ request)
+{
+ axutil_property_t *http_auth_un = NULL;
+ axutil_property_t *http_auth_pw = NULL;
+ axis2_char_t *uname = NULL;
+ axis2_char_t *passwd = NULL;
+
+ http_auth_un = axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_HTTP_AUTH_UNAME);
+ http_auth_pw = axis2_msg_ctx_get_property (msg_ctx, env,
+ AXIS2_HTTP_AUTH_PASSWD);
+ if (http_auth_un && http_auth_pw)
+ {
+ uname = (axis2_char_t *) axutil_property_get_value (http_auth_un, env);
+ passwd = (axis2_char_t *) axutil_property_get_value (http_auth_pw, env);
+
+ if (uname && passwd)
+ {
+ int elen;
+ int plen = axutil_strlen (uname) + axutil_strlen (passwd) + 1;
+ axis2_char_t *to_encode =
+ (axis2_char_t
+ *) (AXIS2_MALLOC (env->allocator, sizeof (axis2_char_t) * plen));
+ axis2_char_t *encoded = NULL;
+ axis2_char_t *auth_str = NULL;
+ sprintf (to_encode, "%s:%s", uname, passwd);
+ elen = axutil_base64_encode_len (plen);
+ encoded = (axis2_char_t *) (AXIS2_MALLOC (env->allocator,
+ sizeof (axis2_char_t) *
+ elen));
+ auth_str =
+ (axis2_char_t
+ *) (AXIS2_MALLOC (env->allocator,
+ sizeof (axis2_char_t) * (elen + 6)));
+ axutil_base64_encode (encoded, to_encode, plen);
+ sprintf (auth_str, "%s %s", AXIS2_HTTP_AUTH_TYPE_BASIC, encoded);
+ axis2_http_sender_util_add_header (env, request,
+ AXIS2_HTTP_HEADER_AUTHORIZATION,
+ auth_str);
+
+ AXIS2_FREE (env->allocator, to_encode);
+ to_encode = NULL;
+ AXIS2_FREE (env->allocator, encoded);
+ encoded = NULL;
+ AXIS2_FREE (env->allocator, auth_str);
+ auth_str = NULL;
- return AXIS2_SUCCESS;
- }
+ return AXIS2_SUCCESS;
+ }
}
- return AXIS2_FAILURE;
+ return AXIS2_FAILURE;
}
#endif
@@ -1200,246 +1204,246 @@
#ifndef AXIS2_LIBCURL_ENABLED
static axis2_status_t
axis2_http_sender_configure_http_digest_auth (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_request_t *
- request)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_request_t *
+ request)
{
- /*TODO: Implement Digest Auth */
- return AXIS2_FAILURE;
+ /*TODO: Implement Digest Auth */
+ return AXIS2_FAILURE;
}
#endif
#ifndef AXIS2_LIBCURL_ENABLED
static axis2_status_t
axis2_http_sender_configure_http_auth (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axis2_http_simple_request_t * request)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axis2_http_simple_request_t * request)
{
- axis2_status_t status = AXIS2_FALSE;
- axis2_char_t *auth_type = NULL;
- axis2_http_header_t *auth_header = NULL;
- axis2_http_simple_response_t *response = NULL;
- axis2_char_t *auth_type_end = NULL;
+ axis2_status_t status = AXIS2_FALSE;
+ axis2_char_t *auth_type = NULL;
+ axis2_http_header_t *auth_header = NULL;
+ axis2_http_simple_response_t *response = NULL;
+ axis2_char_t *auth_type_end = NULL;
- response = axis2_http_client_get_response (sender->client, env);
+ response = axis2_http_client_get_response (sender->client, env);
- if (response)
- auth_header = axis2_http_simple_response_get_first_header (response, env,
- AXIS2_HTTP_HEADER_WWW_AUTHENTICATE);
+ if (response)
+ auth_header = axis2_http_simple_response_get_first_header (response, env,
+ AXIS2_HTTP_HEADER_WWW_AUTHENTICATE);
- if (auth_header)
- auth_type = axis2_http_header_get_value (auth_header, env);
+ if (auth_header)
+ auth_type = axis2_http_header_get_value (auth_header, env);
- if (auth_type)
+ if (auth_type)
{
- auth_type_end = axutil_strchr (auth_type, ' ');
- *auth_type_end = '\0';
- auth_type_end++;
- /*Read the realm and the rest stuff now from auth_type_end */
+ auth_type_end = axutil_strchr (auth_type, ' ');
+ *auth_type_end = '\0';
+ auth_type_end++;
+ /*Read the realm and the rest stuff now from auth_type_end */
}
- if (auth_type)
+ if (auth_type)
{
- if (axutil_strcmp (auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC) == 0)
- status = axis2_http_sender_configure_http_basic_auth (sender, env,
- msg_ctx,
- request);
- else if (axutil_strcmp (auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0)
- status = axis2_http_sender_configure_http_digest_auth (sender, env,
- msg_ctx,
- request);
- else
- AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Authtype %s is not"
- "supported", auth_type);
+ if (axutil_strcmp (auth_type, AXIS2_HTTP_AUTH_TYPE_BASIC) == 0)
+ status = axis2_http_sender_configure_http_basic_auth (sender, env,
+ msg_ctx,
+ request);
+ else if (axutil_strcmp (auth_type, AXIS2_HTTP_AUTH_TYPE_DIGEST) == 0)
+ status = axis2_http_sender_configure_http_digest_auth (sender, env,
+ msg_ctx,
+ request);
+ else
+ AXIS2_LOG_ERROR (env->log, AXIS2_LOG_SI, "Authtype %s is not"
+ "supported", auth_type);
}
- else
+ else
{
- AXIS2_ERROR_SET (env->error, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR,
- AXIS2_FAILURE);
+ AXIS2_ERROR_SET (env->error, AXIS2_ERROR_HTTP_CLIENT_TRANSPORT_ERROR,
+ AXIS2_FAILURE);
}
- return status;
+ return status;
}
#endif
#ifdef AXIS2_LIBCURL_ENABLED
AXIS2_EXTERN axis2_status_t AXIS2_CALL
axis2_libcurl_http_send (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx,
- axiom_soap_envelope_t * out,
- const axis2_char_t * str_url,
- const axis2_char_t * soap_action)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx,
+ axiom_soap_envelope_t * out,
+ const axis2_char_t * str_url,
+ const axis2_char_t * soap_action)
{
- return axis2_libcurl_send (sender->om_output,
- env, msg_ctx, out, str_url, soap_action);
+ return axis2_libcurl_send (sender->om_output,
+ env, msg_ctx, out, str_url, soap_action);
}
#endif
AXIS2_EXTERN axis2_char_t *AXIS2_CALL
axis2_http_sender_get_param_string (axis2_http_sender_t * sender,
- const axutil_env_t * env,
- axis2_msg_ctx_t * msg_ctx)
+ const axutil_env_t * env,
+ axis2_msg_ctx_t * msg_ctx)
{
- axiom_soap_envelope_t *soap_env = NULL;
- axiom_node_t *body_node = NULL;
- axiom_node_t *data_node = NULL;
- axiom_element_t *data_element = NULL;
- axiom_child_element_iterator_t *iterator = NULL;
- axutil_array_list_t *param_list = NULL;
- axis2_char_t *param_string = NULL;
- int i = 0;
-
- AXIS2_ENV_CHECK (env, NULL);
- AXIS2_PARAM_CHECK (env->error, msg_ctx, NULL);
-
- soap_env = axis2_msg_ctx_get_soap_envelope (msg_ctx, env);
- if (!soap_env)
- {
- return NULL;
- }
- body_node =
- axiom_soap_body_get_base_node (axiom_soap_envelope_get_body
- (soap_env, env), env);
- data_node = axiom_node_get_first_child (body_node, env);
- if (!data_node)
- {
- return NULL;
- }
- param_list =
- axutil_array_list_create (env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
-
- data_element = axiom_node_get_data_element (data_node, env);
-
- iterator = axiom_element_get_child_elements (data_element, env, data_node);
-
- if (iterator)
- {
- while (AXIS2_TRUE ==
- AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT (iterator, env))
- {
- axiom_node_t *node = NULL;
- axiom_element_t *element = NULL;
- axis2_char_t *name = NULL;
- axis2_char_t *value = NULL;
- axis2_char_t *encoded_value = NULL;
-
- node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT (iterator, env);
- element = axiom_node_get_data_element (node, env);
- name = axiom_element_get_localname (element, env);
- value = axiom_element_get_text (element, env, node);
- if (value)
- {
- encoded_value =
- (axis2_char_t *) AXIS2_MALLOC (env->allocator,
- strlen (value));
- memset (encoded_value, 0, strlen (value));
- encoded_value =
- axutil_url_encode (env, encoded_value, value, strlen (value));
-
- axutil_array_list_add (param_list, env,
- axutil_strcat (env, name, "=",
- encoded_value, NULL));
- }
- }
- }
- for (i = 0; i < axutil_array_list_size (param_list, env); i++)
- {
- axis2_char_t *tmp_string = NULL;
- axis2_char_t *pair = NULL;
-
- pair = axutil_array_list_get (param_list, env, i);
- if (i == 0)
- tmp_string = axutil_stracat (env, param_string, pair);
- else
- tmp_string = axutil_strcat (env, param_string, "&", pair, NULL);
-
- if (param_string)
- {
- AXIS2_FREE (env->allocator, param_string);
- param_string = NULL;
- }
- AXIS2_FREE (env->allocator, pair);
- param_string = tmp_string;
+ axiom_soap_envelope_t *soap_env = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_node_t *data_node = NULL;
+ axiom_element_t *data_element = NULL;
+ axiom_child_element_iterator_t *iterator = NULL;
+ axutil_array_list_t *param_list = NULL;
+ axis2_char_t *param_string = NULL;
+ int i = 0;
+
+ AXIS2_ENV_CHECK (env, NULL);
+ AXIS2_PARAM_CHECK (env->error, msg_ctx, NULL);
+
+ soap_env = axis2_msg_ctx_get_soap_envelope (msg_ctx, env);
+ if (!soap_env)
+ {
+ return NULL;
+ }
+ body_node =
+ axiom_soap_body_get_base_node (axiom_soap_envelope_get_body
+ (soap_env, env), env);
+ data_node = axiom_node_get_first_child (body_node, env);
+ if (!data_node)
+ {
+ return NULL;
+ }
+ param_list =
+ axutil_array_list_create (env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+
+ data_element = axiom_node_get_data_element (data_node, env);
+
+ iterator = axiom_element_get_child_elements (data_element, env, data_node);
+
+ if (iterator)
+ {
+ while (AXIS2_TRUE ==
+ AXIOM_CHILD_ELEMENT_ITERATOR_HAS_NEXT (iterator, env))
+ {
+ axiom_node_t *node = NULL;
+ axiom_element_t *element = NULL;
+ axis2_char_t *name = NULL;
+ axis2_char_t *value = NULL;
+ axis2_char_t *encoded_value = NULL;
+
+ node = AXIOM_CHILD_ELEMENT_ITERATOR_NEXT (iterator, env);
+ element = axiom_node_get_data_element (node, env);
+ name = axiom_element_get_localname (element, env);
+ value = axiom_element_get_text (element, env, node);
+ if (value)
+ {
+ encoded_value =
+ (axis2_char_t *) AXIS2_MALLOC (env->allocator,
+ strlen (value));
+ memset (encoded_value, 0, strlen (value));
+ encoded_value =
+ axutil_url_encode (env, encoded_value, value, strlen (value));
+
+ axutil_array_list_add (param_list, env,
+ axutil_strcat (env, name, "=",
+ encoded_value, NULL));
+ }
+ }
+ }
+ for (i = 0; i < axutil_array_list_size (param_list, env); i++)
+ {
+ axis2_char_t *tmp_string = NULL;
+ axis2_char_t *pair = NULL;
+
+ pair = axutil_array_list_get (param_list, env, i);
+ if (i == 0)
+ tmp_string = axutil_stracat (env, param_string, pair);
+ else
+ tmp_string = axutil_strcat (env, param_string, "&", pair, NULL);
+
+ if (param_string)
+ {
+ AXIS2_FREE (env->allocator, param_string);
+ param_string = NULL;
+ }
+ AXIS2_FREE (env->allocator, pair);
+ param_string = tmp_string;
}
- axutil_array_list_free (param_list, env);
- return param_string;
+ axutil_array_list_free (param_list, env);
+ return param_string;
}
static axis2_char_t *
axutil_url_encode (const axutil_env_t * env,
- axis2_char_t * dest, axis2_char_t * buff, int len)
+ axis2_char_t * dest, axis2_char_t * buff, int len)
{
- axis2_char_t string[4];
- axis2_char_t *expand_buffer;
- int i;
- for (i = 0; i < len && buff[i]; i++)
- {
- if (isalnum (buff[i]) || is_safe_or_unreserve (buff[i]))
- {
- sprintf (string, "%c", buff[i]);
- }
- else
- {
- sprintf (string, "%%%x", buff[i]);
- }
-
- if ((strlen (dest) + 4) > len)
- {
- expand_buffer =
- (axis2_char_t *) AXIS2_MALLOC (env->allocator, len * 2);
- memset (expand_buffer, 0, len * 2);
- len *= 2;
- dest = memmove (expand_buffer, dest, strlen (dest));
- }
- strcat (dest, string);
+ axis2_char_t string[4];
+ axis2_char_t *expand_buffer;
+ int i;
+ for (i = 0; i < len && buff[i]; i++)
+ {
+ if (isalnum (buff[i]) || is_safe_or_unreserve (buff[i]))
+ {
+ sprintf (string, "%c", buff[i]);
+ }
+ else
+ {
+ sprintf (string, "%%%x", buff[i]);
+ }
+
+ if ((strlen (dest) + 4) > len)
+ {
+ expand_buffer =
+ (axis2_char_t *) AXIS2_MALLOC (env->allocator, len * 2);
+ memset (expand_buffer, 0, len * 2);
+ len *= 2;
+ dest = memmove (expand_buffer, dest, strlen (dest));
+ }
+ strcat (dest, string);
}
- return dest;
+ return dest;
}
static int
is_safe_or_unreserve (char c)
{
- char safe[] = { '$', '-', '_', '.', '+' };
- char reserve[] = { ';', '/', '?', ':', '@', '&', '=' };
+ char safe[] = { '$', '-', '_', '.', '+' };
+ char reserve[] = { ';', '/', '?', ':', '@', '&', '=' };
/* reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
safe = "$" | "-" | "_" | "." | "+" */
- int flag = 0;
- int i = 0;
+ int flag = 0;
+ int i = 0;
- int size = sizeof (safe) / sizeof (safe[0]);
[... 54 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org