Annotate

plugins/mod_carbons.lua @ 11796:71c20650a0b4

mod_carbons: Reduce line count using new util.stanza attr method
author Kim Alvefur <zash@zash.se>
date Sun, 12 Sep 2021 20:18:04 +0200 (2021-09-12)
parent 11260:08b397c21805
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);