diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2015-12-29 09:54:48 +0100 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2015-12-29 09:54:48 +0100 |
commit | 4cdb30d59e008fa8946851bae6ae683ee84cfbc6 (patch) | |
tree | e20e04a5307e301029aaae443eb4ed9fcd567861 /src/mod_mam.erl | |
parent | Update translations (diff) |
mod_mam: Use <stanza-id/> tags for deduplication
Use <stanza-id/> elements instead of <delay/> tags to check for messages
resent by the stream management code. The <stanza-id/> element is
preferable, as it is added by mod_mam itself.
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r-- | src/mod_mam.erl | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 7124e2c6..6dfff605 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -166,7 +166,7 @@ user_receive_packet(Pkt, C2SState, JID, Peer, To) -> LUser = JID#jid.luser, LServer = JID#jid.lserver, IsBareCopy = is_bare_copy(JID, To), - case should_archive(Pkt) of + case should_archive(Pkt, LServer) of true when not IsBareCopy -> NewPkt = strip_my_archived_tag(Pkt, LServer), case store_msg(C2SState, NewPkt, LUser, LServer, Peer, recv) of @@ -191,7 +191,7 @@ user_receive_packet(Pkt, C2SState, JID, Peer, To) -> user_send_packet(Pkt, C2SState, JID, Peer) -> LUser = JID#jid.luser, LServer = JID#jid.lserver, - case should_archive(Pkt) of + case should_archive(Pkt, LServer) of true -> NewPkt = strip_my_archived_tag(Pkt, LServer), store_msg(C2SState, jlib:replace_from_to(JID, Peer, NewPkt), @@ -385,14 +385,14 @@ process_iq(LServer, From, To, IQ, SubEl, Fs, MsgType) -> With, RSM, IQ, MsgType) end. -should_archive(#xmlel{name = <<"message">>} = Pkt) -> +should_archive(#xmlel{name = <<"message">>} = Pkt, LServer) -> case xml:get_attr_s(<<"type">>, Pkt#xmlel.attrs) of <<"error">> -> false; <<"groupchat">> -> false; _ -> - case is_resent(Pkt) of + case is_resent(Pkt, LServer) of true -> false; false -> @@ -412,7 +412,7 @@ should_archive(#xmlel{name = <<"message">>} = Pkt) -> end end end; -should_archive(#xmlel{}) -> +should_archive(#xmlel{}, _LServer) -> false. strip_my_archived_tag(Pkt, LServer) -> @@ -492,12 +492,17 @@ 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 +is_resent(Pkt, LServer) -> + case xml:get_subtag_with_xmlns(Pkt, <<"stanza-id">>, ?NS_SID_0) of + #xmlel{attrs = Attrs} -> + case xml:get_attr(<<"by">>, Attrs) of + {value, LServer} -> + true; + _ -> + false + end; + false -> + false end. store_msg(C2SState, Pkt, LUser, LServer, Peer, Dir) -> |