Mercurial > prosody-hg
comparison net/http.lua @ 8114:12df41a5a4b1
net.http: Fire new events: pre-request, request-connection-error, request, response
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 21 Apr 2017 16:42:06 +0100 |
| parents | cfb5ab763384 |
| children | 375cf924fce1 |
comparison
equal
deleted
inserted
replaced
| 8113:cfb5ab763384 | 8114:12df41a5a4b1 |
|---|---|
| 135 req.path = "/"; | 135 req.path = "/"; |
| 136 end | 136 end |
| 137 | 137 |
| 138 req.id = ex and ex.id or make_id(req); | 138 req.id = ex and ex.id or make_id(req); |
| 139 | 139 |
| 140 do | |
| 141 local event = { http = self, url = u, request = req, options = ex, callback = callback }; | |
| 142 local ret = self.events.fire_event("pre-request", event); | |
| 143 if ret then | |
| 144 return ret; | |
| 145 end | |
| 146 req, u, ex, callback = event.request, event.url, event.options, event.callback; | |
| 147 end | |
| 148 | |
| 140 local method, headers, body; | 149 local method, headers, body; |
| 141 | 150 |
| 142 local host, port = req.host, req.port; | 151 local host, port = req.host, req.port; |
| 143 local host_header = host; | 152 local host_header = host; |
| 144 if (port == "80" and req.scheme == "http") | 153 if (port == "80" and req.scheme == "http") |
| 189 sslctx = ex and ex.sslctx or { mode = "client", protocol = "sslv23", options = { "no_sslv2", "no_sslv3" } }; | 198 sslctx = ex and ex.sslctx or { mode = "client", protocol = "sslv23", options = { "no_sslv2", "no_sslv3" } }; |
| 190 end | 199 end |
| 191 | 200 |
| 192 local handler, conn = server.addclient(host, port_number, listener, "*a", sslctx) | 201 local handler, conn = server.addclient(host, port_number, listener, "*a", sslctx) |
| 193 if not handler then | 202 if not handler then |
| 203 self.events.fire_event("request-connection-error", { http = self, request = req, url = u, err = conn }); | |
| 194 callback(conn, 0, req); | 204 callback(conn, 0, req); |
| 195 return nil, conn; | 205 return nil, conn; |
| 196 end | 206 end |
| 197 req.handler, req.conn = handler, conn | 207 req.handler, req.conn = handler, conn |
| 198 req.write = function (...) return req.handler:write(...); end | 208 req.write = function (...) return req.handler:write(...); end |
| 199 | 209 |
| 200 req.callback = function (content, code, request, response) | 210 req.callback = function (content, code, response, request) |
| 211 do | |
| 212 local event = { http = self, url = u, request = req, response = response, content = content, code = code, callback = callback }; | |
| 213 self.events.fire_event("response", event); | |
| 214 content, code, response = event.content, event.code, event.response; | |
| 215 end | |
| 216 | |
| 201 log("debug", "Request '%s': Calling callback, status %s", req.id, code or "---"); | 217 log("debug", "Request '%s': Calling callback, status %s", req.id, code or "---"); |
| 202 return log_if_failed(req.id, xpcall(function () return callback(content, code, request, response) end, handleerr)); | 218 return log_if_failed(req.id, xpcall(function () return callback(content, code, request, response) end, handleerr)); |
| 203 end | 219 end |
| 204 req.reader = request_reader; | 220 req.reader = request_reader; |
| 205 req.state = "status"; | 221 req.state = "status"; |
| 206 | 222 |
| 207 requests[req.handler] = req; | 223 requests[req.handler] = req; |
| 224 | |
| 225 self.events.fire_event("request", { http = self, request = req, url = u }); | |
| 208 return req; | 226 return req; |
| 209 end | 227 end |
| 210 | 228 |
| 211 local function new(options) | 229 local function new(options) |
| 212 local http = { | 230 local http = { |
