24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-07-06 23:22:36 +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:
Evgeniy Khramtsov 2012-06-04 18:11:59 +10:00
parent 10f10a2fd3
commit 6b7d70adf6

View File

@ -463,20 +463,18 @@ active1(#body{attrs = Attrs} = Req, From, State) ->
{next_state, active, {next_state, active,
State1#state{receivers = Receivers}}; State1#state{receivers = Receivers}};
RID =< State#state.prev_rid -> RID =< State#state.prev_rid ->
case gb_trees:lookup(RID, State#state.responses) of %% TODO: do we need to check 'key' here? It seems so...
{value, PrevBody} -> case gb_trees:lookup(RID, State#state.responses) of
{next_state, active, {value, PrevBody} ->
do_reply(State, From, PrevBody, RID)}; {next_state, active,
none -> do_reply(State, From, PrevBody, RID)};
reply_stop(State, none ->
#body{http_reason = State1 = drop_holding_receiver(State),
<<"Request ID is out of range">>, State2 = restart_inactivity_timer(State1),
attrs = Receivers = gb_trees:insert(RID, {From, Req},
[{<<"type">>, <<"terminate">>}, State2#state.receivers),
{<<"condition">>, {next_state, active, State2#state{receivers = Receivers}}
<<"item-not-found">>}]}, end;
From, RID)
end;
not IsValidKey -> not IsValidKey ->
reply_stop(State, reply_stop(State,
#body{http_reason = <<"Session key mismatch">>, #body{http_reason = <<"Session key mismatch">>,