changeset 2256:c5c583fae25d

mod_rawdebug: Simplify, remove telnet command, log every single byte
author Kim Alvefur <zash@zash.se>
date Thu, 28 Jul 2016 12:14:33 +0200
parents cdfc917a8cc7
children f84b51f9aa82
files mod_rawdebug/README.markdown mod_rawdebug/mod_rawdebug.lua
diffstat 2 files changed, 22 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- 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.
--- 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
-