aboutsummaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2014-04-15 18:08:16 +0100
committerMatthew Wild <mwild1@gmail.com>2014-04-15 18:08:16 +0100
commit696099ca4cdf221f8c81d19aa25bb3457fdea7b7 (patch)
tree5a47eb6c6c4a37be242c5028e6c4bc759f84e112 /net/http
parent1c3053a6ebcb9fc16051becc296f61b82e14e100 (diff)
parent75c7b9704a05611583a56b5f0be58cb1526c1bdf (diff)
downloadprosody-696099ca4cdf221f8c81d19aa25bb3457fdea7b7.tar.gz
prosody-696099ca4cdf221f8c81d19aa25bb3457fdea7b7.zip
Merge 0.10->trunk
Diffstat (limited to 'net/http')
-rw-r--r--net/http/server.lua26
1 files changed, 17 insertions, 9 deletions
diff --git a/net/http/server.lua b/net/http/server.lua
index 5961169f..25fce43f 100644
--- a/net/http/server.lua
+++ b/net/http/server.lua
@@ -185,6 +185,7 @@ function handle_request(conn, request, finish_cb)
persistent = persistent;
conn = conn;
send = _M.send_response;
+ done = _M.finish_response;
finish_cb = finish_cb;
};
conn._http_open_response = response;
@@ -246,24 +247,31 @@ function handle_request(conn, request, finish_cb)
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");
t_insert(output, body);
-
+ 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 "";
+ headers.content_length = #body;
+ local output = prepare_header(respone);
+ t_insert(output, body);
response.conn:write(t_concat(output));
+ response:finish();
+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;