diff options
author | Matthew Wild <mwild1@gmail.com> | 2011-02-23 00:31:12 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2011-02-23 00:31:12 +0000 |
commit | 89f544c8bb40b2c7d7d629a495d30cf025ad9f8e (patch) | |
tree | 2471b052a72d7a648d7d98fd684058604d9dd2ae | |
parent | c2f327df6d5a7a73e7a50fcae7f76ace548dff42 (diff) | |
download | prosody-89f544c8bb40b2c7d7d629a495d30cf025ad9f8e.tar.gz prosody-89f544c8bb40b2c7d7d629a495d30cf025ad9f8e.zip |
net.httpserver: Fix HTTP after commit c299726d2b4e and add a 500 error response if a request handler fails to make a response to the client
-rw-r--r-- | net/httpserver.lua | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/net/httpserver.lua b/net/httpserver.lua index 6d6408f7..36c04c3f 100644 --- a/net/httpserver.lua +++ b/net/httpserver.lua @@ -89,10 +89,20 @@ local function call_callback(request, err) end if callback then local _callback = callback; - function callback(a, b, c) - local status, result = xpcall(function() _callback(a, b, c) end, debug_traceback); - if status then return result; end + function callback(method, body, request) + local ok, result = xpcall(function() return _callback(method, body, request) end, debug_traceback); + if ok then return result; end log("error", "Error in HTTP server handler: %s", result); + -- TODO: When we support pipelining, request.destroyed + -- won't be the right flag - we just want to see if there + -- has been a response to this request yet. + if not request.destroyed then + return { + status = "500 Internal Server Error"; + headers = { ["Content-Type"] = "text/plain" }; + body = "There was an error processing your request. See the error log for more details."; + }; + end end if err then log("debug", "Request error: "..err); |