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.
This commit is contained in:
Holger Weiss 2016-02-06 22:28:55 +01:00
parent 7435ee464f
commit a31f59ea31
1 changed files with 10 additions and 2 deletions

View File

@ -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 ->