Software /
code /
prosody-modules
Comparison
mod_carbons/mod_carbons.lua @ 832:9087431d35f6
mod_carbons: Add comments and rename some variables to make it clearer
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 18 Sep 2012 18:58:13 +0200 |
parent | 804:9927d88a1b2a |
child | 833:30d49c26d219 |
comparison
equal
deleted
inserted
replaced
831:0c3638673464 | 832:9087431d35f6 |
---|---|
49 module:log("debug", "Message was to resource %s, it will not get carbon", resource); | 49 module:log("debug", "Message was to resource %s, it will not get carbon", resource); |
50 no_carbon_to[resource] = true; | 50 no_carbon_to[resource] = true; |
51 elseif user_sessions then | 51 elseif user_sessions then |
52 local top_resources = user_sessions.top_resources; | 52 local top_resources = user_sessions.top_resources; |
53 if top_resources then | 53 if top_resources then |
54 for _, session in ipairs(top_resources) do | 54 -- These will already receive this message per normal routing rules, |
55 module:log("debug", "Not sending carbons to top resource %s", session.resource); | 55 -- so we skip them to avoid duplicated messages. |
56 no_carbon_to[session.resource] = true; | 56 for i=1,#top_resources do |
57 local resource = top_resources[i].resource; | |
58 module:log("debug", "Not sending carbons to top resource %s", resource); | |
59 no_carbon_to[resource] = true; | |
57 end | 60 end |
58 end | 61 end |
59 end | 62 end |
60 end | 63 end |
61 | 64 |
71 end); | 74 end); |
72 module:log("debug", "Message tagged private, ignoring"); | 75 module:log("debug", "Message tagged private, ignoring"); |
73 return | 76 return |
74 end | 77 end |
75 | 78 |
76 local msg = st.clone(stanza); | 79 -- Create the carbon copy and wrap it as per the Stanza Forwarding XEP |
77 msg.attr.xmlns = "jabber:client"; | 80 local copy = st.clone(stanza); |
78 local fwd = st.message{ from = bare_jid, type = orig_type, } | 81 copy.attr.xmlns = "jabber:client"; |
82 local carbon = st.message{ from = bare_jid, type = orig_type, } | |
79 :tag(c2s and "sent" or "received", { xmlns = xmlns_carbons }):up() | 83 :tag(c2s and "sent" or "received", { xmlns = xmlns_carbons }):up() |
80 :tag("forwarded", { xmlns = xmlns_forward }) | 84 :tag("forwarded", { xmlns = xmlns_forward }) |
81 :add_child(msg):reset(); | 85 :add_child(copy):reset(); |
82 | 86 |
87 -- And finally, send the carbon to the sessions that should have it. | |
83 user_sessions = user_sessions and user_sessions.sessions; | 88 user_sessions = user_sessions and user_sessions.sessions; |
84 for resource, session in pairs(user_sessions) do | 89 for resource, session in pairs(user_sessions) do |
85 local full_jid = bare_jid .. "/" .. resource; | 90 local full_jid = bare_jid .. "/" .. resource; |
86 if session.want_carbons and ((c2s and session ~= origin) or (not c2s and not no_carbon_to[resource])) then | 91 if session.want_carbons and ((c2s and session ~= origin) or (not c2s and not no_carbon_to[resource])) then |
87 fwd.attr.to = full_jid; | 92 carbon.attr.to = full_jid; |
88 module:log("debug", "Sending carbon to %s", full_jid); | 93 module:log("debug", "Sending carbon to %s", full_jid); |
89 session.send(fwd); | 94 session.send(carbon); |
90 end | 95 end |
91 end | 96 end |
92 end | 97 end |
93 | 98 |
94 local function c2s_message_handler(event) | 99 local function c2s_message_handler(event) |