Software /
code /
prosody-modules
Diff
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 |
line wrap: on
line diff
--- a/mod_carbons/mod_carbons.lua Tue Sep 18 00:31:42 2012 +0200 +++ b/mod_carbons/mod_carbons.lua Tue Sep 18 18:58:13 2012 +0200 @@ -51,9 +51,12 @@ elseif user_sessions then local top_resources = user_sessions.top_resources; if top_resources then - for _, session in ipairs(top_resources) do - module:log("debug", "Not sending carbons to top resource %s", session.resource); - no_carbon_to[session.resource] = true; + -- These will already receive this message per normal routing rules, + -- so we skip them to avoid duplicated messages. + for i=1,#top_resources do + local resource = top_resources[i].resource; + module:log("debug", "Not sending carbons to top resource %s", resource); + no_carbon_to[resource] = true; end end end @@ -73,20 +76,22 @@ return end - local msg = st.clone(stanza); - msg.attr.xmlns = "jabber:client"; - local fwd = st.message{ from = bare_jid, type = orig_type, } + -- Create the carbon copy and wrap it as per the Stanza Forwarding XEP + local copy = st.clone(stanza); + copy.attr.xmlns = "jabber:client"; + local carbon = st.message{ from = bare_jid, type = orig_type, } :tag(c2s and "sent" or "received", { xmlns = xmlns_carbons }):up() :tag("forwarded", { xmlns = xmlns_forward }) - :add_child(msg):reset(); + :add_child(copy):reset(); + -- And finally, send the carbon to the sessions that should have it. user_sessions = user_sessions and user_sessions.sessions; for resource, session in pairs(user_sessions) do local full_jid = bare_jid .. "/" .. resource; if session.want_carbons and ((c2s and session ~= origin) or (not c2s and not no_carbon_to[resource])) then - fwd.attr.to = full_jid; + carbon.attr.to = full_jid; module:log("debug", "Sending carbon to %s", full_jid); - session.send(fwd); + session.send(carbon); end end end