Annotate

plugins/mod_c2s.lua @ 8657:a804f2e75f10

MUC: Prevent room eviction on storage failure
author Kim Alvefur <zash@zash.se>
date Wed, 07 Mar 2018 17:38:01 +0100
parent 8390:4c629fde768c
child 8764:81d305bbe7bc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
4 --
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 module:set_global();
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10
4548
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
11 local add_task = require "util.timer".add_task;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 local new_xmpp_stream = require "util.xmppstream".new;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 local nameprep = require "util.encodings".stringprep.nameprep;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local sessionmanager = require "core.sessionmanager";
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local st = require "util.stanza";
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 local sm_new_session, sm_destroy_session = sessionmanager.new_session, sessionmanager.destroy_session;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 local uuid_generate = require "util.uuid".generate;
7286
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
18 local runner = require "util.async".runner;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19
8044
e38e3300b955 mod_c2s: Remove unused locals [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7957
diff changeset
20 local tostring, type = tostring, type;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams";
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 local log = module._log;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25
8388
9ee56e9ad47a mod_c2s: Set a default value for c2s_timeout (fixes #1036)
Kim Alvefur <zash@zash.se>
parents: 8234
diff changeset
26 local c2s_timeout = module:get_option_number("c2s_timeout", 300);
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
27 local stream_close_timeout = module:get_option_number("c2s_close_timeout", 5);
5757
b5ba004beb0a mod_c2s: Change default of tcp_keepalives to true, and make it individually configurable through c2s_tcp_keepalives
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
28 local opt_keepalives = module:get_option_boolean("c2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true));
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29
7662
946871f6e3c8 mod_c2s, mod_s2s: Switch connection counting to 'amount' type and enumerate once per statistics interval
Kim Alvefur <zash@zash.se>
parents: 7540
diff changeset
30 local measure_connections = module:measure("connections", "amount");
6630
6735e2d735d6 mod_c2s, mod_s2s: Collect statistics on number of connections
Kim Alvefur <zash@zash.se>
parents: 6382
diff changeset
31
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 local sessions = module:shared("sessions");
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: 4996
diff changeset
33 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: 5281
diff changeset
34 local hosts = prosody.hosts;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35
5773
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
36 local stream_callbacks = { default_ns = "jabber:client" };
4625
325965bafae1 mod_c2s, mod_s2s: Drop default_port and default_mode from listener objects (default_port is deprecated, and default_mode already defaults to *a)
Matthew Wild <mwild1@gmail.com>
parents: 4620
diff changeset
37 local listener = {};
7286
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
38 local runner_callbacks = {};
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39
7662
946871f6e3c8 mod_c2s, mod_s2s: Switch connection counting to 'amount' type and enumerate once per statistics interval
Kim Alvefur <zash@zash.se>
parents: 7540
diff changeset
40 module:hook("stats-update", function ()
7466
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
41 local count = 0;
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
42 for _ in pairs(sessions) do
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
43 count = count + 1;
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
44 end
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
45 measure_connections(count);
7662
946871f6e3c8 mod_c2s, mod_s2s: Switch connection counting to 'amount' type and enumerate once per statistics interval
Kim Alvefur <zash@zash.se>
parents: 7540
diff changeset
46 end);
7466
f28fa742def3 mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents: 7329
diff changeset
47
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 --- Stream events handlers
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'};
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 function stream_callbacks.streamopened(session, attr)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 local send = session.send;
4551
8f25f3b1c62f mod_c2s: Code reduction
Matthew Wild <mwild1@gmail.com>
parents: 4548
diff changeset
53 session.host = nameprep(attr.to);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 if not session.host then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 session:close{ condition = "improper-addressing",
4551
8f25f3b1c62f mod_c2s: Code reduction
Matthew Wild <mwild1@gmail.com>
parents: 4548
diff changeset
56 text = "A valid 'to' attribute is required on stream headers" };
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 return;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 session.version = tonumber(attr.version) or 0;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60 session.streamid = uuid_generate();
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 (session.log or session)("debug", "Client sent opening <stream:stream> to %s", session.host);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62
5668
5a9318ac92f6 mod_c2s: Become a shared module and allow being disabled on some virtualhosts
Kim Alvefur <zash@zash.se>
parents: 5638
diff changeset
63 if not hosts[session.host] or not hosts[session.host].modules.c2s then
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 -- We don't serve this host...
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 session:close{ condition = "host-unknown", text = "This server does not serve "..tostring(session.host)};
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 return;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68
6005
98b768a41c9d mod_c2s: Break out stream opening into a separate function
Florian Zeitz <florob@babelmonkeys.de>
parents: 5859
diff changeset
69 session:open_stream();
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 (session.log or log)("debug", "Sent reply <stream:stream> to client");
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 session.notopen = nil;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 -- If session.secure is *false* (not nil) then it means we /were/ encrypting
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 -- since we now have a new stream header, session is secured
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 if session.secure == false then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 session.secure = true;
5859
e327f2d4e09f mod_c2s, mod_s2s: Set session.encrypted as session.secure does not allways mean encrypted (eg consider_bosh_secure)
Kim Alvefur <zash@zash.se>
parents: 5802
diff changeset
78 session.encrypted = true;
5228
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
79
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
80 local sock = session.conn:socket();
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
81 if sock.info then
5764
969e0a054795 mod_c2s, mod_s2s: Log a message that stream encryption has been enabled with some details
Kim Alvefur <zash@zash.se>
parents: 5759
diff changeset
82 local info = sock:info();
5801
224644752bf4 mod_c2s, mod_s2s: Log cipher and encryption info in a more compact and (hopefully) less confusing way
Kim Alvefur <zash@zash.se>
parents: 5789
diff changeset
83 (session.log or log)("info", "Stream encrypted (%s with %s)", info.protocol, info.cipher);
5764
969e0a054795 mod_c2s, mod_s2s: Log a message that stream encryption has been enabled with some details
Kim Alvefur <zash@zash.se>
parents: 5759
diff changeset
84 session.compressed = info.compression;
969e0a054795 mod_c2s, mod_s2s: Log a message that stream encryption has been enabled with some details
Kim Alvefur <zash@zash.se>
parents: 5759
diff changeset
85 else
969e0a054795 mod_c2s, mod_s2s: Log a message that stream encryption has been enabled with some details
Kim Alvefur <zash@zash.se>
parents: 5759
diff changeset
86 (session.log or log)("info", "Stream encrypted");
969e0a054795 mod_c2s, mod_s2s: Log a message that stream encryption has been enabled with some details
Kim Alvefur <zash@zash.se>
parents: 5759
diff changeset
87 session.compressed = sock.compression and sock:compression(); --COMPAT mw/luasec-hg
5228
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
88 end
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 local features = st.stanza("stream:features");
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 hosts[session.host].events.fire_event("stream-features", { origin = session, features = features });
6846
7eb166fa1f26 mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents: 6630
diff changeset
93 if features.tags[1] or session.full_jid then
7eb166fa1f26 mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents: 6630
diff changeset
94 send(features);
7eb166fa1f26 mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents: 6630
diff changeset
95 else
7862
f5cbbf69cac8 mod_c2s: Clarify that there were no *stream* features to offer
Kim Alvefur <zash@zash.se>
parents: 7662
diff changeset
96 (session.log or log)("warn", "No stream features to offer");
f5cbbf69cac8 mod_c2s: Clarify that there were no *stream* features to offer
Kim Alvefur <zash@zash.se>
parents: 7662
diff changeset
97 session:close{ condition = "undefined-condition", text = "No stream features to proceed with" };
6846
7eb166fa1f26 mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents: 6630
diff changeset
98 end
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 function stream_callbacks.streamclosed(session)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 session.log("debug", "Received </stream:stream>");
4986
9da430b69f13 mod_c2s: Change 'reason' parameter of session:close() to take nil to mean 'graceful close initiated by us' and false for 'graceful close initiated by client'
Matthew Wild <mwild1@gmail.com>
parents: 4964
diff changeset
103 session:close(false);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 function stream_callbacks.error(session, error, data)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 if error == "no-stream" then
6364
4e93e8768c36 mod_c2s, mod_s2s: Log received invalid stream headers
Matthew Wild <mwild1@gmail.com>
parents: 6279
diff changeset
108 session.log("debug", "Invalid opening stream header (%s)", (data:gsub("^([^\1]+)\1", "{%1}")));
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 session:close("invalid-namespace");
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 elseif error == "parse-error" then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 (session.log or log)("debug", "Client XML parse error: %s", tostring(data));
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 session:close("not-well-formed");
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 elseif error == "stream-error" then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 local condition, text = "undefined-condition";
8232
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
115 for child in data:childtags(nil, xmlns_xmpp_streams) do
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
116 if child.name ~= "text" then
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
117 condition = child.name;
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
118 else
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
119 text = child:get_text();
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
120 end
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
121 if condition ~= "undefined-condition" and text then
176b7f4e4ac9 mod_c2s: Iterate over child tags instead of child nodes in stream error (fixes traceback from #987)
Kim Alvefur <zash@zash.se>
parents: 7328
diff changeset
122 break;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125 text = condition .. (text and (" ("..text..")") or "");
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 session.log("info", "Session closed by remote with error: %s", text);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 session:close(nil, text);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 function stream_callbacks.handlestanza(session, stanza)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 stanza = session.filter("stanzas/in", stanza);
7286
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
133 session.thread:run(stanza);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 --- Session methods
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 local function session_close(session, reason)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 local log = session.log or log;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
139 if session.conn then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
140 if session.notopen then
6005
98b768a41c9d mod_c2s: Break out stream opening into a separate function
Florian Zeitz <florob@babelmonkeys.de>
parents: 5859
diff changeset
141 session:open_stream();
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
142 end
4986
9da430b69f13 mod_c2s: Change 'reason' parameter of session:close() to take nil to mean 'graceful close initiated by us' and false for 'graceful close initiated by client'
Matthew Wild <mwild1@gmail.com>
parents: 4964
diff changeset
143 if reason then -- nil == no err, initiated by us, false == initiated by client
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
144 local stream_error = st.stanza("stream:error");
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
145 if type(reason) == "string" then -- assume stream error
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
146 stream_error:tag(reason, {xmlns = 'urn:ietf:params:xml:ns:xmpp-streams' });
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
147 elseif type(reason) == "table" then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
148 if reason.condition then
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
149 stream_error:tag(reason.condition, stream_xmlns_attr):up();
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
150 if reason.text then
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
151 stream_error:tag("text", stream_xmlns_attr):text(reason.text):up();
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
152 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
153 if reason.extra then
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
154 stream_error:add_child(reason.extra);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
155 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 elseif reason.name then -- a stanza
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
157 stream_error = reason;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 end
5518
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
160 stream_error = tostring(stream_error);
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
161 log("debug", "Disconnecting client, <stream:error> is: %s", stream_error);
0220093e34fa mod_c2s: Refactor <stream:error> building to allways tostring() it and only call send once
Kim Alvefur <zash@zash.se>
parents: 5505
diff changeset
162 session.send(stream_error);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
164
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 session.send("</stream:stream>");
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
166 function session.send() return false; end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
167
7954
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
168 local reason_text = (reason and (reason.name or reason.text or reason.condition)) or reason;
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
169 session.log("debug", "c2s stream for %s closed: %s", session.full_jid or ("<"..session.ip..">"), reason_text or "session closed");
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
170
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
171 -- Authenticated incoming stream may still be sending us stanzas, so wait for </stream:stream> from remote
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
172 local conn = session.conn;
7954
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
173 if reason_text == nil and not session.notopen and session.type == "c2s" then
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
174 -- Grace time to process data from authenticated cleanly-closed stream
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
175 add_task(stream_close_timeout, function ()
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
176 if not session.destroyed then
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
177 session.log("warn", "Failed to receive a stream close response, closing connection anyway...");
7954
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
178 sm_destroy_session(session, reason_text);
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
179 conn:close();
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
180 end
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
181 end);
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
182 else
7954
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
183 sm_destroy_session(session, reason_text);
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
184 conn:close();
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
185 end
7328
de76ded98b84 mod_c2s: Just destroy the session when it has no connection (see #641)
Kim Alvefur <zash@zash.se>
parents: 7221
diff changeset
186 else
7954
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
187 local reason_text = (reason and (reason.name or reason.text or reason.condition)) or reason;
60b83f83f317 mod_c2s: Rename variable no avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7866
diff changeset
188 sm_destroy_session(session, reason_text);
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
191
5097
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
192 module:hook_global("user-deleted", function(event)
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
193 local username, host = event.username, event.host;
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
194 local user = hosts[host].sessions[username];
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
195 if user and user.sessions then
7955
bba71bfe2154 mod_c2s: Rename unused loop variable to _ [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7954
diff changeset
196 for _, session in pairs(user.sessions) do
5097
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
197 session:close{ condition = "not-authorized", text = "Account deleted" };
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
198 end
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
199 end
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
200 end, 200);
6c52a7a881cc mod_c2s: When a user gets deleted, drop all their sessions
Kim Alvefur <zash@zash.se>
parents: 5013
diff changeset
201
8192
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
202 module:hook_global("user-password-changed", function(event)
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
203 local username, host, resource = event.username, event.host, event.resource;
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
204 local user = hosts[host].sessions[username];
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
205 if user and user.sessions then
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
206 for r, session in pairs(user.sessions) do
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
207 if r ~= resource then
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
208 session:close{ condition = "reset", text = "Password changed" };
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
209 end
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
210 end
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
211 end
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
212 end, 200);
4354f556c5db core.usermanager, various modules: Disconnect other resources on password change (thanks waqas) (fixes #512)
Kim Alvefur <zash@zash.se>
parents: 7955
diff changeset
213
7286
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
214 function runner_callbacks:ready()
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
215 self.data.conn:resume();
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
216 end
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
217
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
218 function runner_callbacks:waiting()
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
219 self.data.conn:pause();
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
220 end
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
221
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
222 function runner_callbacks:error(err)
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
223 (self.data.log or log)("error", "Traceback[c2s]: %s", err);
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
224 end
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
225
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 --- Port listener
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
227 function listener.onconnect(conn)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
228 local session = sm_new_session(conn);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
229 sessions[conn] = session;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
230
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
231 session.log("info", "Client connected");
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
232
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233 -- Client is using legacy SSL (otherwise mod_tls sets this flag)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234 if conn:ssl() then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
235 session.secure = true;
5859
e327f2d4e09f mod_c2s, mod_s2s: Set session.encrypted as session.secure does not allways mean encrypted (eg consider_bosh_secure)
Kim Alvefur <zash@zash.se>
parents: 5802
diff changeset
236 session.encrypted = true;
5228
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
237
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
238 -- Check if TLS compression is used
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
239 local sock = conn:socket();
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
240 if sock.info then
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
241 session.compressed = sock:info"compression";
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
242 elseif sock.compression then
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
243 session.compressed = sock:compression(); --COMPAT mw/luasec-hg
edabb34417b7 mod_c2s: Check if TLS compression is used
Kim Alvefur <zash@zash.se>
parents: 5120
diff changeset
244 end
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
246
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247 if opt_keepalives then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
248 conn:setoption("keepalive", opt_keepalives);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
249 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
250
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
251 session.close = session_close;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
252
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
253 local stream = new_xmpp_stream(session, stream_callbacks);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254 session.stream = stream;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
255 session.notopen = true;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
256
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257 function session.reset_stream()
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
258 session.notopen = true;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
259 session.stream:reset();
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
260 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5773
diff changeset
261
7286
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
262 session.thread = runner(function (stanza)
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
263 core_process_stanza(session, stanza);
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
264 end, runner_callbacks, session);
30b9433a9f3e Merge 0.10->trunk
Kim Alvefur <zash@zash.se>
parents: 7284
diff changeset
265
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
266 local filter = session.filter;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267 function session.data(data)
5773
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
268 -- Parse the data, which will store stanzas in session.pending_stanzas
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
269 if data then
7539
366964dbddb1 mod_c2s: Fix whitespace (why does it keep getting messed up?)
Kim Alvefur <zash@zash.se>
parents: 7466
diff changeset
270 data = filter("bytes/in", data);
366964dbddb1 mod_c2s: Fix whitespace (why does it keep getting messed up?)
Kim Alvefur <zash@zash.se>
parents: 7466
diff changeset
271 if data then
366964dbddb1 mod_c2s: Fix whitespace (why does it keep getting messed up?)
Kim Alvefur <zash@zash.se>
parents: 7466
diff changeset
272 local ok, err = stream:feed(data);
5773
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
273 if not ok then
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
274 log("debug", "Received invalid XML (%s) %d bytes: %s", tostring(err), #data, data:sub(1, 300):gsub("[\r\n]+", " "):gsub("[%z\1-\31]", "_"));
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
275 session:close("not-well-formed");
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
276 end
c9a712673d8a mod_c2s: Add session:sleep() and session:wake() to pause a session (e.g. while waiting for an external event). Needs a gallon or two of testing.
Matthew Wild <mwild1@gmail.com>
parents: 5764
diff changeset
277 end
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
278 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
279 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
280
4548
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
281 if c2s_timeout then
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
282 add_task(c2s_timeout, function ()
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
283 if session.type == "c2s_unauthed" then
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
284 session:close("connection-timeout");
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
285 end
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
286 end);
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
287 end
e6e5c76ff009 sessionmanager, mod_c2s: Move timeout logic to mod_c2s
Matthew Wild <mwild1@gmail.com>
parents: 4543
diff changeset
288
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
289 session.dispatch_stanza = stream_callbacks.handlestanza;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
290 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
291
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
292 function listener.onincoming(conn, data)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 local session = sessions[conn];
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
294 if session then
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
295 session.data(data);
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
296 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
297 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
298
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
299 function listener.ondisconnect(conn, err)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 local session = sessions[conn];
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301 if session then
4964
c9b8ec3eb1e9 mod_c2s: Don't call ondisconnect manually on close, it is now called by net.server. Replace with inline code for destroying the session, and also waiting for a reply </stream:stream> if there is a chance of further data sent by the client. session.send() on a half-closed stream returns false (and does not deliver the data).
Matthew Wild <mwild1@gmail.com>
parents: 4852
diff changeset
302 (session.log or log)("info", "Client disconnected: %s", err or "connection closed");
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
303 sm_destroy_session(session, err);
7221
56e65b1e54e8 mod_c2s: Remove connection object from session object when connection disconnected to prevent accidental use (see #590)
Kim Alvefur <zash@zash.se>
parents: 7100
diff changeset
304 session.conn = nil;
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
305 sessions[conn] = nil;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
306 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
308
5638
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
309 function listener.onreadtimeout(conn)
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
310 local session = sessions[conn];
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
311 if session then
5669
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
312 return (hosts[session.host] or prosody).events.fire_event("c2s-read-timeout", { session = session });
5638
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
313 end
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
314 end
c5b7f4858014 mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents: 5571
diff changeset
315
5669
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
316 local function keepalive(event)
7540
e69df8093387 mod_c2s: Don't try to keep alive sessions where the stream is not (yet) open
Kim Alvefur <zash@zash.se>
parents: 7539
diff changeset
317 local session = event.session;
e69df8093387 mod_c2s: Don't try to keep alive sessions where the stream is not (yet) open
Kim Alvefur <zash@zash.se>
parents: 7539
diff changeset
318 if not session.notopen then
e69df8093387 mod_c2s: Don't try to keep alive sessions where the stream is not (yet) open
Kim Alvefur <zash@zash.se>
parents: 7539
diff changeset
319 return event.session.send(' ');
e69df8093387 mod_c2s: Don't try to keep alive sessions where the stream is not (yet) open
Kim Alvefur <zash@zash.se>
parents: 7539
diff changeset
320 end
5669
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
321 end
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
322
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
323 function listener.associate_session(conn, session)
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
324 sessions[conn] = session;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
325 end
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
326
5669
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
327 function module.add_host(module)
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
328 module:hook("c2s-read-timeout", keepalive, -1);
6380
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6364
diff changeset
329 end
4220ffb87b22 net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents: 6364
diff changeset
330
5669
9345c161481f mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents: 5668
diff changeset
331 module:hook("c2s-read-timeout", keepalive, -1);
5668
5a9318ac92f6 mod_c2s: Become a shared module and allow being disabled on some virtualhosts
Kim Alvefur <zash@zash.se>
parents: 5638
diff changeset
332
5281
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
333 module:hook("server-stopping", function(event)
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
334 local reason = event.reason;
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
335 for _, session in pairs(sessions) do
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
336 session:close{ condition = "system-shutdown", text = reason };
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
337 end
7100
301d58705667 mod_c2s, mod_s2s: Lower priority of session shutdown to negative, so that plugins hooking at the default priority run first (fixes #601)
Kim Alvefur <zash@zash.se>
parents: 6380
diff changeset
338 end, -100);
5281
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
339
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
340
815c689f85ad prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents: 5228
diff changeset
341
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: 5097
diff changeset
342 module:provides("net", {
4610
171051f9dd00 mod_c2s: Use module:add_item() to add the net-provider for portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4551
diff changeset
343 name = "c2s";
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
344 listener = listener;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
345 default_port = 5222;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346 encryption = "starttls";
4626
9df9e87d0339 mod_c2s: Add missing multiplexed service discovery pattern.
Kim Alvefur <zash@zash.se>
parents: 4625
diff changeset
347 multiplex = {
9df9e87d0339 mod_c2s: Add missing multiplexed service discovery pattern.
Kim Alvefur <zash@zash.se>
parents: 4625
diff changeset
348 pattern = "^<.*:stream.*%sxmlns%s*=%s*(['\"])jabber:client%1.*>";
9df9e87d0339 mod_c2s: Add missing multiplexed service discovery pattern.
Kim Alvefur <zash@zash.se>
parents: 4625
diff changeset
349 };
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
350 });
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
351
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: 5097
diff changeset
352 module:provides("net", {
4610
171051f9dd00 mod_c2s: Use module:add_item() to add the net-provider for portmanager
Matthew Wild <mwild1@gmail.com>
parents: 4551
diff changeset
353 name = "legacy_ssl";
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
354 listener = listener;
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
355 encryption = "ssl";
4620
e9dc6ae68c69 mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents: 4610
diff changeset
356 multiplex = {
e9dc6ae68c69 mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents: 4610
diff changeset
357 pattern = "^<.*:stream.*%sxmlns%s*=%s*(['\"])jabber:client%1.*>";
e9dc6ae68c69 mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents: 4610
diff changeset
358 };
4543
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
359 });
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
360
db27a4c18b6a mod_c2s, sessionmanager, xmppclient_listener: Move all c2s network and stream logic into a new module, mod_c2s
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
361