From a31f59ea31d28e1b00c05e1d6147c76e5b566cf5 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Sat, 6 Feb 2016 22:28:55 +0100 Subject: [PATCH] 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. --- src/ejabberd_c2s.erl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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 ->