Annotate

plugins/mod_carbons.lua @ 11821:a9ad287c3388

core.moduleapi: Filter out unrelated direct replies to module:send_iq This is primarily something that happens with an internal query to mod_mam, which calls origin.send() several times with results, leading to the first such result being treated as the final response and resolving the promise. Now, these responses pass trough to the underlying origin.send(), where they can be caught. Tricky but not impossible. For remote queries, it's even trickier, you would likely need to bind a resource or similar.
author Kim Alvefur <zash@zash.se>
date Fri, 24 Sep 2021 20:12:16 +0200
parent 11796:71c20650a0b4
child 11836:8ccb22c0fa56
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- XEP-0280: Message Carbons implementation for Prosody
7670
2be85cb3bc66 mod_carbons: Make the conditions for ignoring MUC PMs more specific (fixes #744)
Kim Alvefur <zash@zash.se>
parents: 6841
diff changeset
2 -- Copyright (C) 2011-2016 Kim Alvefur
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 --
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 -- This file is MIT/X11 licensed.
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local st = require "util.stanza";
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local jid_bare = require "util.jid".bare;
10802
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
8 local jid_resource = require "util.jid".resource;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local xmlns_carbons = "urn:xmpp:carbons:2";
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local xmlns_forward = "urn:xmpp:forward:0";
6804
9f40ae38f0de mod_carbons: Get full_ and bare_sessions from the prosody global [luacheck]
Kim Alvefur <zash@zash.se>
parents: 6803
diff changeset
11 local full_sessions, bare_sessions = prosody.full_sessions, prosody.bare_sessions;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
10802
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
13 local function is_bare(jid)
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
14 return not jid_resource(jid);
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
15 end
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
16
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 local function toggle_carbons(event)
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local origin, stanza = event.origin, event.stanza;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 local state = stanza.tags[1].name;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 module:log("debug", "%s %sd carbons", origin.full_jid, state);
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 origin.want_carbons = state == "enable" and stanza.tags[1].attr.xmlns;
6841
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6804
diff changeset
22 origin.send(st.reply(stanza));
be87ab2d611c plugins: Explicitly return to halt event propagation (session.send sometimes does not return true)
Kim Alvefur <zash@zash.se>
parents: 6804
diff changeset
23 return true;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 module:hook("iq-set/self/"..xmlns_carbons..":disable", toggle_carbons);
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 module:hook("iq-set/self/"..xmlns_carbons..":enable", toggle_carbons);
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
10818
04a0aa6d7e72 mod_carbons: Describe return types in a comment
Kim Alvefur <zash@zash.se>
parents: 10802
diff changeset
28 local function should_copy(stanza, c2s, user_bare) --> boolean, reason: string
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
29 local st_type = stanza.attr.type or "normal";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
30 if stanza:get_child("private", xmlns_carbons) then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
31 return false, "private";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
32 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
33
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
34 if stanza:get_child("no-copy", "urn:xmpp:hints") then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
35 return false, "hint";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
36 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
37
10780
22bbc644c5eb mod_carbons: Fix syntax error [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10779
diff changeset
38 if not c2s and stanza.attr.to ~= user_bare and stanza:get_child("x", "http://jabber.org/protocol/muc#user") then
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
39 -- MUC PMs are normally sent to full JIDs
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
40 return false, "muc-pm";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
41 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
42
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
43 if st_type == "chat" then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
44 return true, "type";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
45 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
46
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
47 if st_type == "normal" and stanza:get_child("body") then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
48 return true, "type";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
49 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
50
10802
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
51 -- Normal outgoing chat messages are sent to=bare JID. This clause should
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
52 -- match the error bounces from those, which would have from=bare JID and
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
53 -- be incoming (not c2s).
c11f9cd6c761 mod_carbons: Clarify handling of error bounces
Kim Alvefur <zash@zash.se>
parents: 10786
diff changeset
54 if st_type == "error" and not c2s and is_bare(stanza.attr.from) then
10781
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
55 return true, "bounce";
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
56 end
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
57
10820
e0a09d3af563 mod_carbons: Explicitly carbon XEP-0353: Jingle Message Initiation
Kim Alvefur <zash@zash.se>
parents: 10818
diff changeset
58 if stanza:get_child(nil, "urn:xmpp:jingle-message:0") then
11260
08b397c21805 mod_csi_simple,mod_carbons,mod_mam: Update comment about XEP-0353
Kim Alvefur <zash@zash.se>
parents: 10820
diff changeset
59 -- XXX Experimental XEP
10820
e0a09d3af563 mod_carbons: Explicitly carbon XEP-0353: Jingle Message Initiation
Kim Alvefur <zash@zash.se>
parents: 10818
diff changeset
60 return true, "jingle call";
e0a09d3af563 mod_carbons: Explicitly carbon XEP-0353: Jingle Message Initiation
Kim Alvefur <zash@zash.se>
parents: 10818
diff changeset
61 end
e0a09d3af563 mod_carbons: Explicitly carbon XEP-0353: Jingle Message Initiation
Kim Alvefur <zash@zash.se>
parents: 10818
diff changeset
62
11796
71c20650a0b4 mod_carbons: Reduce line count using new util.stanza attr method
Kim Alvefur <zash@zash.se>
parents: 11260
diff changeset
63 if stanza:get_child_with_attr("stanza-id", "urn:xmpp:sid:0", "by", user_bare) then
71c20650a0b4 mod_carbons: Reduce line count using new util.stanza attr method
Kim Alvefur <zash@zash.se>
parents: 11260
diff changeset
64 return true, "archived";
10782
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
65 end
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
66
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
67 return false, "default";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
68 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
69
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 local function message_handler(event, c2s)
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 local origin, stanza = event.origin, event.stanza;
6803
7ed87299dbf9 mod_carbons: Carbon chat messages or normal messages that have a body
Kim Alvefur <zash@zash.se>
parents: 6546
diff changeset
72 local orig_type = stanza.attr.type or "normal";
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 local orig_from = stanza.attr.from;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
74 local bare_from = jid_bare(orig_from);
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 local orig_to = stanza.attr.to;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
76 local bare_to = jid_bare(orig_to);
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
77
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 -- Stanza sent by a local client
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
79 local bare_jid = bare_from; -- JID of the local user
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 local target_session = origin;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81 local top_priority = false;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
82 local user_sessions = bare_sessions[bare_from];
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 -- Stanza about to be delivered to a local client
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 if not c2s then
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
86 bare_jid = bare_to;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 target_session = full_sessions[orig_to];
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 user_sessions = bare_sessions[bare_jid];
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 if not target_session and user_sessions then
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 -- The top resources will already receive this message per normal routing rules,
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 -- so we are going to skip them in order to avoid sending duplicated messages.
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 local top_resources = user_sessions.top_resources;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 top_priority = top_resources and top_resources[1].priority
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 if not user_sessions then
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 module:log("debug", "Skip carbons for offline user");
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 return -- No use in sending carbons to an offline user
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
102 local should, why = should_copy(stanza, c2s, bare_jid);
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
103
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
104 if not should then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
105 module:log("debug", "Not copying stanza: %s (%s)", stanza:top_tag(), why);
10786
a1b633ba9bd9 mod_carbons: Check for and strip 'private' tag before stopping
Kim Alvefur <zash@zash.se>
parents: 10785
diff changeset
106 if why == "private" and not c2s then
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 stanza:maptags(function(tag)
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 if not ( tag.attr.xmlns == xmlns_carbons and tag.name == "private" ) then
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 return tag;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 end);
10786
a1b633ba9bd9 mod_carbons: Check for and strip 'private' tag before stopping
Kim Alvefur <zash@zash.se>
parents: 10785
diff changeset
112 end
a1b633ba9bd9 mod_carbons: Check for and strip 'private' tag before stopping
Kim Alvefur <zash@zash.se>
parents: 10785
diff changeset
113 return;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115
10469
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
116 local carbon;
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 user_sessions = user_sessions and user_sessions.sessions;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 for _, session in pairs(user_sessions) do
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119 -- Carbons are sent to resources that have enabled it
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 if session.want_carbons
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 -- but not the resource that sent the message, or the one that it's directed to
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 and session ~= target_session
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 -- and isn't among the top resources that would receive the message per standard routing rules
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 and (c2s or session.priority ~= top_priority) then
10469
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
125 if not carbon then
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
126 -- Create the carbon copy and wrap it as per the Stanza Forwarding XEP
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
127 local copy = st.clone(stanza);
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
128 if c2s and not orig_to then
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
129 stanza.attr.to = bare_from;
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
130 end
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
131 copy.attr.xmlns = "jabber:client";
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
132 carbon = st.message{ from = bare_jid, type = orig_type, }
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
133 :tag(c2s and "sent" or "received", { xmlns = xmlns_carbons })
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
134 :tag("forwarded", { xmlns = xmlns_forward })
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
135 :add_child(copy):reset();
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
136
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
137 end
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
138
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 carbon.attr.to = session.full_jid;
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 module:log("debug", "Sending carbon to %s", session.full_jid);
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 session.send(carbon);
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 local function c2s_message_handler(event)
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 return message_handler(event, true)
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148 end
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 -- Stanzas sent by local clients
7718
c58075c4d375 mod_message, mod_carbons: Adjust event hook priorities to negative (core modules should do this to make overriding from other modules easier)
Kim Alvefur <zash@zash.se>
parents: 7698
diff changeset
151 module:hook("pre-message/host", c2s_message_handler, -0.5);
c58075c4d375 mod_message, mod_carbons: Adjust event hook priorities to negative (core modules should do this to make overriding from other modules easier)
Kim Alvefur <zash@zash.se>
parents: 7698
diff changeset
152 module:hook("pre-message/bare", c2s_message_handler, -0.5);
c58075c4d375 mod_message, mod_carbons: Adjust event hook priorities to negative (core modules should do this to make overriding from other modules easier)
Kim Alvefur <zash@zash.se>
parents: 7698
diff changeset
153 module:hook("pre-message/full", c2s_message_handler, -0.5);
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 -- Stanzas to local clients
7718
c58075c4d375 mod_message, mod_carbons: Adjust event hook priorities to negative (core modules should do this to make overriding from other modules easier)
Kim Alvefur <zash@zash.se>
parents: 7698
diff changeset
155 module:hook("message/bare", message_handler, -0.5);
c58075c4d375 mod_message, mod_carbons: Adjust event hook priorities to negative (core modules should do this to make overriding from other modules easier)
Kim Alvefur <zash@zash.se>
parents: 7698
diff changeset
156 module:hook("message/full", message_handler, -0.5);
6546
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157
3426e903c48d mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 module:add_feature(xmlns_carbons);