Changeset

6114:dc2cce03554d

mod_pubsub_subscription: Match stanzas with fixed prefix only This should help filter out any other unrelated iq stanzas which may be exchanged with the pubsub service. For example, a separate module was requesting the item list from a subscribed node, but this module was incorrectly attempting to handle the result.
author Matthew Wild <mwild1@gmail.com>
date Sat, 28 Dec 2024 15:23:33 +0000
parents 6113:c0cb43817b7c
children 6115:b644832a8290
files mod_pubsub_subscription/mod_pubsub_subscription.lua
diffstat 1 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mod_pubsub_subscription/mod_pubsub_subscription.lua	Mon Dec 23 14:09:56 2024 +0100
+++ b/mod_pubsub_subscription/mod_pubsub_subscription.lua	Sat Dec 28 15:23:33 2024 +0000
@@ -1,3 +1,4 @@
+local id = require "util.id";
 local st = require "util.stanza";
 local uuid = require "util.uuid";
 local mt = require "util.multitable";
@@ -37,7 +38,7 @@
 	end
 
 	item._id = uuid.generate();
-	local iq_id = uuid.generate();
+	local iq_id = "pubsub-sub-"..id.short();
 	pending_subscription:set(iq_id, item._id);
 	active_subscriptions:set(item.service, item.node, item.from, item._id, item);
 
@@ -67,6 +68,7 @@
 	local service = stanza.attr.from;
 
 	if not stanza.attr.id then return end -- shouldn't be possible
+	if not stanza.attr.id:match("^pubsub%-sub%-") then return end
 
 	local subscribed_node = pending_subscription:get(stanza.attr.id);
 	pending_subscription:set(stanza.attr.id, nil);
@@ -118,7 +120,7 @@
 	local node_subs = active_subscriptions:get(item.service, item.node, item.from);
 	if node_subs and next(node_subs) then return end
 
-	local iq_id = uuid.generate();
+	local iq_id = "pubsub-sub-"..id.short();
 	pending_unsubscription:set(iq_id, item._id);
 
 	module:send(st.iq({ type = "set", id = iq_id, from = item.from, to = item.service })