summaryrefslogtreecommitdiff
path: root/src/mod_pubsub.erl
diff options
context:
space:
mode:
authorEvgeny Khramtsov <xramtsov@gmail.com>2014-11-25 14:20:11 +0300
committerEvgeny Khramtsov <xramtsov@gmail.com>2014-11-25 14:20:11 +0300
commite97e56d776a8ad8ddc074bf62eeeaf8b0a68dead (patch)
tree7dc7c39776fe269d9dc2bc0b28e1ad090c22b5ac /src/mod_pubsub.erl
parentMerge pull request #354 from weiss/pep-privacy (diff)
parentDon't route PEP error messages to clients (diff)
Merge pull request #363 from weiss/drop-pep-errors
Don't route PEP error messages to clients
Diffstat (limited to 'src/mod_pubsub.erl')
-rw-r--r--src/mod_pubsub.erl34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl
index 8ba28e05..5f16fed7 100644
--- a/src/mod_pubsub.erl
+++ b/src/mod_pubsub.erl
@@ -74,7 +74,8 @@
on_user_offline/3, remove_user/2,
disco_local_identity/5, disco_local_features/5,
disco_local_items/5, disco_sm_identity/5,
- disco_sm_features/5, disco_sm_items/5]).
+ disco_sm_features/5, disco_sm_items/5,
+ drop_pep_error/4]).
%% exported iq handlers
-export([iq_sm/3]).
@@ -344,6 +345,8 @@ init([ServerHost, Opts]) ->
?MODULE, disco_sm_features, 75),
ejabberd_hooks:add(disco_sm_items, ServerHost, ?MODULE,
disco_sm_items, 75),
+ ejabberd_hooks:add(c2s_filter_packet_in, ServerHost, ?MODULE,
+ drop_pep_error, 75),
gen_iq_handler:add_iq_handler(ejabberd_sm, ServerHost,
?NS_PUBSUB, ?MODULE, iq_sm, IQDisc),
gen_iq_handler:add_iq_handler(ejabberd_sm, ServerHost,
@@ -1283,6 +1286,33 @@ unsubscribe_user(Entity, Owner) ->
end).
%% -------
+%% packet receive hook handling function
+%%
+
+drop_pep_error(#xmlel{name = <<"message">>, attrs = Attrs} = Packet, _JID, From,
+ #jid{lresource = <<"">>} = To) ->
+ case xml:get_attr_s(<<"type">>, Attrs) of
+ <<"error">> ->
+ case xml:get_subtag(Packet, <<"event">>) of
+ #xmlel{attrs = EventAttrs} ->
+ case xml:get_attr_s(<<"xmlns">>, EventAttrs) of
+ ?NS_PUBSUB_EVENT ->
+ ?DEBUG("Dropping PEP error message from ~s to ~s",
+ [jlib:jid_to_string(From),
+ jlib:jid_to_string(To)]),
+ drop;
+ _ ->
+ Packet
+ end;
+ false ->
+ Packet
+ end;
+ _ ->
+ Packet
+ end;
+drop_pep_error(Acc, _JID, _From, _To) -> Acc.
+
+%% -------
%% user remove hook handling function
%%
@@ -1422,6 +1452,8 @@ terminate(_Reason,
?MODULE, disco_sm_features, 75),
ejabberd_hooks:delete(disco_sm_items, ServerHost,
?MODULE, disco_sm_items, 75),
+ ejabberd_hooks:delete(c2s_filter_packet_in, ServerHost,
+ ?MODULE, drop_pep_error, 75),
gen_iq_handler:remove_iq_handler(ejabberd_sm,
ServerHost, ?NS_PUBSUB),
gen_iq_handler:remove_iq_handler(ejabberd_sm,