diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2014-11-14 01:03:26 +0100 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2014-11-14 01:03:26 +0100 |
commit | 830fdccd21c3a4b25b319ba0c33a14d14c42a25e (patch) | |
tree | 1ccdf0c40de882e2ddd2d9d4e66b851c4bb36e16 /src/mod_caps.erl | |
parent | Move routing of last PEP items into new function (diff) |
Don't broadcast last published PEP items
When a client becomes available, don't send the last published PEP items
of all his peers to all his other peers, but only to that client.
Diffstat (limited to 'src/mod_caps.erl')
-rw-r--r-- | src/mod_caps.erl | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mod_caps.erl b/src/mod_caps.erl index bad949c1..1002df44 100644 --- a/src/mod_caps.erl +++ b/src/mod_caps.erl @@ -48,7 +48,8 @@ %% hook handlers -export([user_send_packet/3, user_receive_packet/4, - c2s_presence_in/2, c2s_broadcast_recipients/6]). + c2s_presence_in/2, c2s_filter_packet/6, + c2s_broadcast_recipients/6]). -include("ejabberd.hrl"). -include("logger.hrl"). @@ -266,6 +267,21 @@ c2s_presence_in(C2SState, true -> C2SState end. +c2s_filter_packet(InAcc, Host, C2SState, {pep_message, Feature}, To, _Packet) -> + case ejabberd_c2s:get_aux_field(caps_resources, C2SState) of + {ok, Rs} -> + LTo = jlib:jid_tolower(To), + case gb_trees:lookup(LTo, Rs) of + {value, Caps} -> + Drop = not lists:member(Feature, get_features(Host, Caps)), + {stop, Drop}; + none -> + {stop, true} + end; + _ -> InAcc + end; +c2s_filter_packet(Acc, _, _, _, _, _) -> Acc. + c2s_broadcast_recipients(InAcc, Host, C2SState, {pep_message, Feature}, _From, _Packet) -> case ejabberd_c2s:get_aux_field(caps_resources, @@ -317,6 +333,8 @@ init([Host, Opts]) -> [{max_size, MaxSize}, {life_time, LifeTime}]), ejabberd_hooks:add(c2s_presence_in, Host, ?MODULE, c2s_presence_in, 75), + ejabberd_hooks:add(c2s_filter_packet, Host, ?MODULE, + c2s_filter_packet, 75), ejabberd_hooks:add(c2s_broadcast_recipients, Host, ?MODULE, c2s_broadcast_recipients, 75), ejabberd_hooks:add(user_send_packet, Host, ?MODULE, @@ -348,6 +366,8 @@ terminate(_Reason, State) -> Host = State#state.host, ejabberd_hooks:delete(c2s_presence_in, Host, ?MODULE, c2s_presence_in, 75), + ejabberd_hooks:delete(c2s_filter_packet, Host, ?MODULE, + c2s_filter_packet, 75), ejabberd_hooks:delete(c2s_broadcast_recipients, Host, ?MODULE, c2s_broadcast_recipients, 75), ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, |