introduce uri_decode() so that '+' are translated into ' '
authorLuigi Rizzo <rizzo@icir.org>
Wed, 18 Oct 2006 05:27:22 +0000 (05:27 +0000)
committerLuigi Rizzo <rizzo@icir.org>
Wed, 18 Oct 2006 05:27:22 +0000 (05:27 +0000)
(e.g. browsers do this when they encode input strings from a form).

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@45474 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/http.c

index d5d33f8..5da224e 100644 (file)
@@ -99,6 +99,17 @@ static char *ftype2mtype(const char *ftype, char *wkspace, int wkspacelen)
        return wkspace;
 }
 
        return wkspace;
 }
 
+/* like ast_uri_decode, but replace '+' with ' ' */
+static char *uri_decode(char *buf)
+{
+       char *c;
+       ast_uri_decode(buf);
+       for (c = buf; *c; c++) {
+               if (*c == '+')
+                       *c = ' ';
+       }
+       return buf;
+}
 static char *static_callback(struct sockaddr_in *req, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength)
 {
        char result[4096];
 static char *static_callback(struct sockaddr_in *req, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength)
 {
        char result[4096];
@@ -298,7 +309,7 @@ static char *handle_uri(struct sockaddr_in *sin, char *uri, int *status, char **
                while ((val = strsep(&params, "&"))) {
                        var = strsep(&val, "=");
                        if (val)
                while ((val = strsep(&params, "&"))) {
                        var = strsep(&val, "=");
                        if (val)
-                               ast_uri_decode(val);
+                               uri_decode(val);
                        else 
                                val = "";
                        ast_uri_decode(var);
                        else 
                                val = "";
                        ast_uri_decode(var);