aboutsummaryrefslogtreecommitdiff
path: root/src/mod_mam.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl39
1 files changed, 4 insertions, 35 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index 61754ae59..0433dee79 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -200,12 +200,11 @@ set_room_option(Acc, _Property, _Lang) ->
Acc.
-spec user_receive_packet(stanza(), ejabberd_c2s:state(), jid(), jid(), jid()) -> stanza().
-user_receive_packet(Pkt, C2SState, JID, Peer, To) ->
+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, LServer) of
- true when not IsBareCopy ->
+ true ->
NewPkt = strip_my_archived_tag(Pkt, LServer),
case store_msg(C2SState, NewPkt, LUser, LServer, Peer, recv) of
{ok, ID} ->
@@ -454,6 +453,8 @@ process_iq(LServer, #iq{from = #jid{luser = LUser}, lang = Lang,
should_archive(#message{type = error}, _LServer) ->
false;
+should_archive(#message{meta = #{sm_copy := true}}, _LServer) ->
+ false;
should_archive(#message{body = Body, subject = Subject,
type = Type} = Pkt, LServer) ->
case is_resent(Pkt, LServer) of
@@ -812,38 +813,6 @@ maybe_update_from_to(#message{sub_els = Els} = Pkt, JidRequestor, JidArchive,
maybe_update_from_to(Pkt, _JidRequestor, _JidArchive, _Peer, chat, _Nick) ->
Pkt.
-is_bare_copy(#jid{luser = U, lserver = S, lresource = R}, To) ->
- PrioRes = ejabberd_sm:get_user_present_resources(U, S),
- MaxRes = case catch lists:max(PrioRes) of
- {_Prio, Res} when is_binary(Res) ->
- Res;
- _ ->
- undefined
- end,
- IsBareTo = case To of
- #jid{lresource = <<"">>} ->
- true;
- #jid{lresource = LRes} ->
- %% Unavailable resources are handled like bare JIDs.
- lists:keyfind(LRes, 2, PrioRes) =:= false
- end,
- case {IsBareTo, R} of
- {true, MaxRes} ->
- ?DEBUG("Recipient of message to bare JID has top priority: ~s@~s/~s",
- [U, S, R]),
- false;
- {true, _R} ->
- %% The message was sent to our bare JID, and we currently have
- %% multiple resources with the same highest priority, so the session
- %% manager routes the message to each of them. We store the message
- %% only from the resource where R equals MaxRes.
- ?DEBUG("Additional recipient of message to bare JID: ~s@~s/~s",
- [U, S, R]),
- true;
- {false, _R} ->
- false
- end.
-
-spec send([{binary(), integer(), xmlel()}],
non_neg_integer(), boolean(), iq()) -> iq() | ignore.
send(Msgs, Count, IsComplete,