diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-02-07 00:28:55 +0300 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2016-02-07 00:28:55 +0300 |
commit | a31f59ea31d28e1b00c05e1d6147c76e5b566cf5 (patch) | |
tree | b2582398075e6d40c38d07d4ed2fd4f04f72deda /src/ejabberd_c2s.erl | |
parent | 7435ee464f3918be41f60901bbfdb87a9cc9b249 (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.erl | 12 |
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 -> |