36 end |
36 end |
37 end |
37 end |
38 _core_route_stanza(origin, stanza); |
38 _core_route_stanza(origin, stanza); |
39 end |
39 end |
40 |
40 |
41 local function select_top_resources(user) |
41 local select_top_resources; |
42 local priority = 0; |
42 local bare_message_delivery_policy = module:get_option("bare_message_delivery_policy") or "priority"; |
43 local recipients = {}; |
43 if bare_message_delivery_policy == "broadcast" then |
44 for _, session in pairs(user.sessions) do -- find resource with greatest priority |
44 function select_top_resources(user) |
45 if session.presence then |
45 local recipients = {}; |
46 -- TODO check active privacy list for session |
46 for _, session in pairs(user.sessions) do -- find resources with non-negative priority |
47 local p = session.priority; |
47 local p = session.priority; |
48 if p > priority then |
48 if p and p >= 0 then |
49 priority = p; |
|
50 recipients = {session}; |
|
51 elseif p == priority then |
|
52 t_insert(recipients, session); |
49 t_insert(recipients, session); |
53 end |
50 end |
54 end |
51 end |
55 end |
52 return recipients; |
56 return recipients; |
53 end |
57 end |
54 else |
|
55 if bare_message_delivery_policy ~= "priority" then |
|
56 module:log("warn", "Invalid value for config option bare_message_delivery_policy"); |
|
57 end |
|
58 function select_top_resources(user) |
|
59 local priority = 0; |
|
60 local recipients = {}; |
|
61 for _, session in pairs(user.sessions) do -- find resource with greatest priority |
|
62 if session.presence then |
|
63 -- TODO check active privacy list for session |
|
64 local p = session.priority; |
|
65 if p > priority then |
|
66 priority = p; |
|
67 recipients = {session}; |
|
68 elseif p == priority then |
|
69 t_insert(recipients, session); |
|
70 end |
|
71 end |
|
72 end |
|
73 return recipients; |
|
74 end |
|
75 end |
|
76 |
58 local function recalc_resource_map(user) |
77 local function recalc_resource_map(user) |
59 if user then |
78 if user then |
60 user.top_resources = select_top_resources(user); |
79 user.top_resources = select_top_resources(user); |
61 if #user.top_resources == 0 then user.top_resources = nil; end |
80 if #user.top_resources == 0 then user.top_resources = nil; end |
62 end |
81 end |