diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-07-26 18:55:30 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-07-26 18:56:05 +0200 |
commit | 1af2cf37ea36bb4064aeb8dd87a12a3e8a291595 (patch) | |
tree | 59d5e09c7cbd8d29a782f1e19edf334e9b06166b /src | |
parent | Make sure that we always start inactivity timer from drop_holding_receiver (diff) |
Wait for more data than just <stream:stream> before sending in bosh
This fixes issue #2545
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_bosh.erl | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/ejabberd_bosh.erl b/src/ejabberd_bosh.erl index bbbdaadc7..1a650803e 100644 --- a/src/ejabberd_bosh.erl +++ b/src/ejabberd_bosh.erl @@ -365,15 +365,22 @@ wait_for_session(#body{attrs = Attrs} = Req, From, {State3, RespEls} = get_response_els(State2), State4 = stop_inactivity_timer(State3), case RespEls of - [] -> - State5 = restart_wait_timer(State4), - Receivers = gb_trees:insert(RID, {From, Resp}, - State5#state.receivers), - {next_state, active, - State5#state{receivers = Receivers}}; - _ -> - reply_next_state(State4, Resp#body{els = RespEls}, RID, - From) + [{xmlstreamstart, _, _} = El1] -> + OutBuf = buf_in([El1], State4#state.el_obuf), + State5 = restart_wait_timer(State4), + Receivers = gb_trees:insert(RID, {From, Resp}, + State5#state.receivers), + {next_state, active, + State5#state{receivers = Receivers, el_obuf = OutBuf}}; + [] -> + State5 = restart_wait_timer(State4), + Receivers = gb_trees:insert(RID, {From, Resp}, + State5#state.receivers), + {next_state, active, + State5#state{receivers = Receivers}}; + _ -> + reply_next_state(State4, Resp#body{els = RespEls}, RID, + From) end; wait_for_session(_Event, _From, State) -> ?ERROR_MSG("unexpected sync event in 'wait_for_session': ~p", |