]> granicus.if.org Git - ejabberd/commitdiff
Simplify mod_carboncopy:check_and_forward/4
authorHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 30 May 2014 21:44:19 +0000 (23:44 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 30 May 2014 21:44:19 +0000 (23:44 +0200)
Use the existing is_carbon_copy/1 function, and combine multiple case
clauses into a single one.

src/mod_carboncopy.erl

index 4cf3bed71f1803632c61291a53bac87aa4a93743..9c8494bba8ea6433716140eb2885b7167dd7aa99 100644 (file)
@@ -143,44 +143,20 @@ user_receive_packet(JID, _From, To, Packet) ->
 %    - 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, #xmlel{name = <<"message">>, attrs = Attrs} = Packet, Direction)->
-    case xml:get_attr_s(<<"type">>, Attrs) of 
-      <<"chat">> ->
-       case xml:get_subtag(Packet, <<"private">>) of
-           false ->
-               case xml:get_subtag(Packet, <<"no-copy">>) of
-                   false ->
-                       case xml:get_subtag(Packet,<<"received">>) of
-                           false ->
-                               %% We must check if a packet contains "<sent><forwarded></sent></forwarded>"
-                               %% tags in order to avoid receiving message back to original sender.
-                               SubTag = xml:get_subtag(Packet,<<"sent">>),
-                               if SubTag == false ->
-                                   send_copies(JID, To, Packet, Direction);
-                                  true ->
-                                   case xml:get_subtag(Packet,<<"forwarded">>) of
-                                       false->
-                                           case xml:get_subtag(SubTag,<<"forwarded">>) of
-                                               false ->
-                                                   send_copies(JID, To, Packet, Direction);
-                                               _ ->
-                                                   stop
-                                           end;
-                                       _ ->
-                                           stop
-                                   end
-                               end;
-                           _ ->
-                               %% stop the hook chain, we don't want mod_logdb to register this message (duplicate)
-                               stop
-                       end;
-                   _ ->
-                       ok
-               end;
-           _ ->
-               ok
-       end;
-    _ ->
-       ok
+    case xml:get_attr_s(<<"type">>, Attrs) == <<"chat">> andalso
+            xml:get_subtag(Packet, <<"private">>) == false andalso
+                xml:get_subtag(Packet, <<"no-copy">>) == false of
+       true ->
+           case is_carbon_copy(Packet) of
+               false ->
+                   send_copies(JID, To, Packet, Direction);
+               true ->
+                   %% stop the hook chain, we don't want mod_logdb to register
+                   %% this message (duplicate)
+                   stop
+           end;
+        _ ->
+           ok
     end;
  
 check_and_forward(_JID, _To, _Packet, _)-> ok.