diff options
author | Waqas Hussain <waqas20@gmail.com> | 2010-02-15 08:04:25 +0500 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2010-02-15 08:04:25 +0500 |
commit | fdcf472ada6f666a690ce73d77cf173c09fc3dc6 (patch) | |
tree | f044865f345becf473e5aff7444d95905ab0b4d5 | |
parent | a58fef84ce59a61a89da28dfcc342e9887ed183b (diff) | |
download | prosody-fdcf472ada6f666a690ce73d77cf173c09fc3dc6.tar.gz prosody-fdcf472ada6f666a690ce73d77cf173c09fc3dc6.zip |
mod_presence: Added config option 'bare_message_delivery_policy'. Allowed values are 'priority' (default) and 'broadcast'.
-rw-r--r-- | plugins/mod_presence.lua | 41 |
1 files changed, 30 insertions, 11 deletions
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); |