Software /
code /
prosody
Diff
plugins/mod_admin_shell.lua @ 12464:f4c59af273a3
mod_admin_shell: Add watch:stanzas() command
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 23 Mar 2022 13:43:08 +0000 |
parent | 12399:d99772b739e0 |
child | 12480:7e9ebdc75ce4 |
line wrap: on
line diff
--- a/plugins/mod_admin_shell.lua Wed Mar 23 13:42:44 2022 +0000 +++ b/plugins/mod_admin_shell.lua Wed Mar 23 13:43:08 2022 +0000 @@ -1609,6 +1609,40 @@ 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 @@ end +function module.unload() + stanza_watchers.cleanup(); +end + -------------