Software /
code /
prosody
Annotate
plugins/mod_component.lua @ 5877:615a0774e4cc
util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Wed, 30 Oct 2013 17:44:42 -0400 |
parent | 5776:bd0ff8ae98a8 |
child | 5954:6dc73be95213 |
rev | line source |
---|---|
1523
841d61be198f
Remove version number from copyright headers
Matthew Wild <mwild1@gmail.com>
parents:
1405
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2490
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2490
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
4 -- |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
9 module:set_global(); |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 local t_concat = table.concat; |
5728
2ecf400b194a
mod_component: Local imports for some functions, including xpcall
Matthew Wild <mwild1@gmail.com>
parents:
5724
diff
changeset
|
12 local xpcall, tostring, type = xpcall, tostring, type; |
5724
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
13 local traceback = debug.traceback; |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
15 local logger = require "util.logger"; |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 local sha1 = require "util.hashes".sha1; |
1042
a3d77353c18a
mod_*: Fix a load of global accesses
Matthew Wild <mwild1@gmail.com>
parents:
981
diff
changeset
|
17 local st = require "util.stanza"; |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
19 local jid_split = require "util.jid".split; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
20 local new_xmpp_stream = require "util.xmppstream".new; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
21 local uuid_gen = require "util.uuid".generate; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
22 |
5013
ab693eea0869
mod_admin_adhoc, mod_admin_telnet, mod_bosh, mod_c2s, mod_component, mod_pep, mod_presence, mod_roster, mod_s2s: Import core_post_stanza from the global prosody table.
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
23 local core_process_stanza = prosody.core_process_stanza; |
5370
7838acadb0fa
mod_announce, mod_auth_anonymous, mod_c2s, mod_c2s, mod_component, mod_iq, mod_message, mod_presence, mod_tls: Access prosody.{hosts,bare_sessions,full_sessions} instead of the old globals
Kim Alvefur <zash@zash.se>
parents:
5316
diff
changeset
|
24 local hosts = prosody.hosts; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
25 |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local log = module._log; |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
28 local sessions = module:shared("sessions"); |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
29 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
30 function module.add_host(module) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
31 if module:get_host_type() ~= "component" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
32 error("Don't load mod_component manually, it should be for a component, please see http://prosody.im/doc/components", 0); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
33 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
34 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
35 local env = module.environment; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
36 env.connected = false; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
37 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
38 local send; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
39 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
40 local function on_destroy(session, err) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
41 env.connected = false; |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
42 send = nil; |
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
43 session.on_destroy = nil; |
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
44 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
45 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
46 -- Handle authentication attempts by component |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
47 local function handle_component_auth(event) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
48 local session, stanza = event.origin, event.stanza; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
49 |
4806
27a99c289b90
mod_component: Allow unauthenticated components to authenticate (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents:
4805
diff
changeset
|
50 if session.type ~= "component_unauthed" then return; end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
51 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
52 if (not session.host) or #stanza.tags > 0 then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
53 (session.log or log)("warn", "Invalid component handshake for host: %s", session.host); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
54 session:close("not-authorized"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
55 return true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
56 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
57 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
58 local secret = module:get_option("component_secret"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
59 if not secret then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
60 (session.log or log)("warn", "Component attempted to identify as %s, but component_secret is not set", session.host); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
61 session:close("not-authorized"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
62 return true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
63 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
64 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
65 local supplied_token = t_concat(stanza); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
66 local calculated_token = sha1(session.streamid..secret, true); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
67 if supplied_token:lower() ~= calculated_token:lower() then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
68 module:log("info", "Component authentication failed for %s", session.host); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
69 session:close{ condition = "not-authorized", text = "Given token does not match calculated token" }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
70 return true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
71 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
72 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
73 if env.connected then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
74 module:log("error", "Second component attempted to connect, denying connection"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
75 session:close{ condition = "conflict", text = "Component already connected" }; |
4734
4d43dbd6de17
mod_component: Return true after denying a second component connection for a host (thanks xnyhps)
Matthew Wild <mwild1@gmail.com>
parents:
4655
diff
changeset
|
76 return true; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
77 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
78 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
79 env.connected = true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
80 send = session.send; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
81 session.on_destroy = on_destroy; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
82 session.component_validate_from = module:get_option_boolean("validate_from_addresses", true); |
4805
1aeece2cc814
mod_component: Components start out as component_unauthed until successful authentication (thanks xnyhps)
Matthew Wild <mwild1@gmail.com>
parents:
4803
diff
changeset
|
83 session.type = "component"; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
84 module:log("info", "External component successfully authenticated"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
85 session.send(st.stanza("handshake")); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
86 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
87 return true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
88 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
89 module:hook("stanza/jabber:component:accept:handshake", handle_component_auth); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
90 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
91 -- Handle stanzas addressed to this component |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
92 local function handle_stanza(event) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
93 local stanza = event.stanza; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
94 if send then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
95 stanza.attr.xmlns = nil; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
96 send(stanza); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
97 else |
5059
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
98 if stanza.name == "iq" and stanza.attr.type == "get" and stanza.attr.to == module.host then |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
99 local query = stanza.tags[1]; |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
100 local node = query.attr.node; |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
101 if query.name == "query" and query.attr.xmlns == "http://jabber.org/protocol/disco#info" and (not node or node == "") then |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
102 local name = module:get_option_string("name"); |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
103 if name then |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
104 event.origin.send(st.reply(stanza):tag("query", { xmlns = "http://jabber.org/protocol/disco#info" }) |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
105 :tag("identity", { category = "component", type = "generic", name = module:get_option_string("name", "Prosody") })) |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
106 return true; |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
107 end |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
108 end |
246ba539a5cd
mod_component: For disconnected external components, if a name is specified in config, return it in disco#info replies.
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
109 end |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
110 module:log("warn", "Component not connected, bouncing error for: %s", stanza:top_tag()); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
111 if stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
112 event.origin.send(st.error_reply(stanza, "wait", "service-unavailable", "Component unavailable")); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
113 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
114 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
115 return true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
116 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
117 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
118 module:hook("iq/bare", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
119 module:hook("message/bare", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
120 module:hook("presence/bare", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
121 module:hook("iq/full", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
122 module:hook("message/full", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
123 module:hook("presence/full", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
124 module:hook("iq/host", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
125 module:hook("message/host", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
126 module:hook("presence/host", handle_stanza, -1); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
127 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
128 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
129 --- Network and stream part --- |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
130 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
131 local xmlns_component = 'jabber:component:accept'; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
132 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
133 local listener = {}; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
134 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
135 --- Callbacks/data for xmppstream to handle streams for us --- |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
136 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
137 local stream_callbacks = { default_ns = xmlns_component }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
138 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
139 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams"; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
140 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
141 function stream_callbacks.error(session, error, data, data2) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
142 if session.destroyed then return; end |
4993
5243b74a4cbb
Hopefully inert commit to clean up logging across a number of modules, removing all cases of concatenation when building log messages
Matthew Wild <mwild1@gmail.com>
parents:
4806
diff
changeset
|
143 module:log("warn", "Error processing component stream: %s", tostring(error)); |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
144 if error == "no-stream" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
145 session:close("invalid-namespace"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
146 elseif error == "parse-error" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
147 session.log("warn", "External component %s XML parse error: %s", tostring(session.host), tostring(data)); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
148 session:close("not-well-formed"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
149 elseif error == "stream-error" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
150 local condition, text = "undefined-condition"; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
151 for child in data:children() do |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
152 if child.attr.xmlns == xmlns_xmpp_streams then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
153 if child.name ~= "text" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
154 condition = child.name; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
155 else |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
156 text = child:get_text(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
157 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
158 if condition ~= "undefined-condition" and text then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
159 break; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
160 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
161 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
162 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
163 text = condition .. (text and (" ("..text..")") or ""); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
164 session.log("info", "Session closed by remote with error: %s", text); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
165 session:close(nil, text); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
166 end |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
167 end |
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
168 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
169 function stream_callbacks.streamopened(session, attr) |
4655
9159546cb2f3
mod_component: Handle component connecting to non-existent host
Matthew Wild <mwild1@gmail.com>
parents:
4650
diff
changeset
|
170 if not hosts[attr.to] or not hosts[attr.to].modules.component then |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
171 session:close{ condition = "host-unknown", text = tostring(attr.to).." does not match any configured external components" }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
172 return; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
173 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
174 session.host = attr.to; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
175 session.streamid = uuid_gen(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
176 session.notopen = nil; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
177 -- Return stream header |
4803
39ba097ec641
mod_component: Send <?xml on initial stream (thanks xnyhps)
Matthew Wild <mwild1@gmail.com>
parents:
4757
diff
changeset
|
178 session.send("<?xml version='1.0'?>"); |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
179 session.send(st.stanza("stream:stream", { xmlns=xmlns_component, |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
180 ["xmlns:stream"]='http://etherx.jabber.org/streams', id=session.streamid, from=session.host }):top_tag()); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
181 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
182 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
183 function stream_callbacks.streamclosed(session) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
184 session.log("debug", "Received </stream:stream>"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
185 session:close(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
186 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
187 |
5724
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
188 local function handleerr(err) log("error", "Traceback[component]: %s", traceback(tostring(err), 2)); end |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
189 function stream_callbacks.handlestanza(session, stanza) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
190 -- Namespaces are icky. |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
191 if not stanza.attr.xmlns and stanza.name == "handshake" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
192 stanza.attr.xmlns = xmlns_component; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
193 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
194 if not stanza.attr.xmlns or stanza.attr.xmlns == "jabber:client" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
195 local from = stanza.attr.from; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
196 if from then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
197 if session.component_validate_from then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
198 local _, domain = jid_split(stanza.attr.from); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
199 if domain ~= session.host then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
200 -- Return error |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
201 session.log("warn", "Component sent stanza with missing or invalid 'from' address"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
202 session:close{ |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
203 condition = "invalid-from"; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
204 text = "Component tried to send from address <"..tostring(from) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
205 .."> which is not in domain <"..tostring(session.host)..">"; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
206 }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
207 return; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
208 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
209 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
210 else |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
211 stanza.attr.from = session.host; -- COMPAT: Strictly we shouldn't allow this |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
212 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
213 if not stanza.attr.to then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
214 session.log("warn", "Rejecting stanza with no 'to' address"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
215 session.send(st.error_reply(stanza, "modify", "bad-request", "Components MUST specify a 'to' address on stanzas")); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
216 return; |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
217 end |
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
218 end |
5724
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
219 |
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
220 if stanza then |
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
221 return xpcall(function () return core_process_stanza(session, stanza) end, handleerr); |
a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
Matthew Wild <mwild1@gmail.com>
parents:
5370
diff
changeset
|
222 end |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
223 end |
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
224 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
225 --- Closing a component connection |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
226 local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'}; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
227 local default_stream_attr = { ["xmlns:stream"] = "http://etherx.jabber.org/streams", xmlns = stream_callbacks.default_ns, version = "1.0", id = "" }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
228 local function session_close(session, reason) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
229 if session.destroyed then return; end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
230 if session.conn then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
231 if session.notopen then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
232 session.send("<?xml version='1.0'?>"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
233 session.send(st.stanza("stream:stream", default_stream_attr):top_tag()); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
234 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
235 if reason then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
236 if type(reason) == "string" then -- assume stream error |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
237 module:log("info", "Disconnecting component, <stream:error> is: %s", reason); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
238 session.send(st.stanza("stream:error"):tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' })); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
239 elseif type(reason) == "table" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
240 if reason.condition then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
241 local stanza = st.stanza("stream:error"):tag(reason.condition, stream_xmlns_attr):up(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
242 if reason.text then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
243 stanza:tag("text", stream_xmlns_attr):text(reason.text):up(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
244 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
245 if reason.extra then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
246 stanza:add_child(reason.extra); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
247 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
248 module:log("info", "Disconnecting component, <stream:error> is: %s", tostring(stanza)); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
249 session.send(stanza); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
250 elseif reason.name then -- a stanza |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
251 module:log("info", "Disconnecting component, <stream:error> is: %s", tostring(reason)); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
252 session.send(reason); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
253 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
254 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
255 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
256 session.send("</stream:stream>"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
257 session.conn:close(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
258 listener.ondisconnect(session.conn, "stream error"); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
259 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
260 end |
3581
3f3f8227ba76
mod_component: Updated to use events for hooking stanzas instead of the component stanza handler, and the on_destroy callback.
Waqas Hussain <waqas20@gmail.com>
parents:
3579
diff
changeset
|
261 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
262 --- Component connlistener |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
263 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
264 function listener.onconnect(conn) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
265 local _send = conn.write; |
4805
1aeece2cc814
mod_component: Components start out as component_unauthed until successful authentication (thanks xnyhps)
Matthew Wild <mwild1@gmail.com>
parents:
4803
diff
changeset
|
266 local session = { type = "component_unauthed", conn = conn, send = function (data) return _send(conn, tostring(data)); end }; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
267 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
268 -- Logging functions -- |
5306
10bc0e2aa55e
s2smanager: Generate session names used for logging the same way everywhere
Kim Alvefur <zash@zash.se>
parents:
5298
diff
changeset
|
269 local conn_name = "jcp"..tostring(session):match("[a-f0-9]+$"); |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
270 session.log = logger.init(conn_name); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
271 session.close = session_close; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
272 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
273 session.log("info", "Incoming Jabber component connection"); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
274 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
275 local stream = new_xmpp_stream(session, stream_callbacks); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
276 session.stream = stream; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
277 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
278 session.notopen = true; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
279 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
280 function session.reset_stream() |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
281 session.notopen = true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
282 session.stream:reset(); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
283 end |
3531
f41e1cfe92f4
mod_component: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3503
diff
changeset
|
284 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
285 function session.data(conn, data) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
286 local ok, err = stream:feed(data); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
287 if ok then return; end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
288 module:log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_")); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
289 session:close("not-well-formed"); |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5728
diff
changeset
|
291 |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
292 session.dispatch_stanza = stream_callbacks.handlestanza; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
293 |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
294 sessions[conn] = session; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
295 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
296 function listener.onincoming(conn, data) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
297 local session = sessions[conn]; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
298 session.data(conn, data); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
299 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
300 function listener.ondisconnect(conn, err) |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
301 local session = sessions[conn]; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
302 if session then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
303 (session.log or log)("info", "component disconnected: %s (%s)", tostring(session.host), tostring(err)); |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
304 if session.on_destroy then session:on_destroy(err); end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
305 sessions[conn] = nil; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
306 for k in pairs(session) do |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
307 if k ~= "log" and k ~= "close" then |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
308 session[k] = nil; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
309 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
310 end |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
311 session.destroyed = true; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
312 session = nil; |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
313 end |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
314 end |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
315 |
5120
bcabea740c00
mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents:
5059
diff
changeset
|
316 module:provides("net", { |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
317 name = "component"; |
5298
6d34ed9fce69
mod_component: Make listener private (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
5120
diff
changeset
|
318 private = true; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
319 listener = listener; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
320 default_port = 5347; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
321 multiplex = { |
5316
310c7e5bb906
mod_component: Look for the correct xmlns (thanks NebuK)
Kim Alvefur <zash@zash.se>
parents:
5306
diff
changeset
|
322 pattern = "^<.*:stream.*%sxmlns%s*=%s*(['\"])jabber:component:accept%1.*>"; |
4650
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
323 }; |
464ca74ddf6a
mod_component: Make a shared module, and move the xmppcomponent_listener into it ('port'ing over to portmanager). Ha ha.
Matthew Wild <mwild1@gmail.com>
parents:
4464
diff
changeset
|
324 }); |