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 se...@apache.org on 2008/03/17 19:03:27 UTC
svn commit: r637997 - in /webservices/axis2/trunk/c: include/axis2_msg_ctx.h
src/core/context/msg_ctx.c src/core/transport/http/common/http_worker.c
src/core/transport/http/server/apache2/apache2_worker.c
src/core/util/core_utils.c
Author: senaka
Date: Mon Mar 17 11:03:12 2008
New Revision: 637997
URL: http://svn.apache.org/viewvc?rev=637997&view=rev
Log:
Adding ability to pass Accept and Accept-Charset Header values to service through msg_ctx
Modified:
webservices/axis2/trunk/c/include/axis2_msg_ctx.h
webservices/axis2/trunk/c/src/core/context/msg_ctx.c
webservices/axis2/trunk/c/src/core/transport/http/common/http_worker.c
webservices/axis2/trunk/c/src/core/transport/http/server/apache2/apache2_worker.c
webservices/axis2/trunk/c/src/core/util/core_utils.c
Modified: webservices/axis2/trunk/c/include/axis2_msg_ctx.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/include/axis2_msg_ctx.h?rev=637997&r1=637996&r2=637997&view=diff
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_msg_ctx.h (original)
+++ webservices/axis2/trunk/c/include/axis2_msg_ctx.h Mon Mar 17 11:03:12 2008
@@ -1735,6 +1735,80 @@
axutil_hash_t * transport_headers);
/**
+ * Retrieves HTTP Accept-Charset records.
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @return HTTP Accept-Charset records associated.
+ */
+ AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+ axis2_msg_ctx_get_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env);
+
+ /**
+ * Retrieves HTTP Accept-Charset records, and removes them
+ * from the message context
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @return HTTP Accept-Charset records associated.
+ */
+ AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+ axis2_msg_ctx_extract_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env);
+
+ /**
+ * Sets the HTTP Accept-Charset records
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @param accept_charset_record_list an Array List containing the
+ * HTTP Accept-Charset records
+ * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+ */
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axis2_msg_ctx_set_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env,
+ axutil_array_list_t * accept_charset_record_list);
+
+ /**
+ * Retrieves HTTP Accept records.
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @return HTTP Accept records associated.
+ */
+ AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+ axis2_msg_ctx_get_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env);
+
+ /**
+ * Retrieves HTTP Accept records, and removes them
+ * from the message context
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @return HTTP Accept records associated.
+ */
+ AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+ axis2_msg_ctx_extract_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env);
+
+ /**
+ * Sets the HTTP Accept records
+ * @param msg_ctx message context
+ * @param env pointer to environment struct
+ * @param accept_record_list an Array List containing the
+ * HTTP Accept records
+ * @return AXIS2_SUCCESS on success, else AXIS2_FAILURE
+ */
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ axis2_msg_ctx_set_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env,
+ axutil_array_list_t * accept_record_list);
+
+ /**
* Gets the transfer encoding used
* @param msg_ctx message context
* @param env pointer to environment struct
Modified: webservices/axis2/trunk/c/src/core/context/msg_ctx.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/context/msg_ctx.c?rev=637997&r1=637996&r2=637997&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/context/msg_ctx.c (original)
+++ webservices/axis2/trunk/c/src/core/context/msg_ctx.c Mon Mar 17 11:03:12 2008
@@ -25,6 +25,7 @@
#include <axis2_transport_in_desc.h>
#include <axis2_transport_out_desc.h>
#include <axis2_http_out_transport_info.h>
+#include <axis2_http_accept_record.h>
#include <axiom_soap_envelope.h>
#include <axiom_soap_const.h>
#include <axis2_options.h>
@@ -200,6 +201,8 @@
axutil_stream_t *transport_out_stream;
axis2_http_out_transport_info_t *http_out_transport_info;
axutil_hash_t *transport_headers;
+ axutil_array_list_t *accept_record_list;
+ axutil_array_list_t *accept_charset_record_list;
axis2_char_t *transfer_encoding;
axis2_char_t *transport_url;
axis2_bool_t is_auth_failure;
@@ -274,6 +277,8 @@
msg_ctx->transport_out_stream = NULL;
msg_ctx->http_out_transport_info = NULL;
msg_ctx->transport_headers = NULL;
+ msg_ctx->accept_record_list = NULL;
+ msg_ctx->accept_charset_record_list = NULL;
msg_ctx->transfer_encoding = NULL;
msg_ctx->transport_url = NULL;
msg_ctx->response_soap_envelope = NULL;
@@ -421,6 +426,36 @@
axutil_hash_free(msg_ctx->transport_headers, env);
}
+ if (msg_ctx->accept_charset_record_list)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ while (axutil_array_list_size(msg_ctx->accept_charset_record_list, env))
+ {
+ rec = (axis2_http_accept_record_t *)
+ axutil_array_list_remove(msg_ctx->accept_charset_record_list, env, 0);
+ if (rec)
+ {
+ axis2_http_accept_record_free(rec, env);
+ }
+ }
+ axutil_array_list_free(msg_ctx->accept_charset_record_list, env);
+ }
+
+ if (msg_ctx->accept_record_list)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ while (axutil_array_list_size(msg_ctx->accept_record_list, env))
+ {
+ rec = (axis2_http_accept_record_t *)
+ axutil_array_list_remove(msg_ctx->accept_record_list, env, 0);
+ if (rec)
+ {
+ axis2_http_accept_record_free(rec, env);
+ }
+ }
+ axutil_array_list_free(msg_ctx->accept_record_list, env);
+ }
+
if (msg_ctx->transfer_encoding)
{
AXIS2_FREE(env->allocator, msg_ctx->transfer_encoding);
@@ -2180,6 +2215,138 @@
}
msg_ctx->transport_headers = transport_headers;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_msg_ctx_get_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env)
+{
+ if (msg_ctx)
+ {
+ return msg_ctx->accept_record_list;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_msg_ctx_extract_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env)
+{
+ axutil_array_list_t *temp = NULL;
+ if (msg_ctx)
+ {
+ temp = msg_ctx->accept_record_list;
+ msg_ctx->accept_record_list = NULL;
+ return temp;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_msg_ctx_set_http_accept_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env,
+ axutil_array_list_t * accept_record_list)
+{
+ if (msg_ctx)
+ {
+ if (msg_ctx->accept_record_list &&
+ msg_ctx->accept_record_list != accept_record_list)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ while (axutil_array_list_size(msg_ctx->accept_record_list, env))
+ {
+ rec = (axis2_http_accept_record_t *)
+ axutil_array_list_remove(msg_ctx->accept_record_list, env, 0);
+ if (rec)
+ {
+ axis2_http_accept_record_free(rec, env);
+ }
+ }
+ axutil_array_list_free(msg_ctx->accept_record_list, env);
+ }
+ msg_ctx->accept_record_list = accept_record_list;
+ }
+ else
+ {
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_msg_ctx_get_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env)
+{
+ if (msg_ctx)
+ {
+ return msg_ctx->accept_charset_record_list;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+AXIS2_EXTERN axutil_array_list_t *AXIS2_CALL
+axis2_msg_ctx_extract_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env)
+{
+ axutil_array_list_t *temp = NULL;
+ if (msg_ctx)
+ {
+ temp = msg_ctx->accept_charset_record_list;
+ msg_ctx->accept_charset_record_list = NULL;
+ return temp;
+ }
+ else
+ {
+ return NULL;
+ }
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axis2_msg_ctx_set_http_accept_charset_record_list(
+ axis2_msg_ctx_t * msg_ctx,
+ const axutil_env_t * env,
+ axutil_array_list_t * accept_charset_record_list)
+{
+ if (msg_ctx)
+ {
+ if (msg_ctx->accept_charset_record_list &&
+ msg_ctx->accept_charset_record_list != accept_charset_record_list)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ while (axutil_array_list_size(msg_ctx->accept_charset_record_list, env))
+ {
+ rec = (axis2_http_accept_record_t *)
+ axutil_array_list_remove(msg_ctx->accept_charset_record_list, env, 0);
+ if (rec)
+ {
+ axis2_http_accept_record_free(rec, env);
+ }
+ }
+ axutil_array_list_free(msg_ctx->accept_charset_record_list, env);
+ }
+ msg_ctx->accept_charset_record_list = accept_charset_record_list;
}
else
{
Modified: webservices/axis2/trunk/c/src/core/transport/http/common/http_worker.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/http/common/http_worker.c?rev=637997&r1=637996&r2=637997&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/http/common/http_worker.c (original)
+++ webservices/axis2/trunk/c/src/core/transport/http/common/http_worker.c Mon Mar 17 11:03:12 2008
@@ -25,6 +25,7 @@
#include <axis2_http_request_line.h>
#include <axis2_http_out_transport_info.h>
#include <axis2_http_transport_utils.h>
+#include <axis2_http_accept_record.h>
#include <axis2_op_ctx.h>
#include <axis2_engine.h>
#include <axutil_uuid_gen.h>
@@ -32,6 +33,7 @@
#include <axutil_property.h>
#include <axiom_soap.h>
#include <string.h>
+#include <axutil_string_util.h>
struct axis2_http_worker
{
@@ -263,6 +265,42 @@
accept_header_value = axis2_http_header_get_value(accept_header,
env);
}
+ if (accept_header_value)
+ {
+ axutil_array_list_t *accept_header_field_list = NULL;
+ axutil_array_list_t *accept_record_list = NULL;
+ accept_header_field_list = axutil_tokenize(env, accept_header_value, ',');
+ if (accept_header_field_list &&
+ axutil_array_list_size(accept_header_field_list, env) > 0)
+ {
+ axis2_char_t *token = NULL;
+ accept_record_list =
+ axutil_array_list_create(env,
+ axutil_array_list_size(accept_header_field_list, env));
+ do
+ {
+ if (token)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ rec = axis2_http_accept_record_create(env, token);
+ if (rec)
+ {
+ axutil_array_list_add(accept_record_list, env, rec);
+ }
+ AXIS2_FREE(env->allocator, token);
+ }
+ token = (axis2_char_t *)
+ axutil_array_list_remove(accept_header_field_list, env, 0);
+ }
+ while(token);
+ }
+ if (accept_record_list &&
+ axutil_array_list_size(accept_record_list, env) > 0)
+ {
+ axis2_msg_ctx_set_http_accept_record_list(msg_ctx, env,
+ accept_record_list);
+ }
+ }
accept_charset_header = axis2_http_simple_request_get_first_header(
simple_request,
@@ -272,6 +310,43 @@
{
accept_charset_header_value = axis2_http_header_get_value(accept_charset_header,
env);
+ }
+ if (accept_charset_header_value)
+ {
+ axutil_array_list_t *accept_charset_header_field_list = NULL;
+ axutil_array_list_t *accept_charset_record_list = NULL;
+ accept_charset_header_field_list =
+ axutil_tokenize(env, accept_charset_header_value, ',');
+ if (accept_charset_header_field_list &&
+ axutil_array_list_size(accept_charset_header_field_list, env) > 0)
+ {
+ axis2_char_t *token = NULL;
+ accept_charset_record_list =
+ axutil_array_list_create(env,
+ axutil_array_list_size(accept_charset_header_field_list, env));
+ do
+ {
+ if (token)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ rec = axis2_http_accept_record_create(env, token);
+ if (rec)
+ {
+ axutil_array_list_add(accept_charset_record_list, env, rec);
+ }
+ AXIS2_FREE(env->allocator, token);
+ }
+ token = (axis2_char_t *)
+ axutil_array_list_remove(accept_charset_header_field_list, env, 0);
+ }
+ while(token);
+ }
+ if (accept_charset_record_list &&
+ axutil_array_list_size(accept_charset_record_list, env) > 0)
+ {
+ axis2_msg_ctx_set_http_accept_charset_record_list(msg_ctx, env,
+ accept_charset_record_list);
+ }
}
axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream);
Modified: webservices/axis2/trunk/c/src/core/transport/http/server/apache2/apache2_worker.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/transport/http/server/apache2/apache2_worker.c?rev=637997&r1=637996&r2=637997&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/transport/http/server/apache2/apache2_worker.c (original)
+++ webservices/axis2/trunk/c/src/core/transport/http/server/apache2/apache2_worker.c Mon Mar 17 11:03:12 2008
@@ -22,6 +22,7 @@
#include <axis2_msg_ctx.h>
#include <axis2_http_out_transport_info.h>
#include <axis2_http_transport_utils.h>
+#include <axis2_http_accept_record.h>
#include <axis2_op_ctx.h>
#include <axis2_engine.h>
#include <axutil_uuid_gen.h>
@@ -32,6 +33,7 @@
#include <http_protocol.h>
#include <axiom_soap.h>
#include <axutil_class_loader.h>
+#include <axutil_string_util.h>
#define READ_SIZE 2048
@@ -167,6 +169,8 @@
axis2_char_t *peer_ip = NULL;
axutil_property_t *peer_property = NULL;
axutil_url_t *request_url = NULL;
+ axis2_char_t *accept_header_value = NULL;
+ axis2_char_t *accept_charset_header_value = NULL;
AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
AXIS2_PARAM_CHECK(env->error, request, AXIS2_CRITICAL_FAILURE);
@@ -263,6 +267,85 @@
axis2_msg_ctx_set_http_out_transport_info(msg_ctx, env,
apache2_out_transport_info);
+ accept_header_value = (axis2_char_t *)
+ apr_table_get(request->headers_in, AXIS2_HTTP_HEADER_ACCEPT);
+ if (accept_header_value)
+ {
+ axutil_array_list_t *accept_header_field_list = NULL;
+ axutil_array_list_t *accept_record_list = NULL;
+ accept_header_field_list = axutil_tokenize(env, accept_header_value, ',');
+ if (accept_header_field_list &&
+ axutil_array_list_size(accept_header_field_list, env) > 0)
+ {
+ axis2_char_t *token = NULL;
+ accept_record_list =
+ axutil_array_list_create(env,
+ axutil_array_list_size(accept_header_field_list, env));
+ do
+ {
+ if (token)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ rec = axis2_http_accept_record_create(env, token);
+ if (rec)
+ {
+ axutil_array_list_add(accept_record_list, env, rec);
+ }
+ AXIS2_FREE(env->allocator, token);
+ }
+ token = (axis2_char_t *)
+ axutil_array_list_remove(accept_header_field_list, env, 0);
+ }
+ while(token);
+ }
+ if (accept_record_list &&
+ axutil_array_list_size(accept_record_list, env) > 0)
+ {
+ axis2_msg_ctx_set_http_accept_record_list(msg_ctx, env,
+ accept_record_list);
+ }
+ }
+
+ accept_charset_header_value = (axis2_char_t *)
+ apr_table_get(request->headers_in, AXIS2_HTTP_HEADER_ACCEPT_CHARSET);
+ if (accept_charset_header_value)
+ {
+ axutil_array_list_t *accept_charset_header_field_list = NULL;
+ axutil_array_list_t *accept_charset_record_list = NULL;
+ accept_charset_header_field_list =
+ axutil_tokenize(env, accept_charset_header_value, ',');
+ if (accept_charset_header_field_list &&
+ axutil_array_list_size(accept_charset_header_field_list, env) > 0)
+ {
+ axis2_char_t *token = NULL;
+ accept_charset_record_list =
+ axutil_array_list_create(env,
+ axutil_array_list_size(accept_charset_header_field_list, env));
+ do
+ {
+ if (token)
+ {
+ axis2_http_accept_record_t *rec = NULL;
+ rec = axis2_http_accept_record_create(env, token);
+ if (rec)
+ {
+ axutil_array_list_add(accept_charset_record_list, env, rec);
+ }
+ AXIS2_FREE(env->allocator, token);
+ }
+ token = (axis2_char_t *)
+ axutil_array_list_remove(accept_charset_header_field_list, env, 0);
+ }
+ while(token);
+ }
+ if (accept_charset_record_list &&
+ axutil_array_list_size(accept_charset_record_list, env) > 0)
+ {
+ axis2_msg_ctx_set_http_accept_charset_record_list(msg_ctx, env,
+ accept_charset_record_list);
+ }
+ }
+
soap_action = axutil_string_create(env,
(axis2_char_t *) apr_table_get(request->
headers_in,
@@ -590,17 +673,11 @@
if (send_status == DECLINED)
{
axis2_bool_t do_rest = AXIS2_FALSE;
- axis2_char_t *accept_header_value = NULL;
- axis2_char_t *accept_charset_header_value = NULL;
if (M_POST != request->method_number ||
axis2_msg_ctx_get_doing_rest(msg_ctx, env))
{
do_rest = AXIS2_TRUE;
}
- accept_header_value = (axis2_char_t *)
- apr_table_get(request->headers_in, AXIS2_HTTP_HEADER_ACCEPT);
- accept_charset_header_value = (axis2_char_t *)
- apr_table_get(request->headers_in, AXIS2_HTTP_HEADER_ACCEPT_CHARSET);
if ((accept_header_value || accept_charset_header_value) && do_rest)
{
axis2_char_t *content_type_header_value = NULL;
Modified: webservices/axis2/trunk/c/src/core/util/core_utils.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/src/core/util/core_utils.c?rev=637997&r1=637996&r2=637997&view=diff
==============================================================================
--- webservices/axis2/trunk/c/src/core/util/core_utils.c (original)
+++ webservices/axis2/trunk/c/src/core/util/core_utils.c Mon Mar 17 11:03:12 2008
@@ -89,6 +89,11 @@
axis2_msg_ctx_set_transport_headers(new_msg_ctx, env,
axis2_msg_ctx_extract_transport_headers(in_msg_ctx, env));
}
+ axis2_msg_ctx_set_http_accept_record_list(new_msg_ctx, env,
+ axis2_msg_ctx_extract_http_accept_record_list(in_msg_ctx, env));
+ axis2_msg_ctx_set_http_accept_charset_record_list(new_msg_ctx, env,
+ axis2_msg_ctx_extract_http_accept_charset_record_list(in_msg_ctx, env));
+
old_msg_info_headers = axis2_msg_ctx_get_msg_info_headers(in_msg_ctx, env);
if (!old_msg_info_headers)
{
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org