Comparison

core/modulemanager.lua @ 3595:ec1151d0c4a4

modulemanager: load_modules_for_host(): Inherit 'tls' and 'dialback' from global modules list for components, and load the component module. Also refactored to use util.set.
author Waqas Hussain <waqas20@gmail.com>
date Wed, 10 Nov 2010 18:06:51 +0500
parent 3588:1e570ed17147
child 3596:bbeba9f2acf8
comparison
equal deleted inserted replaced
3594:d3b57562cd87 3595:ec1151d0c4a4
38 end 38 end
39 39
40 local array, set = require "util.array", require "util.set"; 40 local array, set = require "util.array", require "util.set";
41 41
42 local autoload_modules = {"presence", "message", "iq"}; 42 local autoload_modules = {"presence", "message", "iq"};
43 local component_inheritable_modules = {"tls", "dialback"};
43 44
44 -- We need this to let modules access the real global namespace 45 -- We need this to let modules access the real global namespace
45 local _G = _G; 46 local _G = _G;
46 47
47 module "modulemanager" 48 module "modulemanager"
57 58
58 local NULL = {}; 59 local NULL = {};
59 60
60 -- Load modules when a host is activated 61 -- Load modules when a host is activated
61 function load_modules_for_host(host) 62 function load_modules_for_host(host)
62 local disabled_set = {}; 63 local component = config.get(host, "core", "component_module");
63 local modules_disabled = config.get(host, "core", "modules_disabled"); 64
64 if modules_disabled then 65 local global_modules_enabled = config.get("*", "core", "modules_enabled");
65 for _, module in ipairs(modules_disabled) do 66 local global_modules_disabled = config.get("*", "core", "modules_disabled");
66 disabled_set[module] = true; 67 local host_modules_enabled = config.get(host, "core", "modules_enabled");
67 end 68 local host_modules_disabled = config.get(host, "core", "modules_disabled");
68 end 69
69 70 if host_modules_enabled == global_modules_enabled then host_modules_enabled = nil; end
70 -- Load auto-loaded modules for this host 71 if host_modules_disabled == global_modules_disabled then host_modules_disabled = nil; end
71 if hosts[host].type == "local" then 72
72 for _, module in ipairs(autoload_modules) do 73 local host_modules = set.new(host_modules_enabled) - set.new(host_modules_disabled);
73 if not disabled_set[module] then 74 local global_modules = set.new(autoload_modules) + set.new(global_modules_enabled) - set.new(global_modules_disabled);
74 load(host, module); 75 if component then
75 end 76 global_modules = set.new(component_inheritable_modules) - global_modules;
76 end 77 end
77 end 78 local modules = global_modules + host_modules;
78 79
79 -- Load modules from global section 80 if component then
80 if config.get(host, "core", "load_global_modules") ~= false then 81 load(host, component);
81 local modules_enabled = config.get("*", "core", "modules_enabled"); 82 end
82 if modules_enabled then 83 for module in modules do
83 for _, module in ipairs(modules_enabled) do 84 load(host, module);
84 if not disabled_set[module] and not is_loaded(host, module) then
85 load(host, module);
86 end
87 end
88 end
89 end
90
91 -- Load modules from just this host
92 local modules_enabled = config.get(host, "core", "modules_enabled");
93 if modules_enabled and modules_enabled ~= config.get("*", "core", "modules_enabled") then
94 for _, module in pairs(modules_enabled) do
95 if not is_loaded(host, module) then
96 load(host, module);
97 end
98 end
99 end 85 end
100 end 86 end
101 prosody_events.add_handler("host-activated", load_modules_for_host); 87 prosody_events.add_handler("host-activated", load_modules_for_host);
102 prosody_events.add_handler("component-activated", load_modules_for_host); 88 prosody_events.add_handler("component-activated", load_modules_for_host);
103 -- 89 --