mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-30 23:02:00 +02:00
Do not close session with an item-not-found error when
receiving duplicate request with same rid as the currently active one (EJABS-1844) (thanks to Pawel Chmielowski) Conflicts: src/web/ejabberd_bosh.erl
This commit is contained in:
parent
10f10a2fd3
commit
6b7d70adf6
|
@ -463,20 +463,18 @@ active1(#body{attrs = Attrs} = Req, From, State) ->
|
|||
{next_state, active,
|
||||
State1#state{receivers = Receivers}};
|
||||
RID =< State#state.prev_rid ->
|
||||
case gb_trees:lookup(RID, State#state.responses) of
|
||||
{value, PrevBody} ->
|
||||
{next_state, active,
|
||||
do_reply(State, From, PrevBody, RID)};
|
||||
none ->
|
||||
reply_stop(State,
|
||||
#body{http_reason =
|
||||
<<"Request ID is out of range">>,
|
||||
attrs =
|
||||
[{<<"type">>, <<"terminate">>},
|
||||
{<<"condition">>,
|
||||
<<"item-not-found">>}]},
|
||||
From, RID)
|
||||
end;
|
||||
%% TODO: do we need to check 'key' here? It seems so...
|
||||
case gb_trees:lookup(RID, State#state.responses) of
|
||||
{value, PrevBody} ->
|
||||
{next_state, active,
|
||||
do_reply(State, From, PrevBody, RID)};
|
||||
none ->
|
||||
State1 = drop_holding_receiver(State),
|
||||
State2 = restart_inactivity_timer(State1),
|
||||
Receivers = gb_trees:insert(RID, {From, Req},
|
||||
State2#state.receivers),
|
||||
{next_state, active, State2#state{receivers = Receivers}}
|
||||
end;
|
||||
not IsValidKey ->
|
||||
reply_stop(State,
|
||||
#body{http_reason = <<"Session key mismatch">>,
|
||||
|
|
Loading…
Reference in New Issue
Block a user