From: Holger Weiss Date: Sat, 6 Feb 2016 21:28:55 +0000 (+0100) Subject: XEP-0198: Fix session timeout corner case X-Git-Tag: 16.02~51 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a31f59ea31d28e1b00c05e1d6147c76e5b566cf5;p=ejabberd XEP-0198: Fix session timeout corner case If the "resend_on_timeout" option is set to 'if_offline' and a pending stream management session is terminated because a new session is opened by the same resource (while no other resource is online), resend unacknowledged messages rather than bouncing error messages. --- diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 19fde38ff..8959ae50e 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -2833,8 +2833,16 @@ handle_unacked_stanzas(StateData) Resend when is_boolean(Resend) -> Resend; if_offline -> - ejabberd_sm:get_user_resources(StateData#state.user, - StateData#state.server) == [] + Resource = StateData#state.resource, + case ejabberd_sm:get_user_resources(StateData#state.user, + StateData#state.server) of + [Resource] -> % Same resource opened new session + true; + [] -> + true; + _ -> + false + end end, ReRoute = case ResendOnTimeout of true ->