Software / code / prosody
Comparison
core/componentmanager.lua @ 961:b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 08 Apr 2009 11:21:21 +0100 |
| parent | 945:699f0c46526a |
| child | 970:5516f9e66482 |
comparison
equal
deleted
inserted
replaced
| 960:6bc16062da6c | 961:b48ed2149d0a |
|---|---|
| 32 end); | 32 end); |
| 33 | 33 |
| 34 | 34 |
| 35 module "componentmanager" | 35 module "componentmanager" |
| 36 | 36 |
| 37 local function default_component_handler(origin, stanza) | |
| 38 origin.send(st.error_reply(stanza, "wait", "service-unavailable", "Component unavailable")); | |
| 39 end | |
| 40 | |
| 41 | |
| 37 function load_enabled_components(config) | 42 function load_enabled_components(config) |
| 38 local defined_hosts = config or configmanager.getconfig(); | 43 local defined_hosts = config or configmanager.getconfig(); |
| 39 | 44 |
| 40 for host, host_config in pairs(defined_hosts) do | 45 for host, host_config in pairs(defined_hosts) do |
| 41 if host ~= "*" and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then | 46 if host ~= "*" and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then |
| 42 hosts[host] = { type = "component", host = host, connected = false, s2sout = {} }; | 47 hosts[host] = { type = "component", host = host, connected = false, s2sout = {} }; |
| 48 components[host] = default_component_handler; | |
| 43 local ok, err = modulemanager.load(host, host_config.core.component_module); | 49 local ok, err = modulemanager.load(host, host_config.core.component_module); |
| 44 if not ok then | 50 if not ok then |
| 45 log("error", "Error loading %s component %s: %s", tostring(host_config.core.component_module), tostring(host), tostring(err)); | 51 log("error", "Error loading %s component %s: %s", tostring(host_config.core.component_module), tostring(host), tostring(err)); |
| 46 else | 52 else |
| 47 log("info", "Activated %s component: %s", host_config.core.component_module, host); | 53 log("info", "Activated %s component: %s", host_config.core.component_module, host); |
| 91 | 97 |
| 92 function deregister_component(host) | 98 function deregister_component(host) |
| 93 if components[host] then | 99 if components[host] then |
| 94 modulemanager.unload(host, "dialback"); | 100 modulemanager.unload(host, "dialback"); |
| 95 components[host] = nil; | 101 components[host] = nil; |
| 96 hosts[host] = nil; | 102 local host_config = defined_hosts[host]; |
| 103 if ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then | |
| 104 -- Set default handler | |
| 105 else | |
| 106 -- Component not in config, or disabled, remove | |
| 107 hosts[host] = nil; | |
| 108 end | |
| 97 -- remove from disco_items | 109 -- remove from disco_items |
| 98 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then | 110 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then |
| 99 disco_items:remove(host:sub(host:find(".", 1, true)+1), host); | 111 disco_items:remove(host:sub(host:find(".", 1, true)+1), host); |
| 100 end | 112 end |
| 101 log("debug", "component removed: "..host); | 113 log("debug", "component removed: "..host); |
| 103 else | 115 else |
| 104 log("error", "Attempt to remove component for non-existing host: "..host); | 116 log("error", "Attempt to remove component for non-existing host: "..host); |
| 105 end | 117 end |
| 106 end | 118 end |
| 107 | 119 |
| 120 function set_component_handler(host, handler) | |
| 121 components[host] = handler; | |
| 122 end | |
| 123 | |
| 108 return _M; | 124 return _M; |