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/02/26 11:38:50 UTC
svn commit: r511774 -
/webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c
Author: dinesh
Date: Mon Feb 26 02:38:50 2007
New Revision: 511774
URL: http://svn.apache.org/viewvc?view=rev&rev=511774
Log:
implement get method using libcurl
Modified:
webservices/axis2/scratch/c/dinesh/532/c/modules/core/transport/http/sender/libcurl/axis2_libcurl.c
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=511774&r1=511773&r2=511774
==============================================================================
--- 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 Mon Feb 26 02:38:50 2007
@@ -49,6 +49,13 @@
const axis2_env_t *env,
axis2_libcurl_t *curl);
+axis2_status_t AXIS2_CALL
+axis2_libcurl_get_param_string(
+ const axis2_env_t *env,
+ axis2_msg_ctx_t *msg_ctx,
+ CURL *handle);
+
+
axis2_status_t AXIS2_CALL
axis2_libcurl_send (
@@ -256,25 +263,36 @@
}
else
buffer_size = output_stream_size;
- }
- char tmp_buf[10];
- sprintf (tmp_buf, "%d", buffer_size);
- headers = curl_slist_append (headers, AXIS2_STRACAT (content_len, tmp_buf, env));
- headers = curl_slist_append (headers, AXIS2_STRACAT (content,content_type, env));
- curl_easy_setopt (handler, CURLOPT_URL, str_url);
- curl_easy_setopt (handler, CURLOPT_HTTPHEADER, headers);
-
- if (!doing_mtom)
- {
- curl_easy_setopt (handler, CURLOPT_POSTFIELDSIZE, buffer_size);
- curl_easy_setopt (handler, CURLOPT_POSTFIELDS, buffer);
+ char tmp_buf[10];
+ sprintf (tmp_buf, "%d", buffer_size);
+ headers = curl_slist_append (headers, AXIS2_STRACAT (content_len, tmp_buf, env));
+ headers = curl_slist_append (headers, AXIS2_STRACAT (content,content_type, env));
+ if (!doing_mtom)
+ {
+ curl_easy_setopt (handler, CURLOPT_POSTFIELDSIZE, buffer_size);
+ curl_easy_setopt (handler, CURLOPT_POSTFIELDS, buffer);
+ }
+ else
+ {
+ curl_easy_setopt (handler, CURLOPT_POSTFIELDSIZE, output_stream_size);
+ curl_easy_setopt (handler, CURLOPT_POSTFIELDS, output_stream);
+ }
+ curl_easy_setopt (handler, CURLOPT_URL, str_url);
}
- else
+ else
{
- curl_easy_setopt (handler, CURLOPT_POSTFIELDSIZE, output_stream_size);
- curl_easy_setopt (handler, CURLOPT_POSTFIELDS, output_stream);
+ axis2_char_t *request_param;
+ axis2_char_t *url_encode;
+ request_param = (axis2_char_t *) axis2_http_sender_get_param_string(env, NULL, msg_ctx);
+ url_encode = axis2_strcat(env, str_url, "?",
+ request_param, NULL);
+ curl_easy_setopt (handler, CURLOPT_HTTPGET, 1);
+ curl_easy_setopt (handler, CURLOPT_URL, url_encode);
}
+
+ curl_easy_setopt (handler, CURLOPT_VERBOSE, 1);
+ curl_easy_setopt (handler, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt (handler, CURLOPT_WRITEFUNCTION, axis2_libcurl_write_memory_callback);
curl_easy_setopt (handler, CURLOPT_WRITEDATA, data);
curl_easy_setopt (handler, CURLOPT_HEADERFUNCTION, axis2_libcurl_header_callback);
@@ -284,7 +302,6 @@
curl_easy_cleanup (handler);
in_stream = axis2_stream_create_libcurl (env, data->memory, data->size);
-
trans_in_property = axis2_property_create(env);
AXIS2_PROPERTY_SET_SCOPE(trans_in_property, env, AXIS2_SCOPE_REQUEST);
AXIS2_PROPERTY_SET_FREE_FUNC(trans_in_property, env, axis2_stream_free_void_arg);
@@ -345,4 +362,53 @@
axis2_libcurl_free (const axis2_env_t *env, axis2_libcurl_t *curl)
{
AXIS2_FREE (env->allocator, curl);
+}
+
+axis2_status_t AXIS2_CALL
+axis2_libcurl_get_param_string(
+ const axis2_env_t *env,
+ axis2_msg_ctx_t *msg_ctx,
+ CURL *handle)
+{
+ 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;
+ struct curl_httppost *post=NULL;
+ struct curl_httppost *last=NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ soap_env = AXIS2_MSG_CTX_GET_SOAP_ENVELOPE(msg_ctx, env);
+ if (NULL == soap_env)
+ {
+ return AXIS2_FAILURE;
+ }
+ 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 AXIS2_FAILURE;
+ }
+ 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;
+ 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);
+ curl_formadd(&post, &last, CURLFORM_PTRNAME, name,
+ CURLFORM_PTRCONTENTS, value, CURLFORM_END);
+ }
+/* curl_easy_setopt(handle, CURLOPT_HTTPPOST, post); */
+ return AXIS2_SUCCESS;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org