File

mod_smacks_noerror/mod_smacks_noerror.lua @ 3587:c24d43ababc6

mod_storage_xmlarchive: Try harder to limit range of time to check Fixes read of entire index in case where the time range is outside the range present in the archive.
author Kim Alvefur <zash@zash.se>
date Tue, 07 May 2019 17:10:07 +0200
parent 3171:f35b2b76df6d
child 3937:e7dc25e54d02
line wrap: on
line source

local t_insert = table.insert;

local mod_smacks = module:depends"smacks"

-- ignore offline messages and don't return any error (the message will be already in MAM at this point)
-- this is *only* triggered if mod_offline is *not* loaded and completely ignored otherwise
module:hook("message/offline/handle", function(event)
	event.origin.log("debug", "Ignoring offline message (mod_offline seems to be *not* loaded)...");
	return true;
end, -100);

local function discard_unacked_messages(session)
	local queue = session.outgoing_stanza_queue;
	local replacement_queue = {};
	session.outgoing_stanza_queue = replacement_queue;

	for _, stanza in ipairs(queue) do
		if stanza.name == "message" and stanza.attr.xmlns == nil and
				( stanza.attr.type == "chat" or ( stanza.attr.type or "normal" ) == "normal" ) then
			-- do nothing here for normal messages and don't send out "message delivery errors",
			-- because messages are already in MAM at this point (no need to frighten users)
		else
			t_insert(replacement_queue, stanza);
		end
	end
end

local handle_unacked_stanzas = mod_smacks.handle_unacked_stanzas;

mod_smacks.handle_unacked_stanzas = function (session)
	-- Only deal with authenticated (c2s) sessions
	if session.username then
		discard_unacked_messages(session)
	end
	return handle_unacked_stanzas(session);
end

function module.unload()
	mod_smacks.handle_unacked_stanzas = handle_unacked_stanzas;
end