diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2015-04-06 18:54:45 +0300 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2015-04-06 18:54:45 +0300 |
commit | 81b0643036b7a9ab62b247d8110b42f5b303606e (patch) | |
tree | 307c1239d02d5fe353c073d854535886ac174a67 /src/ejabberd_http_ws.erl | |
parent | 64978b3d9c15ab8ea751c781a8b5e6a786509a2f (diff) |
Fix problem with c2s buffering on old style websocket connections
Old style websocket do use binaries for transferring data to C2S, so when
we buffer that data we need to handle it different than list of #xml structs
used by new style connections.
This fixes github issue #515.
Diffstat (limited to 'src/ejabberd_http_ws.erl')
-rw-r--r-- | src/ejabberd_http_ws.erl | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/ejabberd_http_ws.erl b/src/ejabberd_http_ws.erl index ab83fc50b..0808ffd97 100644 --- a/src/ejabberd_http_ws.erl +++ b/src/ejabberd_http_ws.erl @@ -138,7 +138,9 @@ handle_event({activate, From}, StateName, StateData) -> StateData#state{waiting_input = From}}; Input -> Receiver = From, - Receiver ! {tcp, StateData#state.socket, Input}, + lists:foreach(fun(I) -> + Receiver ! {tcp, StateData#state.socket, I} + end, Input), {next_state, StateName, StateData#state{input = [], waiting_input = false, last_receiver = Receiver}} @@ -209,7 +211,7 @@ handle_info({received, Packet}, StateName, StateDataI) -> {StateData, Parsed} = parse(StateDataI, Packet), SD = case StateData#state.waiting_input of false -> - Input = StateData#state.input ++ Parsed, + Input = StateData#state.input ++ if is_binary(Parsed) -> [Parsed]; true -> Parsed end, StateData#state{input = Input}; Receiver -> Receiver ! {tcp, StateData#state.socket, Parsed}, |