Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2020-04-16 14:04:12 +0300
committerPaweł Chmielowski <pchmielowski@process-one.net>2020-04-16 14:04:12 +0300
commit37226dd41fc2c3584e299cd80d3c4e1f3802450e (patch)
tree0fdee096e11349a7a717666370004f18416f8ab8
parentcd0b65f4d5d1af1b0d706d3c307687dce17ca3b2 (diff)
Resending unacked stanzas should send even archived msgs if mod_offline is enabled
Messages that are received when no c2s is active will be stored in offline, even when mam archived them, so i don't think we should be doing something different in this case.
-rw-r--r--src/mod_stream_mgmt.erl30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/mod_stream_mgmt.erl b/src/mod_stream_mgmt.erl
index 0c73eb7f7..45d52ccb0 100644
--- a/src/mod_stream_mgmt.erl
+++ b/src/mod_stream_mgmt.erl
@@ -605,6 +605,7 @@ route_unacked_stanzas(#{mgmt_state := MgmtState,
end,
?DEBUG("Re-routing ~B unacknowledged stanza(s) to ~ts",
[p1_queue:len(Queue), jid:encode(JID)]),
+ ModOfflineEnabled = gen_mod:is_loaded(LServer, mod_offline),
p1_queue:foreach(
fun({_, _Time, #presence{from = From}}) ->
?DEBUG("Dropping presence stanza from ~ts", [jid:encode(From)]);
@@ -621,20 +622,21 @@ route_unacked_stanzas(#{mgmt_state := MgmtState,
?DEBUG("Dropping forwarded message stanza from ~ts",
[jid:encode(From)]);
({_, Time, #message{} = Msg}) ->
- case ejabberd_hooks:run_fold(message_is_archived,
- LServer, false,
- [State, Msg]) of
- true ->
- ?DEBUG("Dropping archived message stanza from ~ts",
- [jid:encode(xmpp:get_from(Msg))]);
- false when ResendOnTimeout ->
- NewEl = add_resent_delay_info(State, Msg, Time),
- ejabberd_router:route(NewEl);
- false ->
- Txt = ?T("User session terminated"),
- ejabberd_router:route_error(
- Msg, xmpp:err_service_unavailable(Txt, Lang))
- end;
+ case {ModOfflineEnabled, ResendOnTimeout,
+ xmpp:get_meta(Msg, mam_archived, false)} of
+ Val when Val == {true, true, false};
+ Val == {true, true, true};
+ Val == {false, true, false} ->
+ NewEl = add_resent_delay_info(State, Msg, Time),
+ ejabberd_router:route(NewEl);
+ {_, _, true} ->
+ ?DEBUG("Dropping archived message stanza from ~s",
+ [jid:encode(xmpp:get_from(Msg))]);
+ _ ->
+ Txt = ?T("User session terminated"),
+ ejabberd_router:route_error(
+ Msg, xmpp:err_service_unavailable(Txt, Lang))
+ end;
({_, _Time, El}) ->
%% Raw element of type 'error' resulting from a validation error
%% We cannot pass it to the router, it will generate an error