Changeset

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 4682:9d90c70b6358
children 4684:dc70c4ffb66d
files net/http/server.lua
diffstat 1 files changed, 20 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/net/http/server.lua	Tue Apr 24 19:05:45 2012 +0100
+++ b/net/http/server.lua	Tue Apr 24 19:07:12 2012 +0100
@@ -168,19 +168,27 @@
 			host = host:match("[^:]*"):lower();
 			local event = request.method.." "..host..request.path:match("[^?]*");
 			local payload = { request = request, response = response };
-			--[[repeat
-				if events.fire_event(event, payload) ~= nil then return; end
-				event = (event:sub(-1) == "/") and event:sub(1, -1) or event:gsub("[^/]*$", "");
-				if event:sub(-1) == "/" then
-					event = event:sub(1, -1);
-				else
-					event = event:gsub("[^/]*$", "");
+			--log("debug", "Firing event: %s", event);
+			local result = events.fire_event(event, payload);
+			if result ~= nil then
+				if result ~= true then
+					local code, body = 200, "";
+					local result_type = type(result);
+					if result_type == "number" then
+						response.status_code = result;
+					elseif result_type == "string" then
+						body = result;
+					elseif result_type == "table" then
+						body = result.body;
+						result.body = nil;
+						for k, v in pairs(result) do
+							response[k] = v;
+						end
+					end
+					response:send(body);
 				end
-			until not event:find("/", 1, true);]]
-			--log("debug", "Event: %s", event);
-			if events.fire_event(event, payload) ~= nil then return; end
-			-- TODO try adding/stripping / at the end, but this needs to work via an HTTP redirect
-			if events.fire_event("*", payload) ~= nil then return; end
+				return;
+			end
 		end
 
 		-- if handler not called, fallback to legacy httpserver handlers