From 4ce0cecfe4dbd9e1bfe71a16c81478c574070645 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Sat, 21 Apr 2012 18:23:44 +0500 Subject: mod_http: Include handlers of non-global modules. --- plugins/mod_http.lua | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) (limited to 'plugins') diff --git a/plugins/mod_http.lua b/plugins/mod_http.lua index 4713cf13..24ef8ab3 100644 --- a/plugins/mod_http.lua +++ b/plugins/mod_http.lua @@ -14,28 +14,44 @@ module:set_global(); sessions[conn] = session; end]] -local handlers; +local NULL = {}; +local handlers = {}; -function build_handlers() - handlers = {}; - for _, item in ipairs(module:get_host_items("http-handler")) do - local previous = handlers[item.path]; - if not previous and item.path then - handlers[item.path] = item; +function build_handlers(host) + if not hosts[host] then return; end + local h = {}; + handlers[host] = h; + + for mod_name, module in pairs(modulemanager.get_modules(host)) do + module = module.module; + if module.items then + for _, item in ipairs(module.items["http-handler"] or NULL) do + local previous = handlers[item.path]; + if not previous and item.path then + h[item.path] = item; + end + end end end + + return h; +end +function clear_handlers(event) + handlers[event.source.host] = nil; end -function clear_handlers() - handlers = nil; +function get_handler(host, path) + local h = handlers[host] or build_handlers(host); + if h then + local item = h[path]; + return item and item.handler; + end end module:handle_items("http-handler", clear_handlers, clear_handlers, false); function http_handler(event) local request, response = event.request, event.response; - if not handlers then build_handlers(); end - local item = handlers[request.path:match("[^?]*")]; - local handler = item and item.handler; + local handler = get_handler(request.headers.host:match("[^:]*"):lower(), request.path:match("[^?]*")); if handler then handler(request, response); return true; -- cgit v1.2.3