aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/stanza_router.lua34
1 files changed, 20 insertions, 14 deletions
diff --git a/core/stanza_router.lua b/core/stanza_router.lua
index 6fa41232..b739c99e 100644
--- a/core/stanza_router.lua
+++ b/core/stanza_router.lua
@@ -44,6 +44,8 @@ local jid_prepped_split = require "util.jid".prepped_split;
local print = print;
local fire_event = require "core.eventmanager2".fire_event;
+local select_best_resources;
+
function core_process_stanza(origin, stanza)
(origin.log or log)("debug", "Received[%s]: %s", origin.type, stanza:top_tag())
@@ -199,21 +201,8 @@ function core_route_stanza(origin, stanza)
-- Groupchat message sent to offline resource
origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
else
- local priority = 0;
- local recipients = {};
- for _, session in pairs(user.sessions) do -- find resource with greatest priority
- if session.presence then
- local p = session.priority;
- if p > priority then
- priority = p;
- recipients = {session};
- elseif p == priority then
- t_insert(recipients, session);
- end
- end
- end
local count = 0;
- for _, session in ipairs(recipients) do
+ for _, session in ipairs(select_best_resources(user)) do
session.send(stanza);
count = count + 1;
end
@@ -280,3 +269,20 @@ function core_route_stanza(origin, stanza)
end
stanza.attr.to = to; -- reset
end
+
+function select_best_resources(user)
+ local priority = 0;
+ local recipients = {};
+ for _, session in pairs(user.sessions) do -- find resource with greatest priority
+ if session.presence then
+ 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