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