mod_presence: Check for nil 'to' attribute in all cases for outgoing stanzas

Tue, 02 Jun 2009 20:10:25 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Tue, 02 Jun 2009 20:10:25 +0500
changeset 1286
a9b1675ad16e
parent 1285
0a6e2d6ae459
child 1287
ac82c7b9c76b

mod_presence: Check for nil 'to' attribute in all cases for outgoing stanzas

plugins/mod_presence.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_presence.lua	Tue Jun 02 20:07:22 2009 +0500
+++ b/plugins/mod_presence.lua	Tue Jun 02 20:10:25 2009 +0500
@@ -276,22 +276,24 @@
 	-- outbound presence recieved
 	local origin, stanza = data.origin, data.stanza;
 
-	local t = stanza.attr.type;
-	if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes
-		handle_outbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza);
-		return true;
-	end
+	local to = stanza.attr.to;
+	if to then
+		local t = stanza.attr.type;
+		if t ~= nil and t ~= "unavailable" and t ~= "error" then -- check for subscriptions and probes
+			handle_outbound_presence_subscriptions_and_probes(origin, stanza, jid_bare(stanza.attr.from), jid_bare(stanza.attr.to), core_route_stanza);
+			return true;
+		end
 
-	local to = stanza.attr.to;
-	local to_bare = jid_bare(to);
-	if not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence
-		origin.directed = origin.directed or {};
-		if t then -- removing from directed presence list on sending an error or unavailable
-			origin.directed[to] = nil; -- FIXME does it make more sense to add to_bare rather than to?
-		else
-			origin.directed[to] = true; -- FIXME does it make more sense to add to_bare rather than to?
+		local to_bare = jid_bare(to);
+		if not(origin.roster[to_bare] and (origin.roster[to_bare].subscription == "both" or origin.roster[to_bare].subscription == "from")) then -- directed presence
+			origin.directed = origin.directed or {};
+			if t then -- removing from directed presence list on sending an error or unavailable
+				origin.directed[to] = nil; -- FIXME does it make more sense to add to_bare rather than to?
+			else
+				origin.directed[to] = true; -- FIXME does it make more sense to add to_bare rather than to?
+			end
 		end
-	end
+	end -- TODO maybe handle normal presence here, instead of letting it pass to incoming handlers?
 end
 
 module:hook("pre-presence/full", outbound_presence_handler);

mercurial