Software /
code /
prosody
Diff
core/stanza_router.lua @ 1212:3be23cf5a659
stanza_router: Break off resource selection for messages into a standalone function
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 28 May 2009 20:39:32 +0100 (2009-05-28) |
parent | 1191:7f965bd37d65 |
child | 1228:853d3d76ba94 |
line wrap: on
line diff
--- a/core/stanza_router.lua Thu May 28 02:59:47 2009 +0100 +++ b/core/stanza_router.lua Thu May 28 20:39:32 2009 +0100 @@ -44,6 +44,8 @@ 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 @@ -- 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 @@ 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