Annotate

mod_ping_muc/mod_ping_muc.lua @ 6325:6ea80b73d8f2

mod_http_oauth2: Only require redirect URIs when using grant types that need it In the Device flow, no redirect URI is used because the client instead receives responses by polling. It is therefore unnecessary to enforce a requirement that these include redirect URI(s).
author Kim Alvefur <zash@zash.se>
date Thu, 03 Jul 2025 15:42:42 +0200
parent 5979:d6a695abb33c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4804
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local id = require "util.id";
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local jid = require "util.jid";
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local set = require "util.set";
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local st = require "util.stanza";
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
5130
0772facc786f mod_ping_muc: Error out if loaded on Components
Kim Alvefur <zash@zash.se>
parents: 4887
diff changeset
6 if module:get_host_type() ~= "local" then
0772facc786f mod_ping_muc: Error out if loaded on Components
Kim Alvefur <zash@zash.se>
parents: 4887
diff changeset
7 module:log("error", "mod_%s must be loaded as a regular module, not on Components", module.name);
0772facc786f mod_ping_muc: Error out if loaded on Components
Kim Alvefur <zash@zash.se>
parents: 4887
diff changeset
8 return
0772facc786f mod_ping_muc: Error out if loaded on Components
Kim Alvefur <zash@zash.se>
parents: 4887
diff changeset
9 end
0772facc786f mod_ping_muc: Error out if loaded on Components
Kim Alvefur <zash@zash.se>
parents: 4887
diff changeset
10
4804
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 module:depends "track_muc_joins";
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 module:add_feature("https://modules.prosody.im/mod_" .. module.name);
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local local_sessions = prosody.hosts[module.host].sessions;
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 module:hook_global("s2s-destroyed", function(event)
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local s2s_session = event.session;
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 if s2s_session.direction == "outgoing" and s2s_session.from_host ~= module.host then
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 return
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 elseif s2s_session.direction == "incoming" and s2s_session.to_host ~= module.host then
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 return
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local related_hosts = set.new({ s2s_session.direction == "outgoing" and s2s_session.to_host or s2s_session.from_host });
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 if s2s_session.hosts then
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 -- While rarely used, multiplexing is still supported
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 for host, state in pairs(s2s_session.hosts) do if state.authed then related_hosts:add(host); end end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
5979
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
31 local ping_delay = module:get_option_number("ping_muc_delay", 60, 1);
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
32
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
33 module:add_timer(ping_delay, function ()
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
34 for _, user_session in pairs(local_sessions) do
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
35 for _, session in pairs(user_session.sessions) do
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
36 if session.rooms_joined then
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
37 for room, info in pairs(session.rooms_joined) do
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
38 local nick = info.nick or info;
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
39 local room_nick = room .. "/" .. nick;
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
40 if related_hosts:contains(jid.host(room)) then
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
41 -- User is in a MUC room for which the s2s connection was lost. Now what?
4804
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42
5979
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
43 -- Self-ping
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
44 -- =========
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
45 --
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
46 -- Response of <iq type=result> means the user is still in the room
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
47 -- (and self-ping is supported), so we do nothing.
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
48 --
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
49 -- An error reply either means the user has fallen out of the room,
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
50 -- or that self-ping is unsupported. In the later case, whether the
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
51 -- user is still joined is indeterminate and we might as well
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
52 -- pretend they fell out.
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
53 module:send_iq(st.iq({ type = "get"; id = id.medium(); from = session.full_jid; to = room_nick })
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
54 :tag("ping", { xmlns = "urn:xmpp:ping"; }))
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
55 :catch(function(err)
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
56 module:send(
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
57 st.presence({ type = "unavailable"; id = id.medium(); to = session.full_jid; from = room_nick })
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
58 :tag("x", { xmlns = "http://jabber.org/protocol/muc#user" })
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
59 :tag("item", { affiliation = "none"; role = "none" })
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
60 :text_tag("reason", err.text or "Connection to remote server lost")
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
61 :up()
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
62 :tag("status", { code = "110" }):up()
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
63 :tag("status", { code = "333" }):up()
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
64 :reset());
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
65 end);
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
66 end
4804
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 end
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 end
5979
d6a695abb33c mod_ping_muc: Delay ping a configurable amount of time
Kim Alvefur <zash@zash.se>
parents: 5130
diff changeset
71 end)
4804
a7c0c70e64b6 mod_ping_muc: Yet another attempt to improve MUC reliability
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 end);