You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2007/02/20 10:12:29 UTC
svn commit: r509476 - in
/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender:
Makefile.am http_sender.c libcurl/Makefile libcurl/axis2_libcurl.c
rest_sender.c sender_util.c
Author: dinesh
Date: Tue Feb 20 01:12:28 2007
New Revision: 509476
URL: http://svn.apache.org/viewvc?view=rev&rev=509476
Log:
axis2c-532:transport sender refactoring
Modified:
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/Makefile.am
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/http_sender.c
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/Makefile
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/rest_sender.c
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/sender_util.c
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/Makefile.am?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/Makefile.am (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/Makefile.am Tue Feb 20 01:12:28 2007
@@ -1,9 +1,7 @@
SUBDIRS=ssl libcurl
lib_LTLIBRARIES = libaxis2_http_sender.la
libaxis2_http_sender_la_SOURCES = http_transport_sender.c\
- soap_over_http_sender.c\
http_sender.c\
- rest_sender.c\
sender_util.c\
http_client.c
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/http_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/http_sender.c?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/http_sender.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/http_sender.c Tue Feb 20 01:12:28 2007
@@ -79,6 +79,22 @@
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
+axis2_char_t *AXIS2_CALL
+axis2_http_sender_get_param_string(
+ const axis2_env_t *env,
+ axis2_http_sender_t *sender,
+ axis2_msg_ctx_t *msg_ctx);
+
+static axis2_char_t *AXIS2_CALL
+axis2_url_encode (
+ const axis2_env_t *env,
+ axis2_char_t *dest,
+ axis2_char_t *src,
+ int strlen);
+
+static int AXIS2_CALL
+is_safe_or_unreserve (char c);
+
axis2_status_t AXIS2_CALL
axis2_http_sender_send(
axis2_http_sender_t *sender,
@@ -410,7 +426,7 @@
axis2_char_t *request_params = NULL;
axis2_char_t *path = NULL;
- request_params = axis2_rest_sender_get_param_string(sender, env, msg_ctx);
+ request_params = axis2_http_sender_get_param_string(env, sender, msg_ctx);
path = axis2_strcat(env, AXIS2_URL_GET_PATH(url, env), "?",
request_params, NULL);
request_line = axis2_http_request_line_create(env, "GET", path,
@@ -1078,3 +1094,147 @@
return axis2_libcurl_send (sender_impl->om_output, env, msg_ctx, out, str_url, soap_action);
}
#endif
+
+axis2_char_t *AXIS2_CALL
+axis2_http_sender_get_param_string(
+ const axis2_env_t *env,
+ axis2_http_sender_t *sender,
+ 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;
+ axis2_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 (NULL == 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 (NULL == data_node)
+ {
+ return NULL;
+ }
+ param_list = axis2_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);
+ 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);
+
+ encoded_value = (axis2_char_t *) AXIS2_MALLOC (env->allocator, strlen (value));
+ memset (encoded_value, 0, strlen (value));
+ encoded_value = axis2_url_encode (env, encoded_value, value, strlen (value));
+
+ AXIS2_ARRAY_LIST_ADD(param_list, env, axis2_strcat(env, name, "=",
+ encoded_value, NULL));
+ }
+ for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(param_list, env); i++)
+ {
+ axis2_char_t *tmp_string = NULL;
+ axis2_char_t *pair = NULL;
+
+ pair = AXIS2_ARRAY_LIST_GET(param_list, env, i);
+ if(i ==0)
+ tmp_string = AXIS2_STRACAT(param_string, pair, env);
+ else
+ tmp_string = axis2_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;
+ }
+ AXIS2_ARRAY_LIST_FREE(param_list, env);
+ return param_string;
+}
+
+static axis2_char_t *AXIS2_CALL
+axis2_url_encode (
+ const axis2_env_t *env,
+ 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, len);
+ }
+ strcat (dest, string);
+ }
+ return dest;
+}
+
+static int AXIS2_CALL
+is_safe_or_unreserve (
+ char c)
+{
+ char safe [] = {'$' , '-' , '_' , '.' , '+'};
+ char reserve [] = {';', '/', '?' ,':', '@', '&', '='};
+
+/* reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
+ safe = "$" | "-" | "_" | "." | "+" */
+
+ int flag = 0;
+ int i = 0;
+
+ int size = sizeof (safe)/sizeof (safe[0]);
+ for (i = 0; i < size; i++)
+ {
+ if (c == safe[i])
+ {
+ flag = 1;
+ return flag;
+ }
+ }
+
+ size = sizeof (reserve)/sizeof (reserve[0]);
+ for (i = 0; i < size; i++)
+ {
+ if (c == reserve[i])
+ {
+ flag = 0;
+ return flag;
+ }
+ }
+ return flag;
+}
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/Makefile
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/Makefile?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/Makefile (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/Makefile Tue Feb 20 01:12:28 2007
@@ -66,7 +66,7 @@
AXIS2_SSL_ENABLED_TRUE = #
CC = gcc
CCDEPMODE = depmode=gcc3
-CFLAGS = -g3 -O0 -D_LARGEFILE64_SOURCE -ansi -Wall -Wno-implicit-function-declaration -g -DAXIS2_SVR_MULTI_THREADED -DAXIS2_LIBCURL_ENABLED
+CFLAGS = -g3 -O0 -Werror -D_LARGEFILE64_SOURCE -ansi -Wall -Wno-implicit-function-declaration -g -DAXIS2_SVR_MULTI_THREADED -DAXIS2_LIBCURL_ENABLED
CPP = gcc -E
CPPFLAGS =
CXX = g++
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c Tue Feb 20 01:12:28 2007
@@ -14,27 +14,46 @@
#include <axis2_generic_obj.h>
#include <axis2_const.h>
#include <axis2_util.h>
+#include <stdlib.h>
+#include <axis2_http_transport.h>
-typedef struct axis2_libcurl_memory
+typedef struct axis2_libcurl
{
axis2_char_t *memory;
+ axis2_array_list_t *alist;
unsigned int size;
-}axis2_libcurl_memory_t;
+ const axis2_env_t *env;
+}axis2_libcurl_t;
-size_t
-axis2_libcurl_write_memory_callback(void *ptr, size_t size, size_t nmemb, void *data);
-void *myrealloc(void *ptr, size_t size)
-{
- /* There might be a realloc() out there that doesn't like
- * reallocing
- NULL pointers, so we take care of it here */
- if(ptr)
- return realloc(ptr, size);
- else
- return malloc(size);
-}
+size_t
+axis2_libcurl_write_memory_callback(
+ void *ptr,
+ size_t size,
+ size_t nmemb,
+ void *data);
+size_t
+axis2_libcurl_header_callback(
+ void *ptr,
+ size_t size,
+ size_t nmemb,
+ void *data);
+
+axis2_libcurl_t *
+axis2_libcurl_create (
+ const axis2_env_t *env);
+
+void
+axis2_libcurl_free (
+ const axis2_env_t *env,
+ axis2_libcurl_t *curl);
+
+int
+axis2_libcurl_process_headers (
+ const axis2_env_t *evn,
+ axis2_http_simple_response_t *response,
+ axis2_array_list_t *alist);
axis2_status_t AXIS2_CALL
axis2_libcurl_send (
@@ -62,7 +81,10 @@
axis2_char_t *content_type;
const axis2_char_t *char_set_enc = NULL;
axis2_char_t *content = "Content-Type:";
- axis2_libcurl_memory_t *data;
+ axis2_libcurl_t *data;
+ axis2_libcurl_t *header;
+ data = axis2_libcurl_create (env);
+ header = axis2_libcurl_create (env);
handler = curl_easy_init ();
if (AXIS2_TRUE == AXIS2_MSG_CTX_GET_DOING_REST(msg_ctx, env))
@@ -215,7 +237,9 @@
curl_easy_setopt (handler, CURLOPT_POSTFIELDS, buffer);
curl_easy_setopt (handler, CURLOPT_POSTFIELDSIZE, buffer_size);
curl_easy_setopt (handler, CURLOPT_WRITEFUNCTION, axis2_libcurl_write_memory_callback);
- curl_easy_setopt (handler, CURLOPT_WRITEDATA, (void *)data);
+ curl_easy_setopt (handler, CURLOPT_WRITEDATA, data);
+ curl_easy_setopt (handler, CURLOPT_HEADERFUNCTION, axis2_libcurl_header_callback);
+ curl_easy_setopt (handler, CURLOPT_WRITEHEADER, header);
curl_easy_perform (handler);
curl_slist_free_all (headers);
curl_easy_cleanup (handler);
@@ -226,13 +250,54 @@
axis2_libcurl_write_memory_callback(void *ptr, size_t size, size_t nmemb, void *data)
{
size_t realsize = size * nmemb;
- axis2_libcurl_memory_t *mem = (axis2_libcurl_memory_t *)data;
+ axis2_libcurl_t *mem = (axis2_libcurl_t *)data;
+ mem->memory = (axis2_char_t *) malloc (realsize + 1);
+ if (mem->memory)
+ {
+ memcpy(&(mem->memory[mem->size]), ptr, realsize);
+ mem->size += realsize;
+ mem->memory[mem->size] = 0;
+ }
+ return realsize;
+}
- mem->memory = (axis2_char_t *)myrealloc (mem->memory, mem->size + realsize + 1);
- if (mem->memory) {
+size_t
+axis2_libcurl_header_callback(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ size_t realsize = size * nmemb;
+ axis2_libcurl_t *mem = (axis2_libcurl_t *)data;
+ mem->memory = AXIS2_MALLOC (mem->env->allocator, realsize + 1);
+ mem->size = 0;
+ if (mem->memory)
+ {
memcpy(&(mem->memory[mem->size]), ptr, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
+ axis2_array_list_add (mem->alist, mem->env, AXIS2_STRDUP (mem->memory, mem->env));
}
return realsize;
+}
+
+axis2_libcurl_t *
+axis2_libcurl_create (const axis2_env_t *env)
+{
+ axis2_libcurl_t *curl = NULL;
+ curl = (axis2_libcurl_t *) AXIS2_MALLOC (env->allocator, sizeof (axis2_libcurl_t));
+ curl->size = 0;
+ curl->alist = axis2_array_list_create (env, 7);
+ curl->env = env;
+ return curl;
+}
+
+void
+axis2_libcurl_free (const axis2_env_t *env, axis2_libcurl_t *curl)
+{
+ AXIS2_FREE (env->allocator, curl);
+}
+
+int
+axis2_libcurl_process_headers (const axis2_env_t *env, axis2_http_simple_response_t *response, axis2_array_list_t *alist)
+{
+ int status_code = 0;
+ return status_code;
}
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/rest_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/rest_sender.c?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/rest_sender.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/rest_sender.c Tue Feb 20 01:12:28 2007
@@ -116,12 +116,6 @@
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
-static axis2_char_t *AXIS2_CALL
-axis2_url_encode (
- const axis2_env_t *env,
- axis2_char_t *dest,
- axis2_char_t *src,
- int strlen);
axis2_status_t AXIS2_CALL
axis2_rest_sender_configure_server_cert(
@@ -129,8 +123,6 @@
const axis2_env_t *env,
axis2_msg_ctx_t *msg_ctx);
-static int AXIS2_CALL
-is_safe_or_unreserve (char c);
/***************************** End of function headers ************************/
@@ -675,149 +667,6 @@
return AXIS2_SUCCESS;
}
-axis2_char_t *AXIS2_CALL
-axis2_rest_sender_get_param_string(
- axis2_rest_sender_t *sender,
- const axis2_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;
- axis2_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 (NULL == 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 (NULL == data_node)
- {
- return NULL;
- }
- param_list = axis2_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);
- 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);
-
- encoded_value = (axis2_char_t *) AXIS2_MALLOC (env->allocator, strlen (value));
- memset (encoded_value, 0, strlen (value));
- encoded_value = axis2_url_encode (env, encoded_value, value, strlen (value));
-
- AXIS2_ARRAY_LIST_ADD(param_list, env, axis2_strcat(env, name, "=",
- encoded_value, NULL));
- }
- for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(param_list, env); i++)
- {
- axis2_char_t *tmp_string = NULL;
- axis2_char_t *pair = NULL;
-
- pair = AXIS2_ARRAY_LIST_GET(param_list, env, i);
- if(i ==0)
- tmp_string = AXIS2_STRACAT(param_string, pair, env);
- else
- tmp_string = axis2_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;
- }
- AXIS2_ARRAY_LIST_FREE(param_list, env);
- return param_string;
-}
-
-static axis2_char_t *AXIS2_CALL
-axis2_url_encode (
- const axis2_env_t *env,
- 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, len);
- }
- strcat (dest, string);
- }
- return dest;
-}
-
-static int AXIS2_CALL
-is_safe_or_unreserve (
- char c)
-{
- char safe [] = {'$' , '-' , '_' , '.' , '+'};
- char reserve [] = {';', '/', '?' ,':', '@', '&', '='};
-
-/* reserved = ";" | "/" | "?" | ":" | "@" | "&" | "="
- safe = "$" | "-" | "_" | "." | "+" */
-
- int flag = 0;
- int i = 0;
-
- int size = sizeof (safe)/sizeof (safe[0]);
- for (i = 0; i < size; i++)
- {
- if (c == safe[i])
- {
- flag = 1;
- return flag;
- }
- }
-
- size = sizeof (reserve)/sizeof (reserve[0]);
- for (i = 0; i < size; i++)
- {
- if (c == reserve[i])
- {
- flag = 0;
- return flag;
- }
- }
- return flag;
-}
axis2_status_t AXIS2_CALL
axis2_rest_sender_configure_server_cert(
Modified: webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/sender_util.c
URL: http://svn.apache.org/viewvc/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/sender_util.c?view=diff&rev=509476&r1=509475&r2=509476
==============================================================================
--- webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/sender_util.c (original)
+++ webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/sender_util.c Tue Feb 20 01:12:28 2007
@@ -21,6 +21,7 @@
axis2_char_t *header_value);
+
void
axis2_http_sender_util_add_header (const axis2_env_t *env,
axis2_http_simple_request_t *request,
@@ -31,3 +32,4 @@
http_header = axis2_http_header_create(env, header_name, header_value);
AXIS2_HTTP_SIMPLE_REQUEST_ADD_HEADER(request, env, http_header);
}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org