diff mod_smacks/mod_smacks.lua @ 3956:ebc1f1d962c5

mod_stanzas: tighten up stanza check and add explanatory text
author JC Brand <jc@opkode.com>
date Fri, 27 Mar 2020 11:56:14 +0100
parents 017f60608fc8
children bf5d91769f99
line wrap: on
line diff
--- a/mod_smacks/mod_smacks.lua	Thu Mar 26 11:57:02 2020 +0100
+++ b/mod_smacks/mod_smacks.lua	Fri Mar 27 11:56:14 2020 +0100
@@ -199,16 +199,16 @@
 	end
 end
 
-local function is_stanza(stanza)
-	return stanza.attr and
-		(	not stanza.attr.xmlns or
-			stanza.attr.xmlns == 'jabber:client' or
-			stanza.attr.xmlns == 'jabber:server'
-		) and not stanza.name:find":";
-end
+local function outgoing_stanza_filter(stanza, session)
+	-- XXX: Normally you wouldn't have to check the xmlns for a stanza as it's
+	-- supposed to be nil.
+	-- However, when using mod_smacks with mod_websocket, then mod_websocket's
+	-- stanzas/out filter can get called before this one and adds the xmlns.
+	local is_stanza = stanza.attr and
+		(not stanza.attr.xmlns or stanza.attr.xmlns == 'jabber:client')
+		and not stanza.name:find":";
 
-local function outgoing_stanza_filter(stanza, session)
-	if is_stanza(stanza) and not stanza._cached then
+	if is_stanza and not stanza._cached then
 		local queue = session.outgoing_stanza_queue;
 		local cached_stanza = st.clone(stanza);
 		cached_stanza._cached = true;
@@ -233,7 +233,7 @@
 end
 
 local function count_incoming_stanzas(stanza, session)
-	if is_stanza(stanza) then
+	if not stanza.attr.xmlns then
 		session.handled_stanza_count = session.handled_stanza_count + 1;
 		session.log("debug", "Handled %d incoming stanzas", session.handled_stanza_count);
 	end