mod_carboncopy: Don't copy MUC PMs

Carbon copies of private MUC message are generally not desired,
especially not when multiple clients joined the room with the same nick.
In this case, the MUC service usually sends PMs to all joined resources
anyway, so carbon-copying those PMs would create duplicates.
This commit is contained in:
Holger Weiss 2016-09-19 22:46:36 +02:00
parent 5bcfcf4c5e
commit e7787e2f33
1 changed files with 8 additions and 2 deletions

View File

@ -131,8 +131,9 @@ user_receive_packet(Packet, _C2SState, JID, _From, To) ->
% - we also replicate "read" notifications
check_and_forward(JID, To, Packet, Direction)->
case is_chat_message(Packet) andalso
fxml:get_subtag(Packet, <<"private">>) == false andalso
fxml:get_subtag(Packet, <<"no-copy">>) == false of
not is_muc_pm(To, Packet) andalso
fxml:get_subtag(Packet, <<"private">>) == false andalso
fxml:get_subtag(Packet, <<"no-copy">>) == false of
true ->
case is_carbon_copy(Packet) of
false ->
@ -270,6 +271,11 @@ is_chat_message(#xmlel{name = <<"message">>} = Packet) ->
end;
is_chat_message(_Packet) -> false.
is_muc_pm(#jid{lresource = <<>>}, _Packet) ->
false;
is_muc_pm(_To, Packet) ->
fxml:get_subtag_with_xmlns(Packet, <<"x">>, ?NS_MUC_USER) =/= false.
has_non_empty_body(Packet) ->
fxml:get_subtag_cdata(Packet, <<"body">>) =/= <<"">>.