aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mod_carboncopy.erl10
1 files changed, 8 insertions, 2 deletions
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">>) =/= <<"">>.