require("luci.util")
READ_BUFSIZE = 1024
+VERSION = 0.2
VHost = luci.util.class()
end
-function Server.process( self, thread )
+function Server.process( self, client )
-- Setup sockets and sources
- local client = thread.socket
+ local thread = {
+ receive = function(self, ...) return luci.httpd.corecv(client, ...) end,
+ send = function(self, ...) return luci.httpd.cosend(client, ...) end,
+ close = function(self, ...) return client:close(...) end,
+ getfd = function(self, ...) return client:getfd(...) end,
+ dirty = function(self, ...) return client:dirty(...) end
+ }
client:settimeout( 0 )
message, err = luci.http.protocol.parse_message_header( sourcehdr )
if not message then
- self:error( client, 400, err )
+ self:error( thread, 400, err )
break
end
if message.http_version == 1.1 and message.headers['Expect'] and
message.headers['Expect'] == '100-continue'
then
- client:send("HTTP/1.1 100 Continue\r\n\r\n")
+ thread:send("HTTP/1.1 100 Continue\r\n\r\n")
end
if message.headers['Transfer-Encoding'] and
sourcein = socket.source("by-length", thread,
tonumber(message.env.CONTENT_LENGTH))
else
- self:error( client, 411, luci.http.protocol.statusmsg[411] )
+ self:error( thread, 411, luci.http.protocol.statusmsg[411] )
break;
end
else
- self:error( client, 405, luci.http.protocol.statusmsg[405] )
+ self:error( thread, 405, luci.http.protocol.statusmsg[405] )
break;
end
local host = self.vhosts[message.env.HTTP_HOST] or self.host
if not host then
- self:error( client, 500, "Unable to find matching host" )
+ self:error( thread, 500, "Unable to find matching host" )
break;
end
client, io.stderr
)
if not response then
- self:error( client, 500, "Error processing handler" )
+ self:error( thread, 500, "Error processing handler" )
end
-- Post process response
end
- local sinkout = socket.sink(sinkmode, client)
+ local sinkout = socket.sink(sinkmode, thread)
local header =
message.env.SERVER_PROTOCOL .. " " ..
tostring(response.status) .. " " ..
luci.http.protocol.statusmsg[response.status] .. "\r\n"
+ header = header .. "Server: LuCI HTTPd/" .. tostring(VERSION) .. "\r\n"
+
for k,v in pairs(response.headers) do
header = header .. k .. ": " .. v .. "\r\n"
end
- client:send(header .. "\r\n")
-
+ thread:send(header .. "\r\n")
+
if sourceout then
local eof = false
repeat