Diff

mod_muc_ping/mod_muc_ping.lua @ 3349:35dc7c38e362

mod_muc_ping: Implements the Server Optimization part of XEP-0410: MUC Self-Ping Also see #1220
author Kim Alvefur <zash@zash.se>
date Sun, 07 Oct 2018 03:39:35 +0200
child 3647:a0ca5d0a49ba
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_muc_ping/mod_muc_ping.lua	Sun Oct 07 03:39:35 2018 +0200
@@ -0,0 +1,32 @@
+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();
+end);