From fdcf472ada6f666a690ce73d77cf173c09fc3dc6 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Mon, 15 Feb 2010 08:04:25 +0500
Subject: mod_presence: Added config option 'bare_message_delivery_policy'.
 Allowed values are 'priority' (default) and 'broadcast'.

---
 plugins/mod_presence.lua | 41 ++++++++++++++++++++++++++++++-----------
 1 file changed, 30 insertions(+), 11 deletions(-)

(limited to 'plugins')

diff --git a/plugins/mod_presence.lua b/plugins/mod_presence.lua
index a39d9c19..648c78b3 100644
--- a/plugins/mod_presence.lua
+++ b/plugins/mod_presence.lua
@@ -38,23 +38,42 @@ function core_route_stanza(origin, stanza)
 	_core_route_stanza(origin, stanza);
 end
 
-local function select_top_resources(user)
-	local priority = 0;
-	local recipients = {};
-	for _, session in pairs(user.sessions) do -- find resource with greatest priority
-		if session.presence then
-			-- TODO check active privacy list for session
+local select_top_resources;
+local bare_message_delivery_policy = module:get_option("bare_message_delivery_policy") or "priority";
+if bare_message_delivery_policy == "broadcast" then
+	function select_top_resources(user)
+		local recipients = {};
+		for _, session in pairs(user.sessions) do -- find resources with non-negative priority
 			local p = session.priority;
-			if p > priority then
-				priority = p;
-				recipients = {session};
-			elseif p == priority then
+			if p and p >= 0 then
 				t_insert(recipients, session);
 			end
 		end
+		return recipients;
+	end
+else
+	if bare_message_delivery_policy ~= "priority" then
+		module:log("warn", "Invalid value for config option bare_message_delivery_policy");
+	end
+	function select_top_resources(user)
+		local priority = 0;
+		local recipients = {};
+		for _, session in pairs(user.sessions) do -- find resource with greatest priority
+			if session.presence then
+				-- TODO check active privacy list for session
+				local p = session.priority;
+				if p > priority then
+					priority = p;
+					recipients = {session};
+				elseif p == priority then
+					t_insert(recipients, session);
+				end
+			end
+		end
+		return recipients;
 	end
-	return recipients;
 end
+
 local function recalc_resource_map(user)
 	if user then
 		user.top_resources = select_top_resources(user);
-- 
cgit v1.2.3