# HG changeset patch # User Matthew Wild # Date 1243539572 -3600 # Node ID 3be23cf5a659eeaf64c1f03f1e599b3f425b6028 # Parent d60e68855176a2cd208e0881ffac97710d96caa1 stanza_router: Break off resource selection for messages into a standalone function diff -r d60e68855176 -r 3be23cf5a659 core/stanza_router.lua --- 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