view mod_muc_ping/mod_muc_ping.lua @ 4813:0a257d1402c3

mod_muc_rtbl: Optimize case with zero hashes On the assumption that during quiet times between torrents of spam, the hash set would be empty. There would be no point in doing the operations and hashes to check for a match in that case.
author Kim Alvefur <zash@zash.se>
date Mon, 06 Dec 2021 18:19:19 +0100
parents a0ca5d0a49ba
children
line wrap: on
line source

local st = require "util.stanza";
local jid_bare = import("util.jid", "bare");

local mod_muc = module:depends"muc";
local rooms = rawget(mod_muc, "rooms");
if not rooms then
	module:log("warn", "mod_%s is compatible with Prosody up to 0.10.x", module.name);
	return;
end

module:hook("iq/full", function (event)
	local origin, stanza = event.origin, event.stanza;
	if stanza.attr.type ~= "get" or not stanza:get_child("ping", "urn:xmpp:ping") then
		return;
	end

	local from = stanza.attr.from;
	local room_nick = stanza.attr.to;
	local room_jid = jid_bare(room_nick);

	local room = rooms[room_jid];
	if not room then return; end

	if room._jid_nick[from] == room_nick then
		origin.send(st.reply(stanza));
		return true;
	end
end);

module:hook("muc-disco#info", function(event)
	event.reply:tag("feature", {var="urn:xmpp:ping"}):up();
	event.reply:tag("feature", {var = "http://jabber.org/protocol/muc#self-ping-optimization"}):up();
end);