aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2018-07-26 18:55:30 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2018-07-26 18:56:05 +0200
commit1af2cf37ea36bb4064aeb8dd87a12a3e8a291595 (patch)
tree59d5e09c7cbd8d29a782f1e19edf334e9b06166b /src
parentMake 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.erl25
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",