]> granicus.if.org Git - ejabberd/commitdiff
Do not store mucsub wrapped messages with no-store hint in offline storage
authorPaweł Chmielowski <pchmielowski@process-one.net>
Mon, 6 May 2019 17:17:30 +0000 (19:17 +0200)
committerPaweł Chmielowski <pchmielowski@process-one.net>
Mon, 6 May 2019 17:22:18 +0000 (19:22 +0200)
We already don't store those messages in mam and we don't store messages
that aren't wrapped with that hint in offline, so it make sense to extend
it also to mucsub messages.

src/mod_offline.erl

index 0c70ae065ddd809c45c07be35c19ce0dd59ce002..3e240dbfb0a817f2fb19d1609cbb4d32694c82a1 100644 (file)
@@ -405,31 +405,38 @@ need_to_store(_LServer, #message{type = error}) -> false;
 need_to_store(LServer, #message{type = Type} = Packet) ->
     case xmpp:has_subtag(Packet, #offline{}) of
        false ->
-           case check_store_hint(Packet) of
-               store ->
-                   true;
-               no_store ->
-                   false;
-               none ->
-                   Store = case Type of
-                               groupchat ->
-                                   gen_mod:get_module_opt(
-                                     LServer, ?MODULE, store_groupchat);
-                               headline ->
-                                   false;
-                               _ ->
-                                   true
-                           end,
-                   case {Store, gen_mod:get_module_opt(
-                                  LServer, ?MODULE, store_empty_body)} of
-                       {false, _} ->
-                           false;
-                       {_, true} ->
+           case misc:unwrap_mucsub_message(Packet) of
+               #message{type = groupchat} = Msg ->
+                   need_to_store(LServer, Msg#message{type = chat});
+               #message{} = Msg ->
+                   need_to_store(LServer, Msg);
+               _ ->
+                   case check_store_hint(Packet) of
+                       store ->
                            true;
-                       {_, false} ->
-                           Packet#message.body /= [];
-                       {_, unless_chat_state} ->
-                           not misc:is_standalone_chat_state(Packet)
+                       no_store ->
+                           false;
+                       none ->
+                           Store = case Type of
+                                       groupchat ->
+                                           gen_mod:get_module_opt(
+                                               LServer, ?MODULE, store_groupchat);
+                                       headline ->
+                                           false;
+                                       _ ->
+                                           true
+                                   end,
+                           case {Store, gen_mod:get_module_opt(
+                               LServer, ?MODULE, store_empty_body)} of
+                               {false, _} ->
+                                   false;
+                               {_, true} ->
+                                   true;
+                               {_, false} ->
+                                   Packet#message.body /= [];
+                               {_, unless_chat_state} ->
+                                   not misc:is_standalone_chat_state(Packet)
+                           end
                    end
            end;
        true ->