Tue, 03 Aug 2010 10:58:15 +0100
sessionmanager: Remove dependency on eventmanager
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; |
3435
6cb971a31397
componentmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2925
diff
changeset
|
15 | local fire_event = prosody.events.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:
894
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:
894
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:
894
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:
894
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:
894
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:
894
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:
894
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:
1009
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:
894
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:
894
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:
894
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:
894
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; |