File

mod_rawdebug/mod_rawdebug.lua @ 1970:5ea6f4e6fa8c

mod_s2s_auth_dane: Log as much as possible through session logger instance
author Kim Alvefur <zash@zash.se>
date Sat, 12 Dec 2015 16:01:58 +0100
parent 1445:ae1d7665cde9
child 2256:c5c583fae25d
line wrap: on
line source

module:set_global();

local tostring = tostring;
local filters = require "util.filters";

local def_env = module:shared("admin_telnet/env");
local rawdebug_enabled = module:shared("sessions");
local full_sessions = prosody.full_sessions;
local log = module._log;

local rawdebug = {};
def_env.rawdebug = rawdebug;

local function new_logger(log, prefix)
	local msg = prefix .. ": %s";
	return function (data)
		log("debug", msg, tostring(data))
		return data;
	end
end

function rawdebug:enable(sessionid)
	local session = full_sessions[sessionid];
	if not session then
		return nil, "No such session";
	end
	local f = {
		["stanzas/in"]  = new_logger(session.log or log, "RECV");
		["stanzas/out"] = new_logger(session.log or log, "SEND");
	};
	for type, callback in pairs(f) do
		filters.add_filter(session, type, callback)
	end
	rawdebug_enabled[session] = f;
end

function rawdebug:disable(sessionid)
	local session = full_sessions[sessionid];
	if not session then
		return nil, "No such session";
	end
	local f = rawdebug_enabled[session];
	for type, callback in pairs(f) do
		filters.remove_filter(session, type, callback)
	end
end

function module.unload()
	def_env.rawdebug = nil;
	for session, f in pairs(rawdebug_enabled) do
		for type, callback in pairs(f) do
			filters.remove_filter(session, type, callback)
		end
	end
end