Merge with waqas
[prosody.git] / core / hostmanager.lua
1 -- Prosody IM
2 -- Copyright (C) 2008-2009 Matthew Wild
3 -- Copyright (C) 2008-2009 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
10 local hosts = hosts;
11 local configmanager = require "core.configmanager";
12 local eventmanager = require "core.eventmanager";
13 local events_new = require "util.events".new;
14
15 local log = require "util.logger".init("hostmanager");
16
17 local pairs = pairs;
18
19 module "hostmanager"
20
21 local hosts_loaded_once;
22
23 local function load_enabled_hosts(config)
24         local defined_hosts = config or configmanager.getconfig();
25         
26         for host, host_config in pairs(defined_hosts) do
27                 if host ~= "*" and (host_config.core.enabled == nil or host_config.core.enabled) then
28                         activate(host, host_config);
29                 end
30         end
31         eventmanager.fire_event("hosts-activated", defined_hosts);
32         hosts_loaded_once = true;
33 end
34
35 eventmanager.add_event_hook("server-starting", load_enabled_hosts);
36
37 function activate(host, host_config)
38         hosts[host] = {type = "local", connected = true, sessions = {}, 
39                        host = host, s2sout = {}, events = events_new(), 
40                        disallow_s2s = configmanager.get(host, "core", "disallow_s2s") 
41                          or (configmanager.get(host, "core", "anonymous_login") 
42                              and (configmanager.get(host, "core", "disallow_s2s") ~= false))
43                       };
44         for option_name in pairs(host_config.core) do
45                 if option_name:match("_ports$") then
46                         log("warn", "%s: Option '%s' has no effect for virtual hosts - put it in global Host \"*\" instead", host, option_name);
47                 end
48         end
49         log((hosts_loaded_once and "info") or "debug", "Activated host: %s", host);
50         eventmanager.fire_event("host-activated", host, host_config);
51 end
52
53 function deactivate(host)
54         local host_session = hosts[host];
55         log("info", "Deactivating host: %s", host);
56         eventmanager.fire_event("host-deactivating", host, host_session);
57         
58         -- Disconnect local users, s2s connections
59         for user, session_list in pairs(host_session.sessions) do
60                 for resource, session in pairs(session_list) do
61                         session:close("host-gone");
62                 end
63         end
64         -- Components?
65         
66         hosts[host] = nil;
67         eventmanager.fire_event("host-deactivated", host);
68         log("info", "Deactivated host: %s", host);
69 end
70
71 function getconfig(name)
72 end
73