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:
authorHolger Weiss <holger@zedat.fu-berlin.de>2016-02-07 00:28:55 +0300
committerHolger Weiss <holger@zedat.fu-berlin.de>2016-02-07 00:28:55 +0300
commita31f59ea31d28e1b00c05e1d6147c76e5b566cf5 (patch)
treeb2582398075e6d40c38d07d4ed2fd4f04f72deda /src/ejabberd_c2s.erl
parent7435ee464f3918be41f60901bbfdb87a9cc9b249 (diff)
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.
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl12
1 files 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 ->