comparison mod_rawdebug/mod_rawdebug.lua @ 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 ae1d7665cde9
children
comparison
equal deleted inserted replaced
2255:cdfc917a8cc7 2256:c5c583fae25d
1 module:set_global(); 1 module:set_global();
2 2
3 local tostring = tostring; 3 local tostring = tostring;
4 local filters = require "util.filters"; 4 local filters = require "util.filters";
5 5
6 local def_env = module:shared("admin_telnet/env"); 6 local function log_send(t, session)
7 local rawdebug_enabled = module:shared("sessions"); 7 if t and t ~= "" and t ~= " " then
8 local full_sessions = prosody.full_sessions; 8 session.log("debug", "SEND(%d): %s", #t, tostring(t));
9 local log = module._log;
10
11 local rawdebug = {};
12 def_env.rawdebug = rawdebug;
13
14 local function new_logger(log, prefix)
15 local msg = prefix .. ": %s";
16 return function (data)
17 log("debug", msg, tostring(data))
18 return data;
19 end 9 end
10 return t;
20 end 11 end
21 12
22 function rawdebug:enable(sessionid) 13 local function log_recv(t, session)
23 local session = full_sessions[sessionid]; 14 if t and t ~= "" and t ~= " " then
24 if not session then 15 session.log("debug", "RECV(%d): %s", #t, tostring(t));
25 return nil, "No such session";
26 end 16 end
27 local f = { 17 return t;
28 ["stanzas/in"] = new_logger(session.log or log, "RECV");
29 ["stanzas/out"] = new_logger(session.log or log, "SEND");
30 };
31 for type, callback in pairs(f) do
32 filters.add_filter(session, type, callback)
33 end
34 rawdebug_enabled[session] = f;
35 end 18 end
36 19
37 function rawdebug:disable(sessionid) 20 local function init_raw_logging(session)
38 local session = full_sessions[sessionid]; 21 filters.add_filter(session, "bytes/in", log_recv, -10000);
39 if not session then 22 filters.add_filter(session, "bytes/out", log_send, 10000);
40 return nil, "No such session";
41 end
42 local f = rawdebug_enabled[session];
43 for type, callback in pairs(f) do
44 filters.remove_filter(session, type, callback)
45 end
46 end 23 end
47 24
48 function module.unload() 25 filters.add_filter_hook(init_raw_logging);
49 def_env.rawdebug = nil; 26
50 for session, f in pairs(rawdebug_enabled) do 27 function module.unload() -- luacheck: ignore
51 for type, callback in pairs(f) do 28 filters.remove_filter_hook(init_raw_logging);
52 filters.remove_filter(session, type, callback)
53 end
54 end
55 end 29 end
56