From 81b0643036b7a9ab62b247d8110b42f5b303606e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Mon, 6 Apr 2015 17:54:45 +0200 Subject: [PATCH] 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. --- src/ejabberd_http_ws.erl | 6 ++++-- 1 file 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},