]> granicus.if.org Git - ejabberd/commitdiff
Don't copy messages of type "normal" without body
authorHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 28 Jul 2015 19:34:02 +0000 (21:34 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Tue, 28 Jul 2015 19:34:02 +0000 (21:34 +0200)
Don't carbon-copy messages of type "normal" that don't have a body
element as an immediate subtag.  Those messages are usually generated by
clients or servers (as opposed to messages written by humans).  This
includes MAM messages, for example.

src/mod_carboncopy.erl

index 186aca5e3743aaee4aeb9728d3da0f8071b430aa..42c77f15023a06227983242b03be88958be14289 100644 (file)
@@ -136,7 +136,7 @@ user_receive_packet(Packet, _C2SState, JID, _From, To) ->
 %    - do not support "private" message mode, and do not modify the original packet in any way
 %    - we also replicate "read" notifications
 check_and_forward(JID, To, Packet, Direction)->
-    case is_chat_or_normal_message(Packet) andalso
+    case is_chat_message(Packet) andalso
             xml:get_subtag(Packet, <<"private">>) == false andalso
                 xml:get_subtag(Packet, <<"no-copy">>) == false of
        true ->
@@ -273,13 +273,16 @@ message_type(#xmlel{attrs = Attrs}) ->
        false -> <<"normal">>
     end.
 
-is_chat_or_normal_message(#xmlel{name = <<"message">>} = Packet) ->
+is_chat_message(#xmlel{name = <<"message">>} = Packet) ->
     case message_type(Packet) of
        <<"chat">> -> true;
-       <<"normal">> -> true;
+       <<"normal">> -> has_non_empty_body(Packet);
        _ -> false
     end;
-is_chat_or_normal_message(_Packet) -> false.
+is_chat_message(_Packet) -> false.
+
+has_non_empty_body(Packet) ->
+    xml:get_subtag_cdata(Packet, <<"body">>) =/= <<"">>.
 
 %% list {resource, cc_version} with carbons enabled for given user and host
 list(User, Server)->