summaryrefslogtreecommitdiffhomepage
path: root/libs/http/luasrc
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2008-06-23 18:17:02 +0000
committerSteven Barth <steven@midlink.org>2008-06-23 18:17:02 +0000
commit4f630d647c7191ac9d8fd2dfcc8e93746faf391a (patch)
tree76bb12773e833e38c69ee43f006b78f0e84ab748 /libs/http/luasrc
parenta038da390d7fd3a75b5a1045afbb4d9782556c57 (diff)
* Introducing LuCI HTTPD as testing environment
* Several coroutine-safety fixes
Diffstat (limited to 'libs/http/luasrc')
-rw-r--r--libs/http/luasrc/http/protocol.lua37
1 files changed, 34 insertions, 3 deletions
diff --git a/libs/http/luasrc/http/protocol.lua b/libs/http/luasrc/http/protocol.lua
index 08e8ba256..94a7a8212 100644
--- a/libs/http/luasrc/http/protocol.lua
+++ b/libs/http/luasrc/http/protocol.lua
@@ -16,7 +16,6 @@ $Id$
module("luci.http.protocol", package.seeall)
require("ltn12")
-require("luci.util")
require("luci.http.protocol.filter")
HTTP_MAX_CONTENT = 1024*4 -- 4 kB maximum content size
@@ -49,7 +48,7 @@ function urldecode_params( url, tbl )
url = url:gsub( "^.+%?([^?]+)", "%1" )
end
- for i, pair in ipairs(luci.util.split( url, "[&;]+", nil, true )) do
+ for pair in url:gmatch( "[^&;]+" ) do
-- find key and value
local key = urldecode( pair:match("^([^=]+)") )
@@ -501,7 +500,8 @@ process_states['urldecode-value'] = function( msg, chunk, filecb )
-- We're somewhere within a data section and our buffer is full
if #buffer > #chunk then
-- Flush buffered data
- msg._urldeccallback( buffer:sub( 1, #buffer - #chunk ), false )
+ -- Send EOF if chunk is empty
+ msg._urldeccallback( buffer:sub( 1, #buffer - #chunk ), ( #chunk == 0 ) )
-- Store new data
msg._urldeclength = msg._urldeclength + #buffer - #chunk
@@ -769,3 +769,34 @@ function parse_message_body( source, msg, filecb )
end
end
end
+
+
+-- Push a response to a socket
+function push_response(request, response, sourceout, sinkout, sinkerr)
+ local code = response.status
+ sinkout(request.env.SERVER_PROTOCOL .. " " .. code .. " " .. statusmsg[code] .. "\r\n")
+
+ -- FIXME: Add support for keep-alive
+ response.headers["Connection"] = "close"
+
+ for k,v in pairs(response.headers) do
+ sinkout(k .. ": " .. v .. "\r\n")
+ end
+
+ sinkout("\r\n")
+
+ if sourceout then
+ ltn12.pump.all(sourceout, sinkout)
+ end
+end
+
+
+-- Status codes
+statusmsg = {
+ [200] = "OK",
+ [400] = "Bad Request",
+ [403] = "Forbidden",
+ [404] = "Not Found",
+ [500] = "Internal Server Error",
+ [503] = "Server Unavailable",
+} \ No newline at end of file