Annotate

plugins/mod_carbons.lua @ 10782:6b776f80b96e

mod_carbons: Carbon anything that has been archived by the current user This ensures rules in mod_mam apply to some extent. Messages worth archiving are probably worth sending to other clients.
author Kim Alvefur <zash@zash.se>
date Sun, 26 Apr 2020 20:24:51 +0200
parent 10781:f7e8d299513f
child 10785:e210afc9296a
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;
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
8 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
9 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
10 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
11
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 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
13 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
14 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
15 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
16 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
17 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
18 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
19 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
20 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
21 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
22
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
23 local function should_copy(stanza, c2s, user_bare)
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
24 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
25 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
26 return false, "private";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
27 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
28
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
29 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
30 return false, "hint";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
31 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
32
10780
22bbc644c5eb mod_carbons: Fix syntax error [luacheck]
Kim Alvefur <zash@zash.se>
parents: 10779
diff changeset
33 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
34 -- 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
35 return false, "muc-pm";
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
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
38 if st_type == "chat" then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
39 return true, "type";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
40 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
41
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
42 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
43 return true, "type";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
44 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
45
10781
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
46 if st_type == "error" and not c2s and not (stanza.attr.from or ""):find("/") then
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
47 return true, "bounce";
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
48 end
f7e8d299513f mod_carbons: Carbon incoming message delivery failure reports
Kim Alvefur <zash@zash.se>
parents: 10780
diff changeset
49
10782
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
50 for archived in stanza:childtags("stanza-id", "urn:xmpp:sid:0") do
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
51 if archived and archived.attr.by == user_bare then
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
52 return true, "archived";
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
53 end
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
54 end
6b776f80b96e mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents: 10781
diff changeset
55
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
56 return false, "default";
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
57 end
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
58
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
59 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
60 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
61 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
62 local orig_from = stanza.attr.from;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
63 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
64 local orig_to = stanza.attr.to;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
65 local bare_to = jid_bare(orig_to);
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
66
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
67 -- Stanza sent by a local client
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
68 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
69 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
70 local top_priority = false;
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
71 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
72
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 -- 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
74 if not c2s then
7776
63f50a84318f mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents: 7718
diff changeset
75 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
76 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
77 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
78 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
79 -- 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
80 -- 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
81 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
82 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
83 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
84 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
85
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
86 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
87 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
88 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
89 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
90
10779
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
91 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
92
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
93 if not should then
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
94 module:log("debug", "Not copying stanza: %s (%s)", stanza:top_tag(), why);
d95e083931d1 mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents: 10778
diff changeset
95 elseif 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
96 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
97 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
98 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
99 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
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 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
102
10469
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
103 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
104 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
105 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
106 -- 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
107 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
108 -- 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
109 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
110 -- 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
111 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
112 if not carbon then
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
113 -- 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
114 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
115 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
116 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
117 end
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
118 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
119 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
120 :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
121 :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
122 :add_child(copy):reset();
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
123
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
124 end
658b759a1f7a mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents: 8354
diff changeset
125
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
126 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
127 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
128 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
129 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
130 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
131 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
132
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
133 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
134 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
135 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
136
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
137 -- 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
138 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
139 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
140 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
141 -- 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
142 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
143 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
144
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 module:add_feature(xmlns_carbons);