view mod_smacks_offline/mod_smacks_offline.lua @ 2670:6e01878103c0

mod_smacks: Ignore user when writing or reading session_cache on prosody 0.9 At least under some circumstances it seems that session.username is nil when a user tries to resume his session in prosody 0.9. The username is not relevant when no limiting is done (limiting the number of entries in the session cache is only possible in prosody 0.10), so this commit removes the usage of the username when accessing the prosody 0.9 session cache.
author tmolitor <thilo@eightysoft.de>
date Thu, 06 Apr 2017 02:12:14 +0200
parents b912cb8e0b3c
children a3693e0d26b8
line wrap: on
line source

local t_insert = table.insert;

local mod_smacks = module:depends"smacks"

local function store_unacked_stanzas(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
			module:fire_event("message/offline/handle", { origin = session, stanza = stanza } )
		else
			t_insert(replacement_queue, stanza);
		end
	end
end

local handle_unacked_stanzas = mod_smacks.handle_unacked_stanzas;

local host_sessions = prosody.hosts[module.host].sessions;
mod_smacks.handle_unacked_stanzas = function (session)
	if session.username then
		local sessions = host_sessions[session.username].sessions;
		if next(sessions) == session.resource and next(sessions, session.resource) == nil then
			store_unacked_stanzas(session)
		end
	end
	return handle_unacked_stanzas(session);
end

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