From 08eb2962487da4fad181f7d3eaac51490be253c5 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Thu, 21 Jan 2010 14:53:01 +0000 Subject: net.httpserver: More robust handling of headers split across multiple packets --- net/httpserver.lua | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'net/httpserver.lua') diff --git a/net/httpserver.lua b/net/httpserver.lua index cf51521f..addbfac0 100644 --- a/net/httpserver.lua +++ b/net/httpserver.lua @@ -142,22 +142,29 @@ local function request_reader(request, data, startpos) elseif request.state == "headers" then log("debug", "Reading headers...") local pos = startpos; - local headers = request.headers or {}; + local headers, headers_complete = request.headers; + if not headers then + headers = {}; + request.headers = headers; + end + for line in data:gmatch("(.-)\r\n") do startpos = (startpos or 1) + #line + 2; local k, v = line:match("(%S+): (.+)"); if k and v then headers[k:lower()] = v; --- log("debug", "Header: "..k:lower().." = "..v); + --log("debug", "Header: '"..k:lower().."' = '"..v.."'"); elseif #line == 0 then - request.headers = headers; + headers_complete = true; break; else log("debug", "Unhandled header line: "..line); end end - if not expectbody(request) then + if not headers_complete then return; end + + if not expectbody(request) then call_callback(request); return; end -- cgit v1.2.3