Comparison

plugins/mod_http.lua @ 4635:ea5215bd2783

mod_http: Provide HTTP service.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 21 Apr 2012 17:38:48 +0500
child 4636:41983ec223f0
comparison
equal deleted inserted replaced
4634:8e582afc214d 4635:ea5215bd2783
1 -- Prosody IM
2 -- Copyright (C) 2008-2010 Matthew Wild
3 -- Copyright (C) 2008-2010 Waqas Hussain
4 --
5 -- This project is MIT/X11 licensed. Please see the
6 -- COPYING file in the source package for more information.
7 --
8
9 module:set_global();
10
11 --local sessions = module:shared("sessions");
12
13 --[[function listener.associate_session(conn, session)
14 sessions[conn] = session;
15 end]]
16
17 local handlers;
18
19 function build_handlers()
20 handlers = {};
21 for _, item in ipairs(module:get_host_items("http-handler")) do
22 local previous = handlers[item.path];
23 if not previous and item.path then
24 handlers[item.path] = item;
25 end
26 end
27 end
28 function clear_handlers()
29 handlers = nil;
30 end
31 module:handle_items("http-handler", clear_handlers, clear_handlers, false);
32
33 function http_handler(event)
34 local request, response = event.request, event.response;
35
36 if not handlers then build_handlers(); end
37 local item = handlers[request.path:match("[^?]*")];
38 local handler = item and item.handler;
39 if handler then
40 handler(request, response);
41 return true;
42 end
43 end
44
45 local server = require "net.http.server";
46 local listener = server.listener;
47 server.add_handler("*", http_handler);
48 function module.unload()
49 server.remove_handler("*", http_handler);
50 end
51 --require "net.http.server".listen_on(8080);
52
53 module:add_item("net-provider", {
54 name = "http";
55 listener = listener;
56 default_port = 5280;
57 multiplex = {
58 pattern = "^[A-Z]";
59 };
60 });
61
62 module:add_item("net-provider", {
63 name = "https";
64 listener = listener;
65 encryption = "ssl";
66 multiplex = {
67 pattern = "^[A-Z]";
68 };
69 });