# HG changeset patch # User Kim Alvefur # Date 1538876375 -7200 # Node ID 35dc7c38e362493995dab349d83fd431bcb47e63 # Parent f753cf4f72240ec5f315cedaa1220edefa4a8cc6 mod_muc_ping: Implements the Server Optimization part of XEP-0410: MUC Self-Ping Also see #1220 diff -r f753cf4f7224 -r 35dc7c38e362 mod_muc_ping/README.markdown --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_muc_ping/README.markdown Sun Oct 07 03:39:35 2018 +0200 @@ -0,0 +1,5 @@ +This module implements the [Server +Optimization](https://xmpp.org/extensions/xep-0410.html#serveroptimization) +part of [XEP-0410: MUC Self-Ping] + +It should work with Prosody up until 0.10.x. diff -r f753cf4f7224 -r 35dc7c38e362 mod_muc_ping/mod_muc_ping.lua --- /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);