libs/http: Added handling of "+" in luci.http.protocl.urldecode
[project/luci.git] / libs / http / luasrc / http / protocol.lua
index 205869a..a187bed 100644 (file)
@@ -15,8 +15,7 @@ $Id$
 
 module("luci.http.protocol", package.seeall)
 
-require("ltn12")
-require("luci.http.protocol.filter")
+local ltn12 = require("luci.ltn12")
 
 HTTP_MAX_CONTENT      = 1024*4         -- 4 kB maximum content size
 HTTP_URLENC_MAXKEYLEN = 1024           -- maximum allowd size of urlencoded parameter names
@@ -31,7 +30,8 @@ function urldecode( str )
        end
 
        if type(str) == "string" then
-               str = str:gsub( "+", " " ):gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec )
+               str = str:gsub( "+", " " )
+               str = str:gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec )
        end
 
        return str
@@ -84,7 +84,7 @@ function urlencode( str )
 
        if type(str) == "string" then
                str = str:gsub(
-                       "([^a-zA-Z0-9$_%-%.+!*'(),])",
+                       "([^a-zA-Z0-9$_%-%.%+!*'(),])",
                        __chrenc
                )
        end
@@ -160,7 +160,7 @@ process_states['magic'] = function( msg, chunk, err )
                        end
                end
        end
-       
+
        -- Can't handle it
        return nil, "Invalid HTTP message magic"
 end
@@ -533,10 +533,10 @@ function header_source( sock )
                local chunk, err, part = sock:receive("*l")
 
                -- Line too long
-               if chunk == nil then 
+               if chunk == nil then
                        if err ~= "timeout" then
                                return nil, part
-                                       and "Line exceeds maximum allowed length["..part.."]"
+                                       and "Line exceeds maximum allowed length"
                                        or  "Unexpected EOF"
                        else
                                return nil, err
@@ -779,11 +779,14 @@ end
 -- Status codes
 statusmsg = {
        [200] = "OK",
+       [301] = "Moved Permanently",
+       [304] = "Not Modified",
        [400] = "Bad Request",
        [403] = "Forbidden",
        [404] = "Not Found",
        [405] = "Method Not Allowed",
        [411] = "Length Required",
+       [412] = "Precondition Failed",
        [500] = "Internal Server Error",
        [503] = "Server Unavailable",
 }