From: Holger Weiss Date: Mon, 19 Sep 2016 20:46:36 +0000 (+0200) Subject: mod_carboncopy: Don't copy MUC PMs X-Git-Tag: 16.12~34 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e7787e2f335c44a5f88fea6d15d1e3a83ad55204;p=ejabberd 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. --- diff --git a/src/mod_carboncopy.erl b/src/mod_carboncopy.erl index de8d8e1a7..e1e6d63a2 100644 --- a/src/mod_carboncopy.erl +++ b/src/mod_carboncopy.erl @@ -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">>) =/= <<"">>.