Mercurial > prosody-modules
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 |