Software /
code /
prosody-modules
File
mod_rawdebug/mod_rawdebug.lua @ 1498:e82592ed744b
mod_mam_archive: Applying @vstakhov 's patch (https://gist.github.com/vstakhov/306ea813a38021dcf3d4).
Fixing SQLite-related bugs, to-from bugs, rst compatibility, etc. Thanks Vsevolod!
author | syn@syn.im |
---|---|
date | Sun, 31 Aug 2014 20:13:54 +0200 |
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