Mercurial > prosody-modules
view mod_muc_gateway_optimize/mod_muc_gateway_optimize.lua @ 6092:bd3ff802d883
mod_anti_spam: Fix another traceback for origin sessions without an IP
This is likely to be the case for stanzas originating from local hosts, for
example (so not true s2s). It should be safe to bypass the IP check for those.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sat, 28 Dec 2024 21:02:08 +0000 |
| parents | 23c4c61a1068 |
| children |
line wrap: on
line source
local jid = require("util.jid") local mod_muc = module:depends("muc") local gateway_hosts = module:get_option_array("gateway_hosts", {}) function optimize(remote_host, event) local stanza = event.stanza module:log("debug", "optimize presence event destined for " .. remote_host) local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc#user") if muc_x then for status in muc_x:childtags("status") do if status.attr.status == "110" then module:log("debug", "optimize delivering 110") -- Always deliver self-presence return end end end local bare_jid = jid.bare(stanza.attr.to) local room = mod_muc.get_room_from_jid(jid.bare(stanza.attr.from)) if not room then return end for nick, occupant in room:each_occupant() do local occupant_host = jid.host(occupant.bare_jid) if occupant_host == remote_host then -- This is the "first" occupant from the host -- which is the only one we will route non-110 -- presence to if occupant.bare_jid == bare_jid then module:log("debug", "optimize found first occupant, so route") return else module:log("debug", "optimize found non-first occupant, so drop") return true end end end -- If we get here we found no occupants for this host module:log("debug", "optimize found no occupants for host " .. remote_host) end -- Note this will only affect gateways over s2s for now module:hook("route/remote", function (event) if event.stanza.name ~= "presence" then return end local remote_host = jid.host(event.stanza.attr.to) for _, gateway_host in pairs(gateway_hosts) do if remote_host == gateway_host then return optimize(remote_host, event) end end end, 1000)
