Changeset

3518:d3399d1b484a

Don't send offline messages to resource with negative priorities
author Robert Hoelz <rob@hoelz.ro>
date Fri, 15 Oct 2010 00:53:05 -0500
parents 3513:4cf5962747fc
children 3519:489b683988fe 3520:dc94193ec942
files plugins/mod_presence.lua
diffstat 1 files changed, 19 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/mod_presence.lua	Wed Oct 06 00:13:24 2010 +0100
+++ b/plugins/mod_presence.lua	Fri Oct 15 00:53:05 2010 -0500
@@ -59,6 +59,15 @@
 			priority[1] = "0";
 		end
 	end
+        local priority = stanza:child_with_name("priority");
+        if priority and #priority > 0 then
+                priority = t_concat(priority);
+                if s_find(priority, "^[+-]?[0-9]+$") then
+                        priority = tonumber(priority);
+                        if priority < -128 then priority = -128 end
+                        if priority > 127 then priority = 127 end
+                else priority = 0; end
+        else priority = 0; end
 	if full_sessions[origin.full_jid] then -- if user is still connected
 		origin.send(stanza); -- reflect their presence back to them
 	end
@@ -105,13 +114,16 @@
 				core_post_stanza(origin, request, true);
 			end
 		end
-		local offline = offlinemanager.load(node, host);
-		if offline then
-			for _, msg in ipairs(offline) do
-				origin.send(msg); -- FIXME do we need to modify to/from in any way?
-			end
-			offlinemanager.deleteAll(node, host);
-		end
+
+                if priority >= 0 then
+                        local offline = offlinemanager.load(node, host);
+                        if offline then
+                                for _, msg in ipairs(offline) do
+                                        origin.send(msg); -- FIXME do we need to modify to/from in any way?
+                                end
+                                offlinemanager.deleteAll(node, host);
+                        end
+                end
 	end
 	if stanza.attr.type == "unavailable" then
 		origin.presence = nil;
@@ -128,15 +140,6 @@
 		end
 	else
 		origin.presence = stanza;
-		local priority = stanza:child_with_name("priority");
-		if priority and #priority > 0 then
-			priority = t_concat(priority);
-			if s_find(priority, "^[+-]?[0-9]+$") then
-				priority = tonumber(priority);
-				if priority < -128 then priority = -128 end
-				if priority > 127 then priority = 127 end
-			else priority = 0; end
-		else priority = 0; end
 		if origin.priority ~= priority then
 			origin.priority = priority;
 			recalc_resource_map(user);