aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Romain <chris.romain@gmail.com>2010-05-05 15:42:49 +0200
committerChristophe Romain <chris.romain@gmail.com>2010-05-05 15:42:49 +0200
commit7fc12076618e57f6dc573aa6be8773b44d9d11a0 (patch)
treea9e803e3e9b355dd540bf034465697efdf33234a /src
parentIndicate explicitly what nodes are handled by mod_configure (diff)
enforce pubsub#presence_based_delivery (EJAB-1221) (thanks to Karim Gemayel)
Diffstat (limited to 'src')
-rw-r--r--src/mod_pubsub/mod_pubsub.erl12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl
index 7553468c6..e365007bd 100644
--- a/src/mod_pubsub/mod_pubsub.erl
+++ b/src/mod_pubsub/mod_pubsub.erl
@@ -2868,12 +2868,18 @@ node_to_deliver(LJID, NodeOptions) ->
presence_can_deliver(LJID, PresenceDelivery).
presence_can_deliver(_, false) -> true;
-presence_can_deliver({User, Server, _}, true) ->
+presence_can_deliver({User, Server, Resource}, true) ->
case mnesia:dirty_match_object({session, '_', '_', {User, Server}, '_', '_'}) of
[] -> false;
Ss ->
- lists:foldl(fun({session, _, _, _, undefined, _}, Acc) -> Acc;
- ({session, _, _, _, _Priority, _}, _Acc) -> true
+ lists:foldl(fun(_, true) -> true;
+ ({session, _, _ , _, undefined, _}, _Acc) -> false;
+ ({session, _, {_, _, R}, _, _Priority, _}, _Acc) ->
+ case Resource of
+ [] -> true;
+ R -> true;
+ _ -> false
+ end
end, false, Ss)
end.