]> granicus.if.org Git - ejabberd/commitdiff
Fix check for standalone chat state notifications
authorHolger Weiss <holger@zedat.fu-berlin.de>
Sun, 24 Apr 2016 15:09:56 +0000 (17:09 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Sun, 24 Apr 2016 15:09:56 +0000 (17:09 +0200)
Ignore whitespace (and other XML CDATA) when checking whether a message
stanza is a standalone chat state notification.

src/jlib.erl

index 8eaebbc8061cfbcce77b1b594560789b3baa2f5c..407f43f178672021bb51e2c2504bd287d003d157 100644 (file)
@@ -530,22 +530,13 @@ rsm_encode_count(Count, Arr) ->
 
 -spec is_standalone_chat_state(xmlel()) -> boolean().
 
-is_standalone_chat_state(#xmlel{name = <<"message">>} = El) ->
+is_standalone_chat_state(#xmlel{name = <<"message">>, children = Els}) ->
     ChatStates = [<<"active">>, <<"inactive">>, <<"gone">>, <<"composing">>,
                  <<"paused">>],
-    Stripped =
-       lists:foldl(fun(ChatState, AccEl) ->
-                           fxml:remove_subtags(AccEl, ChatState,
-                                              {<<"xmlns">>, ?NS_CHATSTATES})
-                   end, El, ChatStates),
-    case Stripped of
-      #xmlel{children = [#xmlel{name = <<"thread">>}]} ->
-         true;
-      #xmlel{children = []} ->
-         true;
-      _ ->
-         false
-    end;
+    Stripped = [El || #xmlel{name = Name} = El <- Els,
+                     not lists:member(Name, ChatStates),
+                     Name /= <<"thread">>],
+    Stripped == [];
 is_standalone_chat_state(_El) -> false.
 
 -spec add_delay_info(xmlel(), jid() | ljid() | binary(), erlang:timestamp())