Software /
code /
prosody
Annotate
plugins/mod_carbons.lua @ 10813:4a9ff4f61796
mod_presence: Send unavailable presence in current thread run
`session:dispatch_stanza(pres)` enqueues processing of the stanza in the
sessions async thread, but becasue the entire stream close handling is
now in that thread it would process the presence after the stream and
session was completely closed, leading to weird errors "sent to a
resting session".
We call core_process_stanza() since this is what :dispatch_stanza calls
in the end.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 09 May 2020 00:28:10 +0200 |
parent | 10802:c11f9cd6c761 |
child | 10818:04a0aa6d7e72 |
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 |
10779
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
28 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
|
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 |
10782
6b776f80b96e
mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents:
10781
diff
changeset
|
58 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
|
59 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
|
60 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
|
61 end |
6b776f80b96e
mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents:
10781
diff
changeset
|
62 end |
6b776f80b96e
mod_carbons: Carbon anything that has been archived by the current user
Kim Alvefur <zash@zash.se>
parents:
10781
diff
changeset
|
63 |
10779
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
64 return false, "default"; |
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
65 end |
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
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 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
|
68 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
|
69 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
|
70 local orig_from = stanza.attr.from; |
7776
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
71 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
|
72 local orig_to = stanza.attr.to; |
7776
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
73 local bare_to = jid_bare(orig_to); |
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
74 |
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 -- Stanza sent by a local client |
7776
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
76 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
|
77 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
|
78 local top_priority = false; |
7776
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
79 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
|
80 |
3426e903c48d
mod_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 -- 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
|
82 if not c2s then |
7776
63f50a84318f
mod_carbons: Rename some variables for clarity
Kim Alvefur <zash@zash.se>
parents:
7718
diff
changeset
|
83 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
|
84 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
|
85 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
|
86 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
|
87 -- 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
|
88 -- 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
|
89 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
|
90 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
|
91 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
|
92 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
|
93 |
3426e903c48d
mod_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 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
|
95 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
|
96 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
|
97 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
|
98 |
10779
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
99 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
|
100 |
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
101 if not should then |
d95e083931d1
mod_carbons: Refactor in new style (mod_mam/csi)
Kim Alvefur <zash@zash.se>
parents:
10778
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 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
|
106 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
|
107 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
|
108 end); |
10786
a1b633ba9bd9
mod_carbons: Check for and strip 'private' tag before stopping
Kim Alvefur <zash@zash.se>
parents:
10785
diff
changeset
|
109 end |
a1b633ba9bd9
mod_carbons: Check for and strip 'private' tag before stopping
Kim Alvefur <zash@zash.se>
parents:
10785
diff
changeset
|
110 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
|
111 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
|
112 |
10469
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
113 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
|
114 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
|
115 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
|
116 -- 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
|
117 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
|
118 -- 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
|
119 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
|
120 -- 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
|
121 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
|
122 if not carbon then |
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
123 -- 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
|
124 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
|
125 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
|
126 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
|
127 end |
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
128 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
|
129 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
|
130 :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
|
131 :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
|
132 :add_child(copy):reset(); |
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
133 |
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
134 end |
658b759a1f7a
mod_carbons: Improve performance by delaying creation of carbon payload
Kim Alvefur <zash@zash.se>
parents:
8354
diff
changeset
|
135 |
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
|
136 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
|
137 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
|
138 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
|
139 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
|
140 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
|
141 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
|
142 |
3426e903c48d
mod_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 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
|
144 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
|
145 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
|
146 |
3426e903c48d
mod_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 -- 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
|
148 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
|
149 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
|
150 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
|
151 -- 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
|
152 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
|
153 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
|
154 |
3426e903c48d
mod_carbons: Import XEP-0280 implementation from prosody-modules (sans compat with older versions of the protocol)
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 module:add_feature(xmlns_carbons); |