net.server: Fail to open port if legacy SSL requested, but SSL not available
[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         log((hosts_loaded_once and "info") or "debug", "Activated host: %s", host);
45         eventmanager.fire_event("host-activated", host, host_config);
46 end
47
48 function deactivate(host)
49         local host_session = hosts[host];
50         log("info", "Deactivating host: %s", host);
51         eventmanager.fire_event("host-deactivating", host, host_session);
52         
53         -- Disconnect local users, s2s connections
54         for user, session_list in pairs(host_session.sessions) do
55                 for resource, session in pairs(session_list) do
56                         session:close("host-gone");
57                 end
58         end
59         -- Components?
60         
61         hosts[host] = nil;
62         eventmanager.fire_event("host-deactivated", host);
63         log("info", "Deactivated host: %s", host);
64 end
65
66 function getconfig(name)
67 end
68