# HG changeset patch # User Kim Alvefur # Date 1469700873 -7200 # Node ID c5c583fae25d4fd3bac1a3a984bf6eab3d52c18b # Parent cdfc917a8cc7e581402057c44ce549c49b9cc903 mod_rawdebug: Simplify, remove telnet command, log every single byte diff -r cdfc917a8cc7 -r c5c583fae25d mod_rawdebug/README.markdown --- a/mod_rawdebug/README.markdown Thu Jul 28 12:12:23 2016 +0200 +++ b/mod_rawdebug/README.markdown Thu Jul 28 12:14:33 2016 +0200 @@ -1,26 +1,12 @@ --- -labels: -summary: Telnet command for raw stanza logging -... +summary: Extra verbose logging of sent and received +--- -# Summary +Summary +======= Sometimes it is useful to get the raw XML logs from clients for -debugging purposes, but some clients don't expose this. This command -lets you activate this on specific sessions. - -# Usage - -In the telnet console: +debugging purposes, but some clients don't expose this. - c2s:show() - | example.com - | user@example.com/bd0b8b19 [c2sb75e93d8] available(0) (encrypted) - | ... - | OK: Total: $n clients - - - rawdebug:enable"user@example.com/bd0b8b19" - > OK - -Then everything sent and received will be logged to debug levels. +This module logs dumps everything sent and received into debug logs, for +debugging purposes. diff -r cdfc917a8cc7 -r c5c583fae25d mod_rawdebug/mod_rawdebug.lua --- a/mod_rawdebug/mod_rawdebug.lua Thu Jul 28 12:12:23 2016 +0200 +++ b/mod_rawdebug/mod_rawdebug.lua Thu Jul 28 12:14:33 2016 +0200 @@ -3,54 +3,27 @@ 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; +local function log_send(t, session) + if t and t ~= "" and t ~= " " then + session.log("debug", "SEND(%d): %s", #t, tostring(t)); end + return t; end -function rawdebug:enable(sessionid) - local session = full_sessions[sessionid]; - if not session then - return nil, "No such session"; +local function log_recv(t, session) + if t and t ~= "" and t ~= " " then + session.log("debug", "RECV(%d): %s", #t, tostring(t)); 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; + return t; 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 +local function init_raw_logging(session) + filters.add_filter(session, "bytes/in", log_recv, -10000); + filters.add_filter(session, "bytes/out", log_send, 10000); 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 +filters.add_filter_hook(init_raw_logging); + +function module.unload() -- luacheck: ignore + filters.remove_filter_hook(init_raw_logging); end -