# HG changeset patch # User Matthew Wild # Date 1427495097 0 # Node ID d2faaaca695dcb9052f28e58001ece2f99e42ddc # Parent b6e558febb7af6605b744d4d623e73df0e510e7e# Parent 96f4a325b534b75ee1eafde69f02bea1880eb8ee Merge 0.10->trunk diff -r 96f4a325b534 -r d2faaaca695d net/http/server.lua --- a/net/http/server.lua Fri Mar 27 00:29:35 2015 +0100 +++ b/net/http/server.lua Fri Mar 27 22:24:57 2015 +0000 @@ -189,6 +189,7 @@ persistent = persistent; conn = conn; send = _M.send_response; + done = _M.finish_response; finish_cb = finish_cb; }; conn._http_open_response = response; @@ -208,7 +209,7 @@ err_code, err = 400, "Missing or invalid 'Host' header"; end end - + if err then response.status_code = err_code; response:send(events.fire_event("http-error", { code = err_code, message = err })); @@ -250,24 +251,30 @@ response.status_code = 404; response:send(events.fire_event("http-error", { code = 404 })); end -function _M.send_response(response, body) - if response.finished then return; end - response.finished = true; - response.conn._http_open_response = nil; - +local function prepare_header(response) local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]); local headers = response.headers; - body = body or response.body or ""; - headers.content_length = #body; - local output = { status_line }; for k,v in pairs(headers) do t_insert(output, headerfix[k]..v); end t_insert(output, "\r\n\r\n"); + return output; +end +_M.prepare_header = prepare_header; +function _M.send_response(response, body) + if response.finished then return; end + body = body or response.body or ""; + response.headers.content_length = #body; + local output = prepare_header(response); t_insert(output, body); - response.conn:write(t_concat(output)); + response:done(); +end +function _M.finish_response(response) + if response.finished then return; end + response.finished = true; + response.conn._http_open_response = nil; if response.on_destroy then response:on_destroy(); response.on_destroy = nil; diff -r 96f4a325b534 -r d2faaaca695d plugins/mod_s2s/mod_s2s.lua diff -r 96f4a325b534 -r d2faaaca695d util-src/encodings.c