plugins/mod_message.lua
changeset 1418 d14de6cb8b5b
parent 1329 599a058d3961
child 1423 5e72c3e1743a
equal deleted inserted replaced
1417:b02b22f77326 1418:d14de6cb8b5b
     6 local jid_bare = require "util.jid".bare;
     6 local jid_bare = require "util.jid".bare;
     7 local jid_split = require "util.jid".split;
     7 local jid_split = require "util.jid".split;
     8 local user_exists = require "core.usermanager".user_exists;
     8 local user_exists = require "core.usermanager".user_exists;
     9 local offlinemanager = require "core.offlinemanager";
     9 local offlinemanager = require "core.offlinemanager";
    10 local t_insert = table.insert;
    10 local t_insert = table.insert;
    11 
       
    12 local function select_top_resources(user)
       
    13 	local priority = 0;
       
    14 	local recipients = {};
       
    15 	for _, session in pairs(user.sessions) do -- find resource with greatest priority
       
    16 		if session.presence then
       
    17 			-- TODO check active privacy list for session
       
    18 			local p = session.priority;
       
    19 			if p > priority then
       
    20 				priority = p;
       
    21 				recipients = {session};
       
    22 			elseif p == priority then
       
    23 				t_insert(recipients, session);
       
    24 			end
       
    25 		end
       
    26 	end
       
    27 	return recipients;
       
    28 end
       
    29 
    11 
    30 local function process_to_bare(bare, origin, stanza)
    12 local function process_to_bare(bare, origin, stanza)
    31 	local user = bare_sessions[bare];
    13 	local user = bare_sessions[bare];
    32 	
    14 	
    33 	local t = stanza.attr.type;
    15 	local t = stanza.attr.type;
    43 				end
    25 				end
    44 			end
    26 			end
    45 		end  -- current policy is to discard headlines if no recipient is available
    27 		end  -- current policy is to discard headlines if no recipient is available
    46 	else -- chat or normal message
    28 	else -- chat or normal message
    47 		if user then -- some resources are connected
    29 		if user then -- some resources are connected
    48 			local recipients = select_top_resources(user);
    30 			local recipients = user.top_resources;
    49 			if #recipients > 0 then
    31 			if recipients then
    50 				for i=1,#recipients do
    32 				for i=1,#recipients do
    51 					recipients[i].send(stanza);
    33 					recipients[i].send(stanza);
    52 				end
    34 				end
    53 				return true;
    35 				return true;
    54 			end
    36 			end