# HG changeset patch
# User Matthew Wild <mwild1@gmail.com>
# Date 1648042988 0
# Node ID f4c59af273a3a5f2300c4040681dc4ff8883692d
# Parent  788048158982f59e6871288952047a3169906aa0
mod_admin_shell: Add watch:stanzas() command

diff -r 788048158982 -r f4c59af273a3 plugins/mod_admin_shell.lua
--- 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
+
 
 -------------