{timeout, TRef, ack_timeout}) ->
?DEBUG("Timed out waiting for stream management acknowledgement of ~s",
[jid:encode(JID)]),
- {stop, Mod:close(State, ack_timeout)};
+ State1 = Mod:close(State),
+ {stop, transition_to_pending(State1)};
c2s_handle_info(#{mgmt_state := pending, jid := JID, mod := Mod} = State,
{timeout, _, pending_timeout}) ->
?DEBUG("Timed out waiting for resumption of stream for ~s",
-spec close(pid()) -> ok;
(state()) -> state().
-close(Ref) ->
- close(Ref, closed).
-
--spec close(pid(), atom()) -> ok;
- (state(), atom()) -> state().
-close(Pid, Reason) when is_pid(Pid) ->
- cast(Pid, {close, Reason});
-close(#{owner := Owner} = State, Reason) when Owner == self() ->
- case is_disconnected(State) of
- true -> State;
- false ->
- _IgnoreState = close_socket(State),
- process_stream_end({socket, Reason}, State)
- end;
-close(_, _) ->
+close(Pid) when is_pid(Pid) ->
+ close(Pid, closed);
+close(#{owner := Owner} = State) when Owner == self() ->
+ close_socket(State);
+close(_) ->
erlang:error(badarg).
+-spec close(pid(), atom()) -> ok.
+close(Pid, Reason) ->
+ cast(Pid, {close, Reason}).
+
-spec establish(state()) -> state().
establish(State) ->
process_stream_established(State).
handle_cast(stop, State) ->
{stop, normal, State};
handle_cast({close, Reason}, State) ->
- noreply(close(State, Reason));
+ State1 = close_socket(State),
+ noreply(
+ case is_disconnected(State) of
+ true -> State1;
+ false -> process_stream_end({socket, Reason}, State)
+ end);
handle_cast(Cast, #{mod := Mod} = State) ->
noreply(try Mod:handle_cast(Cast, State)
catch _:undef -> State
-spec close(pid()) -> ok;
(state()) -> state().
-close(Ref) ->
- close(Ref, closed).
-
--spec close(pid(), atom()) -> ok;
- (state(), atom()) -> state().
-close(Pid, Reason) when is_pid(Pid) ->
- cast(Pid, {close, Reason});
-close(#{owner := Owner} = State, Reason) when Owner == self() ->
- case is_disconnected(State) of
- true -> State;
- false ->
- _IgnoreState = close_socket(State),
- process_stream_end({socket, Reason}, State)
- end;
-close(_, _) ->
+close(Pid) when is_pid(Pid) ->
+ close(Pid, closed);
+close(#{owner := Owner} = State) when Owner == self() ->
+ close_socket(State);
+close(_) ->
erlang:error(badarg).
+-spec close(pid(), atom()) -> ok.
+close(Pid, Reason) ->
+ cast(Pid, {close, Reason}).
+
-spec establish(state()) -> state().
establish(State) ->
process_stream_established(State).
handle_cast(stop, State) ->
{stop, normal, State};
handle_cast({close, Reason}, State) ->
- noreply(close(State, Reason));
+ State1 = close_socket(State),
+ noreply(
+ case is_disconnected(State) of
+ true -> State1;
+ false -> process_stream_end({socket, Reason}, State)
+ end);
handle_cast(Cast, #{mod := Mod} = State) ->
noreply(try Mod:handle_cast(Cast, State)
catch _:undef -> State