Software /
code /
prosody
Annotate
plugins/mod_component.lua @ 5724:a49f32e3d73b
mod_component: xpcall() stanza processing, as per other listeners, preventing potentially harmful 'top-level errors'
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 08 Jul 2013 21:38:08 +0100 |
parent | 5370:7838acadb0fa |
child | 5728:2ecf400b194a |
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 |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 -- |
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; |
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
|
12 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
|
13 |
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
|
14 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
|
15 local sha1 = require "util.hashes".sha1; |
1042
a3d77353c18a
mod_*: Fix a load of global accesses
Matthew Wild <mwild1@gmail.com>
parents:
981
diff
changeset
|
16 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
|
17 |
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
|
18 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
|
19 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
|
20 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
|
21 |
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
|
22 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
|
23 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
|
24 |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 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
|
26 |
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
|
27 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
|
28 |
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
|
29 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
|
30 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
|
31 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
|
32 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
|
33 |
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
|
34 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
|
35 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
|
36 |
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 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
|
38 |
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 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
|
40 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
|
41 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
|
42 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
|
43 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
|
44 |
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
|
45 -- 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
|
46 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
|
47 local session, stanza = event.origin, 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
|
48 |
4806
27a99c289b90
mod_component: Allow unauthenticated components to authenticate (thanks Maranda)
Matthew Wild <mwild1@gmail.com>
parents:
4805
diff
changeset
|
49 if session.type ~= "component_unauthed" then return; 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
|
50 |
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
|
51 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
|
52 (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
|
53 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
|
54 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
|
55 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
|
56 |
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
|
57 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
|
58 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
|
59 (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
|
60 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
|
61 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
|
62 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
|
63 |
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
|
64 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
|
65 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 |
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
|
72 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
|
73 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
|
74 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
|
75 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
|
76 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
|
77 |
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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 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
|
84 session.send(st.stanza("handshake")); |
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 |
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
|
86 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
|
87 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
|
88 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
|
89 |
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 -- 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
|
91 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
|
92 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
|
93 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
|
94 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
|
95 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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 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
|
104 :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
|
105 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
|
106 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
|
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 |
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
|
109 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
|
110 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
|
111 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
|
112 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
|
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 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
|
115 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
|
116 |
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
|
117 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
|
118 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
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 |
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 --- 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
|
129 |
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 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
|
131 |
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 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
|
133 |
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 --- 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
|
135 |
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 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
|
137 |
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 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
|
139 |
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 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 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
|
156 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
|
157 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
|
158 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
|
159 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
|
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 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
|
163 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
|
164 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
|
165 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
|
166 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
|
167 |
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
|
168 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
|
169 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
|
170 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
|
171 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
|
172 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
|
173 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
|
174 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
|
175 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
|
176 -- Return stream header |
4803
39ba097ec641
mod_component: Send <?xml on initial stream (thanks xnyhps)
Matthew Wild <mwild1@gmail.com>
parents:
4757
diff
changeset
|
177 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
|
178 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
|
179 ["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
|
180 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
|
181 |
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 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
|
183 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
|
184 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
|
185 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
|
186 |
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
|
187 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
|
188 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
|
189 -- 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 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
|
198 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
|
199 -- 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
|
200 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
|
201 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
|
202 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
|
203 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
|
204 .."> 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
|
205 }; |
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 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
|
207 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
|
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 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
|
210 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
|
211 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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 |
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 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
|
220 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
|
221 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
|
222 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
|
223 |
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
|
224 --- 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 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
|
250 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
|
251 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
|
252 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
|
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 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
|
256 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
|
257 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
|
258 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
|
259 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
|
260 |
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
|
261 --- 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
|
262 |
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 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
|
264 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
|
265 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
|
266 |
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 -- Logging functions -- |
5306
10bc0e2aa55e
s2smanager: Generate session names used for logging the same way everywhere
Kim Alvefur <zash@zash.se>
parents:
5298
diff
changeset
|
268 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
|
269 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
|
270 session.close = 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
|
271 |
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
|
272 session.log("info", "Incoming Jabber component connection"); |
3531
f41e1cfe92f4
mod_component: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3503
diff
changeset
|
273 |
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
|
274 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
|
275 session.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
|
276 |
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
|
277 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
|
278 |
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
|
279 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
|
280 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
|
281 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
|
282 end |
3531
f41e1cfe92f4
mod_component: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3503
diff
changeset
|
283 |
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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 end |
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
290 |
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
|
291 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
|
292 |
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 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
|
294 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
|
295 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
|
296 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
|
297 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
|
298 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
|
299 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
|
300 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
|
301 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
|
302 (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
|
303 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 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
|
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 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
|
311 session = nil; |
902
00daf63c129e
Add initial mod_component for XEP-0114 support. Albert, where are you?
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
312 end |
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 |
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
|
315 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
|
316 name = "component"; |
5298
6d34ed9fce69
mod_component: Make listener private (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents:
5120
diff
changeset
|
317 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
|
318 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
|
319 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
|
320 multiplex = { |
5316
310c7e5bb906
mod_component: Look for the correct xmlns (thanks NebuK)
Kim Alvefur <zash@zash.se>
parents:
5306
diff
changeset
|
321 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
|
322 }; |
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 }); |