From 469e93f37b0205b8c501cfbe4606c272b4ba55a3 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Wed, 9 Dec 2015 22:44:45 +0100 Subject: [PATCH] mod_mam: Don't store resent messages Make sure messages that were resent by the stream management code aren't stored in MAM. --- src/mod_mam.erl | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/mod_mam.erl b/src/mod_mam.erl index b1801fd32..7e2051057 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -363,18 +363,23 @@ should_archive(#xmlel{name = <<"message">>} = Pkt) -> <<"groupchat">> -> false; _ -> - case check_store_hint(Pkt) of - store -> - true; - no_store -> + case is_resent(Pkt) of + true -> false; - none -> - case xml:get_subtag_cdata(Pkt, <<"body">>) of - <<>> -> - %% Empty body + false -> + case check_store_hint(Pkt) of + store -> + true; + no_store -> false; - _ -> - true + none -> + case xml:get_subtag_cdata(Pkt, <<"body">>) of + <<>> -> + %% Empty body + false; + _ -> + true + end end end end; @@ -458,6 +463,14 @@ has_no_store_hint(Message) -> xml:get_subtag_with_xmlns(Message, <<"no-permanent-storage">>, ?NS_HINTS) /= false. +is_resent(Pkt) -> + case xml:get_subtag_cdata(Pkt, <<"delay">>) of + <<>> -> + false; + Desc -> + binary:match(Desc, <<"Resent">>) =/= nomatch + end. + store_msg(C2SState, Pkt, LUser, LServer, Peer, Dir) -> Prefs = get_prefs(LUser, LServer), case should_archive_peer(C2SState, Prefs, Peer) of