view mod_delay/mod_delay.lua @ 2712:d89ab70808f6

mod_cloud_notify: fix bug when multiple resources are used This bug was triggered under the rare circumstances that a message arrived and one resource was smacks hibernated while the other one(s) were offline. Then only the hibernated resource but not the offline one(s) (or the other way round) got notified.
author tmolitor <thilo@eightysoft.de>
date Mon, 08 May 2017 18:24:29 +0200
parents 05248d5a7166
children 5e94061c1aa7
line wrap: on
line source

local add_filter = require "util.filters".add_filter;
local remove_filter = require "util.filters".remove_filter;
local datetime = require "util.datetime";

local xmlns_delay = "urn:xmpp:delay";

-- Raise an error if the modules has been loaded as a component in prosody's config
if module:get_host_type() == "component" then
	error(module.name.." should NOT be loaded as a component, check out http://prosody.im/doc/components", 0);
end

local add_delay = function(stanza, session)
	if stanza and stanza.name == "message" and stanza:get_child("delay", xmlns_delay) == nil then
		-- only add delay tag to chat or groupchat messages (should we add a delay to anything else, too???)
		if stanza.attr.type == "chat" or stanza.attr.type == "groupchat" then
			-- session.log("debug", "adding delay to message %s", tostring(stanza));
			stanza = stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()});
		end
	end
	return stanza;
end

module:hook("resource-bind", function(event)
	add_filter(event.session, "stanzas/in", add_delay, 1);
end);

module:hook("pre-resource-unbind", function (event)
	remove_filter(event.session, "stanzas/in", add_delay);
end);