Skip to content

Commit 3758128

Browse files
committed
Deliver pubsub notifications to remote servers for nodes with presence based delivery
Nodes configured for presence based delivery did send notifications only to subscribers that did match presence rules. But this only works for local users, as we don't know presence for remote users. This change makes subscribers from remote server get notification without performing any presence tests.
1 parent cfd54fa commit 3758128

File tree

1 file changed

+20
-15
lines changed

1 file changed

+20
-15
lines changed

src/mod_pubsub.erl

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,21 +2702,26 @@ sub_option_can_deliver(_, _, _) -> true.
27022702
presence_can_deliver(_, false) ->
27032703
true;
27042704
presence_can_deliver({User, Server, Resource}, true) ->
2705-
case ejabberd_sm:get_user_present_resources(User, Server) of
2706-
[] ->
2707-
false;
2708-
Ss ->
2709-
lists:foldl(fun
2710-
(_, true) ->
2711-
true;
2712-
({_, R}, _Acc) ->
2713-
case Resource of
2714-
<<>> -> true;
2715-
R -> true;
2716-
_ -> false
2717-
end
2718-
end,
2719-
false, Ss)
2705+
case ejabberd_router:is_my_route(Server) of
2706+
% We don't know presence of users on remote server, so always deliver
2707+
false -> true;
2708+
_ ->
2709+
case ejabberd_sm:get_user_present_resources(User, Server) of
2710+
[] ->
2711+
false;
2712+
Ss ->
2713+
lists:foldl(fun
2714+
(_, true) ->
2715+
true;
2716+
({_, R}, _Acc) ->
2717+
case Resource of
2718+
<<>> -> true;
2719+
R -> true;
2720+
_ -> false
2721+
end
2722+
end,
2723+
false, Ss)
2724+
end
27202725
end.
27212726

27222727
-spec state_can_deliver(ljid(), subOptions()) -> [ljid()].

0 commit comments

Comments
 (0)