Software /
code /
prosody
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 |
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); |