Mercurial > prosody-hg
comparison net/http/server.lua @ 8362:c7d6c2558a24
net.http.server: Include response object in most http-error events
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 27 Oct 2017 14:08:28 +0200 |
| parents | e080b8b4f3cb |
| children | 2dc7490899ae |
comparison
equal
deleted
inserted
replaced
| 8361:6af950b834a6 | 8362:c7d6c2558a24 |
|---|---|
| 227 end | 227 end |
| 228 end | 228 end |
| 229 | 229 |
| 230 if err then | 230 if err then |
| 231 response.status_code = err_code; | 231 response.status_code = err_code; |
| 232 response:send(events.fire_event("http-error", { code = err_code, message = err })); | 232 response:send(events.fire_event("http-error", { code = err_code, message = err, response = response })); |
| 233 return; | 233 return; |
| 234 end | 234 end |
| 235 | 235 |
| 236 local event = request.method.." "..host..request.path:match("[^?]*"); | 236 local event = request.method.." "..host..request.path:match("[^?]*"); |
| 237 local payload = { request = request, response = response }; | 237 local payload = { request = request, response = response }; |
| 242 local body; | 242 local body; |
| 243 local result_type = type(result); | 243 local result_type = type(result); |
| 244 if result_type == "number" then | 244 if result_type == "number" then |
| 245 response.status_code = result; | 245 response.status_code = result; |
| 246 if result >= 400 then | 246 if result >= 400 then |
| 247 body = events.fire_event("http-error", { code = result }); | 247 payload.code = result; |
| 248 body = events.fire_event("http-error", payload); | |
| 248 end | 249 end |
| 249 elseif result_type == "string" then | 250 elseif result_type == "string" then |
| 250 body = result; | 251 body = result; |
| 251 elseif result_type == "table" then | 252 elseif result_type == "table" then |
| 252 for k, v in pairs(result) do | 253 for k, v in pairs(result) do |
| 264 return; | 265 return; |
| 265 end | 266 end |
| 266 | 267 |
| 267 -- if handler not called, return 404 | 268 -- if handler not called, return 404 |
| 268 response.status_code = 404; | 269 response.status_code = 404; |
| 269 response:send(events.fire_event("http-error", { code = 404 })); | 270 payload.code = 404; |
| 271 response:send(events.fire_event("http-error", payload)); | |
| 270 end | 272 end |
| 271 local function prepare_header(response) | 273 local function prepare_header(response) |
| 272 local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]); | 274 local status_line = "HTTP/"..response.request.httpversion.." "..(response.status or codes[response.status_code]); |
| 273 local headers = response.headers; | 275 local headers = response.headers; |
| 274 local output = { status_line }; | 276 local output = { status_line }; |
