Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2015-04-06 18:54:45 +0300
committerPaweł Chmielowski <pchmielowski@process-one.net>2015-04-06 18:54:45 +0300
commit81b0643036b7a9ab62b247d8110b42f5b303606e (patch)
tree307c1239d02d5fe353c073d854535886ac174a67 /src/ejabberd_http_ws.erl
parent64978b3d9c15ab8ea751c781a8b5e6a786509a2f (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.erl6
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},