mod_mix_pam: Remove tracking of bound resources
This commit is contained in:
parent
2c89d00c09
commit
482890a9a1
@ -255,35 +255,6 @@ module:hook("iq/bare", function(event)
|
|||||||
end
|
end
|
||||||
end);
|
end);
|
||||||
|
|
||||||
local user_resources = {}; -- [bare jid] -> array of bound resources
|
|
||||||
|
|
||||||
module:hook("resource-bind", function(event)
|
|
||||||
local session_jid, resource = jid.bare(event.session.full_jid), event.session.resource;
|
|
||||||
if user_resources[session_jid] ~= nil then
|
|
||||||
for _, r in pairs(user_resources) do
|
|
||||||
if r == resource then return; end
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(user_resources[session_jid], resource);
|
|
||||||
else
|
|
||||||
user_resources[session_jid] = { resource };
|
|
||||||
end
|
|
||||||
|
|
||||||
module:log("debug", "Caught resource %s of %s", resource, session_jid);
|
|
||||||
end);
|
|
||||||
|
|
||||||
module:hook("resource-unbind", function(event)
|
|
||||||
local session_jid, resource = jid.bare(event.session.full_jid), event.session.resource;
|
|
||||||
for i, r in pairs(user_resources[session_jid]) do
|
|
||||||
if r == resource then
|
|
||||||
table.remove(user_resources[session_jid], i);
|
|
||||||
return;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module:log("debug", "Unbind of not recorded resource %s (%s)", resource, session_jid);
|
|
||||||
end);
|
|
||||||
|
|
||||||
module:hook("roster-get", function(event)
|
module:hook("roster-get", function(event)
|
||||||
-- NOTE: Currently this requires a patch to make mod_roster emit
|
-- NOTE: Currently this requires a patch to make mod_roster emit
|
||||||
-- the roster-get event
|
-- the roster-get event
|
||||||
@ -321,19 +292,12 @@ module:hook("message/bare", function(event)
|
|||||||
if not is_mix_host(jid_host) then return; end
|
if not is_mix_host(jid_host) then return; end
|
||||||
if not is_mix_message(stanza) then return; end
|
if not is_mix_message(stanza) then return; end
|
||||||
|
|
||||||
-- MIX-CORE says that if the message cannot be delivered, it should
|
|
||||||
-- just be dropped
|
|
||||||
if user_resources[stanza.attr.to] == nil then
|
|
||||||
module:log("debug", "Skipping %s: No resource bound", stanza.attr.to);
|
|
||||||
return true;
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Per XEP we know that stanza.attr.to is the user's bare JID
|
-- Per XEP we know that stanza.attr.to is the user's bare JID
|
||||||
for _, resource in pairs(user_resources[stanza.attr.to]) do
|
for _, session in pairs(prosody.bare_sessions[stanza.attr.to].sessions) do
|
||||||
-- TODO: Only send to resources that advertise support for MIX (When MIX clients are available for testing)
|
-- TODO: Only send to resources that advertise support for MIX (When MIX clients are available for testing)
|
||||||
local msg = st.clone(stanza);
|
local msg = st.clone(stanza);
|
||||||
msg.attr.to = stanza.attr.to.."/"..resource;
|
msg.attr.to = stanza.attr.to.."/"..session.resource;
|
||||||
module:send(msg);
|
session:send(msg);
|
||||||
module:log("debug", "Sent message to %s", msg.attr.to);
|
module:log("debug", "Sent message to %s", msg.attr.to);
|
||||||
end
|
end
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user