Mercurial > prosody-hg
comparison net/http/server.lua @ 4683:c1374e083c97
net.http.server: Handle results returned by handlers, and send as a response. Also removes explicit firing of '*', which can now be done via wildcard events.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 24 Apr 2012 19:07:12 +0100 |
| parents | 9d90c70b6358 |
| children | 8d275c86a04f |
comparison
equal
deleted
inserted
replaced
| 4682:9d90c70b6358 | 4683:c1374e083c97 |
|---|---|
| 166 local host = request.headers.host; | 166 local host = request.headers.host; |
| 167 if host then | 167 if host then |
| 168 host = host:match("[^:]*"):lower(); | 168 host = host:match("[^:]*"):lower(); |
| 169 local event = request.method.." "..host..request.path:match("[^?]*"); | 169 local event = request.method.." "..host..request.path:match("[^?]*"); |
| 170 local payload = { request = request, response = response }; | 170 local payload = { request = request, response = response }; |
| 171 --[[repeat | 171 --log("debug", "Firing event: %s", event); |
| 172 if events.fire_event(event, payload) ~= nil then return; end | 172 local result = events.fire_event(event, payload); |
| 173 event = (event:sub(-1) == "/") and event:sub(1, -1) or event:gsub("[^/]*$", ""); | 173 if result ~= nil then |
| 174 if event:sub(-1) == "/" then | 174 if result ~= true then |
| 175 event = event:sub(1, -1); | 175 local code, body = 200, ""; |
| 176 else | 176 local result_type = type(result); |
| 177 event = event:gsub("[^/]*$", ""); | 177 if result_type == "number" then |
| 178 end | 178 response.status_code = result; |
| 179 until not event:find("/", 1, true);]] | 179 elseif result_type == "string" then |
| 180 --log("debug", "Event: %s", event); | 180 body = result; |
| 181 if events.fire_event(event, payload) ~= nil then return; end | 181 elseif result_type == "table" then |
| 182 -- TODO try adding/stripping / at the end, but this needs to work via an HTTP redirect | 182 body = result.body; |
| 183 if events.fire_event("*", payload) ~= nil then return; end | 183 result.body = nil; |
| 184 for k, v in pairs(result) do | |
| 185 response[k] = v; | |
| 186 end | |
| 187 end | |
| 188 response:send(body); | |
| 189 end | |
| 190 return; | |
| 191 end | |
| 184 end | 192 end |
| 185 | 193 |
| 186 -- if handler not called, fallback to legacy httpserver handlers | 194 -- if handler not called, fallback to legacy httpserver handlers |
| 187 _M.legacy_handler(request, response); | 195 _M.legacy_handler(request, response); |
| 188 end | 196 end |
