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 2006/12/14 07:48:47 UTC
svn commit: r487010 -
/webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c
Author: dinesh
Date: Wed Dec 13 22:48:46 2006
New Revision: 487010
URL: http://svn.apache.org/viewvc?view=rev&rev=487010
Log:
fixed:382 get request , url encoding method implemented
Modified:
webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c
Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c?view=diff&rev=487010&r1=487009&r2=487010
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/rest_sender.c Wed Dec 13 22:48:46 2006
@@ -116,6 +116,16 @@
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);
+
+static int AXIS2_CALL
+is_safe_or_unreserve (char c);
+
/***************************** End of function headers ************************/
AXIS2_EXTERN axis2_rest_sender_t *AXIS2_CALL
@@ -697,13 +707,19 @@
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, "=",
- value, NULL));
+ encoded_value, NULL));
}
for (i = 0; i < AXIS2_ARRAY_LIST_SIZE(param_list, env); i++)
{
@@ -726,4 +742,72 @@
}
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;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org