diff options
author | Matthew Wild <mwild1@gmail.com> | 2022-03-23 13:43:08 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2022-03-23 13:43:08 +0000 |
commit | 1ef09e4285fafaffe133fcaab95d790865cd5ad9 (patch) | |
tree | fbda5300dd3d197a36c632f649a85230fec1068c | |
parent | 611a10346961579f4c73fd57c12ebefaf955e891 (diff) | |
download | prosody-1ef09e4285fafaffe133fcaab95d790865cd5ad9.tar.gz prosody-1ef09e4285fafaffe133fcaab95d790865cd5ad9.zip |
mod_admin_shell: Add watch:stanzas() command
-rw-r--r-- | plugins/mod_admin_shell.lua | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/plugins/mod_admin_shell.lua b/plugins/mod_admin_shell.lua index 9af77676..ae7e3c7c 100644 --- a/plugins/mod_admin_shell.lua +++ b/plugins/mod_admin_shell.lua @@ -1609,6 +1609,40 @@ function def_env.watch:log() end end +local stanza_watchers = module:require("mod_debug_stanzas/watcher"); +function def_env.watch:stanzas(target_spec, filter_spec) + local function handler(event_type, stanza, session) + if stanza then + if event_type == "sent" then + self.session.print(("\n<!-- sent to %s -->"):format(session.id)); + elseif event_type == "received" then + self.session.print(("\n<!-- received from %s -->"):format(session.id)); + else + self.session.print(("\n<!-- %s (%s) -->"):format(event_type, session.id)); + end + self.session.print(stanza); + elseif session then + self.session.print("\n<!-- session "..session.id.." "..event_type.." -->"); + elseif event_type then + self.session.print("\n<!-- "..event_type.." -->"); + end + end + + stanza_watchers.add({ + target_spec = { + jid = target_spec; + }; + filter_spec = filter_spec and { + with_jid = filter_spec; + }; + }, handler); + + while self.session.is_connected() do + async.sleep(3); + end + + stanza_watchers.remove(handler); +end def_env.debug = {}; @@ -1953,6 +1987,10 @@ function def_env.stats:show(name_filter) end +function module.unload() + stanza_watchers.cleanup(); +end + ------------- |