Software /
code /
prosody
Annotate
core/componentmanager.lua @ 3317:82b17b199d68
mod_privacy: Add service discovery feature.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sat, 03 Jul 2010 11:03:06 +0500 |
parent | 2925:692b3c6c5bd2 |
child | 3435:6cb971a31397 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1442
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
270
diff
changeset
|
4 -- |
758 | 5 -- This project is MIT/X11 licensed. Please see the |
6 -- COPYING file in the source package for more information. | |
519
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
270
diff
changeset
|
7 -- |
cccd610a0ef9
Insert copyright/license headers
Matthew Wild <mwild1@gmail.com>
parents:
270
diff
changeset
|
8 |
1970
edab0c61fc02
componentmanager: Handle missing prosody object (helps us pass some tests)
Matthew Wild <mwild1@gmail.com>
parents:
1942
diff
changeset
|
9 local prosody = _G.prosody; |
610
d98106902f74
Enable dialback for components
Waqas Hussain <waqas20@gmail.com>
parents:
519
diff
changeset
|
10 local log = require "util.logger".init("componentmanager"); |
2629
fe207a2c5cef
componentmanager: Use certmanager for creating contexts
Matthew Wild <mwild1@gmail.com>
parents:
2447
diff
changeset
|
11 local certmanager = require "core.certmanager"; |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
12 local configmanager = require "core.configmanager"; |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
13 local modulemanager = require "core.modulemanager"; |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
14 local jid_split = require "util.jid".split; |
1850
8f1871c1d456
componentmanager: Fire event on component activation
Matthew Wild <mwild1@gmail.com>
parents:
1849
diff
changeset
|
15 local fire_event = require "core.eventmanager".fire_event; |
1188 | 16 local events_new = require "util.events".new; |
982
dbbeb73952e6
componentmanager: Improve default component stanza handler
Matthew Wild <mwild1@gmail.com>
parents:
970
diff
changeset
|
17 local st = require "util.stanza"; |
2323
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
18 local prosody, hosts = prosody, prosody.hosts; |
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
19 local ssl = ssl; |
2447
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
20 local uuid_gen = require "util.uuid".generate; |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
21 |
2323
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
22 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring; |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
23 |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
24 local components = {}; |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
25 |
939
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
26 local disco_items = require "util.multitable".new(); |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
27 local NULL = {}; |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
28 |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
29 module "componentmanager" |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
30 |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
31 local function default_component_handler(origin, stanza) |
2075
b4bfa6cb3d83
componentmanager: Improved logging for stanzas being bounced for unavailable components.
Waqas Hussain <waqas20@gmail.com>
parents:
1992
diff
changeset
|
32 log("warn", "Stanza being handled by default component; bouncing error for: %s", stanza:top_tag()); |
1773
f47aa1d336b5
ComponentManager: Fixed: Default handler sent error replies on result stanzas.
Waqas Hussain <waqas20@gmail.com>
parents:
1772
diff
changeset
|
33 if stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then |
1774
53bd9c9f3103
ComponentManager: Removed dependency on core_route_stanza. The default component handler now replies using origin.send().
Waqas Hussain <waqas20@gmail.com>
parents:
1773
diff
changeset
|
34 origin.send(st.error_reply(stanza, "wait", "service-unavailable", "Component unavailable")); |
982
dbbeb73952e6
componentmanager: Improve default component stanza handler
Matthew Wild <mwild1@gmail.com>
parents:
970
diff
changeset
|
35 end |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
36 end |
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
37 |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
38 function load_enabled_components(config) |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
39 local defined_hosts = config or configmanager.getconfig(); |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
40 |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
41 for host, host_config in pairs(defined_hosts) do |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
42 if host ~= "*" and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then |
1849
5529d3c8eee7
componentmanager: Use create_component for, er, creating components
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
43 hosts[host] = create_component(host); |
5529d3c8eee7
componentmanager: Use create_component for, er, creating components
Matthew Wild <mwild1@gmail.com>
parents:
1523
diff
changeset
|
44 hosts[host].connected = false; |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
45 components[host] = default_component_handler; |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
46 local ok, err = modulemanager.load(host, host_config.core.component_module); |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
47 if not ok then |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
48 log("error", "Error loading %s component %s: %s", tostring(host_config.core.component_module), tostring(host), tostring(err)); |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
49 else |
1850
8f1871c1d456
componentmanager: Fire event on component activation
Matthew Wild <mwild1@gmail.com>
parents:
1849
diff
changeset
|
50 fire_event("component-activated", host, host_config); |
1096
266ef0c6b1d0
componentmanager: Reduce log output at startup to 'debug'
Matthew Wild <mwild1@gmail.com>
parents:
1064
diff
changeset
|
51 log("debug", "Activated %s component: %s", host_config.core.component_module, host); |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
52 end |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
53 end |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
54 end |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
55 end |
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
56 |
1970
edab0c61fc02
componentmanager: Handle missing prosody object (helps us pass some tests)
Matthew Wild <mwild1@gmail.com>
parents:
1942
diff
changeset
|
57 if prosody and prosody.events then |
edab0c61fc02
componentmanager: Handle missing prosody object (helps us pass some tests)
Matthew Wild <mwild1@gmail.com>
parents:
1942
diff
changeset
|
58 prosody.events.add_handler("server-starting", load_enabled_components); |
edab0c61fc02
componentmanager: Handle missing prosody object (helps us pass some tests)
Matthew Wild <mwild1@gmail.com>
parents:
1942
diff
changeset
|
59 end |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
60 |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
61 function handle_stanza(origin, stanza) |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
62 local node, host = jid_split(stanza.attr.to); |
638
1915c64c9436
Changed order of checking for component hosts to check the full and bare JIDs before the hostname
Waqas Hussain <waqas20@gmail.com>
parents:
615
diff
changeset
|
63 local component = nil; |
1177
97ecfcec2d71
componentmanager: Don't error on stanzas to bare component JID
Matthew Wild <mwild1@gmail.com>
parents:
1168
diff
changeset
|
64 if host then |
97ecfcec2d71
componentmanager: Don't error on stanzas to bare component JID
Matthew Wild <mwild1@gmail.com>
parents:
1168
diff
changeset
|
65 if node then component = components[node.."@"..host]; end -- hack to allow hooking node@server |
97ecfcec2d71
componentmanager: Don't error on stanzas to bare component JID
Matthew Wild <mwild1@gmail.com>
parents:
1168
diff
changeset
|
66 if not component then component = components[host]; end |
97ecfcec2d71
componentmanager: Don't error on stanzas to bare component JID
Matthew Wild <mwild1@gmail.com>
parents:
1168
diff
changeset
|
67 end |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
68 if component then |
983
460429a59c83
componentmanager: Small logging fix
Matthew Wild <mwild1@gmail.com>
parents:
982
diff
changeset
|
69 log("debug", "%s stanza being handled by component: %s", stanza.name, host); |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
70 component(origin, stanza, hosts[host]); |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
71 else |
1772
c0ba9cd6ee63
ComponentManager: Fixed a bit of logging.
Waqas Hussain <waqas20@gmail.com>
parents:
1705
diff
changeset
|
72 log("error", "Component manager recieved a stanza for a non-existing component: "..tostring(stanza)); |
1990
b7fff80908b6
componentmanager: Let the default component handler handle stanzas if a component handler isn't available.
Waqas Hussain <waqas20@gmail.com>
parents:
1970
diff
changeset
|
73 default_component_handler(origin, stanza); |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
74 end |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
75 end |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
76 |
1851
0a4d4ba01db8
componentmanager: Preserve existing events table (if any) when registering a component
Matthew Wild <mwild1@gmail.com>
parents:
1850
diff
changeset
|
77 function create_component(host, component, events) |
970
5516f9e66482
sessionmanager, componentmanager: Fix some wacky indentation (thanks greyback!)
Matthew Wild <mwild1@gmail.com>
parents:
961
diff
changeset
|
78 -- TODO check for host well-formedness |
2323
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
79 local ssl_ctx, ssl_ctx_in; |
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
80 if host and ssl then |
1939
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
81 -- We need to find SSL context to use... |
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
82 -- Discussion in prosody@ concluded that |
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
83 -- 1 level back is usually enough by default |
1940
85d51cea2c4c
componentmanager: Fix oops in pattern for matching subdomain
Matthew Wild <mwild1@gmail.com>
parents:
1939
diff
changeset
|
84 local base_host = host:gsub("^[^%.]+%.", ""); |
1939
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
85 if hosts[base_host] then |
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
86 ssl_ctx = hosts[base_host].ssl_ctx; |
2323
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
87 ssl_ctx_in = hosts[base_host].ssl_ctx_in; |
2629
fe207a2c5cef
componentmanager: Use certmanager for creating contexts
Matthew Wild <mwild1@gmail.com>
parents:
2447
diff
changeset
|
88 else |
2323
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
89 -- We have no cert, and no parent host to borrow a cert from |
b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
Matthew Wild <mwild1@gmail.com>
parents:
2075
diff
changeset
|
90 -- Use global/default cert if there is one |
2629
fe207a2c5cef
componentmanager: Use certmanager for creating contexts
Matthew Wild <mwild1@gmail.com>
parents:
2447
diff
changeset
|
91 ssl_ctx = certmanager.create_context(host, "client"); |
fe207a2c5cef
componentmanager: Use certmanager for creating contexts
Matthew Wild <mwild1@gmail.com>
parents:
2447
diff
changeset
|
92 ssl_ctx_in = certmanager.create_context(host, "server"); |
1939
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
93 end |
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
94 end |
2c295826a96d
componentmanager: Use ssl_ctx of 'parent' host (should fix TLS for components)
Matthew Wild <mwild1@gmail.com>
parents:
1853
diff
changeset
|
95 return { type = "component", host = host, connected = true, s2sout = {}, |
2447
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
96 ssl_ctx = ssl_ctx, ssl_ctx_in = ssl_ctx_in, events = events or events_new(), |
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
97 dialback_secret = configmanager.get(host, "core", "dialback_secret") or uuid_gen() }; |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
98 end |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
99 |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
100 function register_component(host, component, session) |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
101 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then |
1264
498293bce4bf
componentmanager: Create events object for configured hosts, and carry it over to a new component if one is registered with no events object
Matthew Wild <mwild1@gmail.com>
parents:
1257
diff
changeset
|
102 local old_events = hosts[host] and hosts[host].events; |
498293bce4bf
componentmanager: Create events object for configured hosts, and carry it over to a new component if one is registered with no events object
Matthew Wild <mwild1@gmail.com>
parents:
1257
diff
changeset
|
103 |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
104 components[host] = component; |
1851
0a4d4ba01db8
componentmanager: Preserve existing events table (if any) when registering a component
Matthew Wild <mwild1@gmail.com>
parents:
1850
diff
changeset
|
105 hosts[host] = session or create_component(host, component, old_events); |
2447
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
106 |
1257
8c9f20d3a17f
componentmanager: Add events object to registered components if they don't already have one
Matthew Wild <mwild1@gmail.com>
parents:
1188
diff
changeset
|
107 -- Add events object if not already one |
8c9f20d3a17f
componentmanager: Add events object to registered components if they don't already have one
Matthew Wild <mwild1@gmail.com>
parents:
1188
diff
changeset
|
108 if not hosts[host].events then |
1264
498293bce4bf
componentmanager: Create events object for configured hosts, and carry it over to a new component if one is registered with no events object
Matthew Wild <mwild1@gmail.com>
parents:
1257
diff
changeset
|
109 hosts[host].events = old_events or events_new(); |
1257
8c9f20d3a17f
componentmanager: Add events object to registered components if they don't already have one
Matthew Wild <mwild1@gmail.com>
parents:
1188
diff
changeset
|
110 end |
2447
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
111 |
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
112 if not hosts[host].dialback_secret then |
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
113 hosts[host].dialback_secret = configmanager.get(host, "core", "dialback_secret") or uuid_gen(); |
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
114 end |
9eb539222f22
componentmanager: Add dialback_secret to components to allow s2s to work (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents:
2323
diff
changeset
|
115 |
939
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
116 -- add to disco_items |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
117 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
118 disco_items:set(host:sub(host:find(".", 1, true)+1), host, true); |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
119 end |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
120 modulemanager.load(host, "dialback"); |
1942
f74c267f7e1b
componentmanager: Auto-load mod_tls for components #hack
Matthew Wild <mwild1@gmail.com>
parents:
1941
diff
changeset
|
121 modulemanager.load(host, "tls"); |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
122 log("debug", "component added: "..host); |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
123 return session or hosts[host]; |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
124 else |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
125 log("error", "Attempt to set component for existing host: "..host); |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
126 end |
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
127 end |
673
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
128 |
703
f9909efed20c
componentmanager: Removed unneeded parameter from componentmanager.deregister_component
Waqas Hussain <waqas20@gmail.com>
parents:
673
diff
changeset
|
129 function deregister_component(host) |
673
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
130 if components[host] then |
1991
ed4cd15bf4dd
componentmanager: Unload mod_tls for components before removing them.
Waqas Hussain <waqas20@gmail.com>
parents:
1990
diff
changeset
|
131 modulemanager.unload(host, "tls"); |
751
7c22619fdb19
componentmanager: Add support for loading components defined in the config
Matthew Wild <mwild1@gmail.com>
parents:
703
diff
changeset
|
132 modulemanager.unload(host, "dialback"); |
1064
3e945c3938ad
core.componentmanager: Really fix marking components as disconnected when unregistered
Matthew Wild <mwild1@gmail.com>
parents:
1004
diff
changeset
|
133 hosts[host].connected = nil; |
984
9acc1c2ceb2c
componentmanager: Restore default component when unregistering
Matthew Wild <mwild1@gmail.com>
parents:
983
diff
changeset
|
134 local host_config = configmanager.getconfig()[host]; |
9acc1c2ceb2c
componentmanager: Restore default component when unregistering
Matthew Wild <mwild1@gmail.com>
parents:
983
diff
changeset
|
135 if host_config and ((host_config.core.enabled == nil or host_config.core.enabled) and type(host_config.core.component_module) == "string") then |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
136 -- Set default handler |
984
9acc1c2ceb2c
componentmanager: Restore default component when unregistering
Matthew Wild <mwild1@gmail.com>
parents:
983
diff
changeset
|
137 components[host] = default_component_handler; |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
138 else |
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
139 -- Component not in config, or disabled, remove |
1992
bbaba17537a9
componentmanager: Added a FIXME comment.
Waqas Hussain <waqas20@gmail.com>
parents:
1991
diff
changeset
|
140 hosts[host] = nil; -- FIXME do proper unload of all modules and other cleanup before removing |
984
9acc1c2ceb2c
componentmanager: Restore default component when unregistering
Matthew Wild <mwild1@gmail.com>
parents:
983
diff
changeset
|
141 components[host] = nil; |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
142 end |
939
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
143 -- remove from disco_items |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
144 if not(host:find("@", 1, true) or host:find("/", 1, true)) and host:find(".", 1, true) then |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
145 disco_items:remove(host:sub(host:find(".", 1, true)+1), host); |
b832f786af62
Added: componentmanager: Automatically add component.host.name to the disco items list of host.name
Waqas Hussain <waqas20@gmail.com>
parents:
896
diff
changeset
|
146 end |
673
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
147 log("debug", "component removed: "..host); |
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
148 return true; |
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
149 else |
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
150 log("error", "Attempt to remove component for non-existing host: "..host); |
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
151 end |
c9bc58e84e96
componentmanager: Added support for component deregistering
Waqas Hussain <waqas20@gmail.com>
parents:
638
diff
changeset
|
152 end |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
153 |
961
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
154 function set_component_handler(host, handler) |
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
155 components[host] = handler; |
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
156 end |
b48ed2149d0a
componentmanager: Reply with service-unavailable for unconnected components
Matthew Wild <mwild1@gmail.com>
parents:
945
diff
changeset
|
157 |
1693
56e23b0b3893
componentmanager: Added function to get a list of children for a given hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
158 function get_children(host) |
56e23b0b3893
componentmanager: Added function to get a list of children for a given hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
159 return disco_items:get(host) or NULL; |
56e23b0b3893
componentmanager: Added function to get a list of children for a given hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
160 end |
56e23b0b3893
componentmanager: Added function to get a list of children for a given hostname
Waqas Hussain <waqas20@gmail.com>
parents:
1523
diff
changeset
|
161 |
847
2d424936723c
core.componentmanager: Refactor a little to make XEP-0114 plugin a little simpler
Matthew Wild <mwild1@gmail.com>
parents:
777
diff
changeset
|
162 return _M; |