diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2012-09-14 10:20:33 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2012-09-14 10:20:33 +0200 |
commit | 975f4c56d4d2b4fdecd4fa75364937c54c6dbf67 (patch) | |
tree | e52354b9f4223298c7280be5159e3f46ed3bdf71 /src | |
parent | Properly handle websocket sub-protocols (diff) |
Don't try to decode utf-8 codepoints in ej_websocket only to convert it back to utf-8 in ej_http_ws
Additionally that conversion code was wrong sometimes and lead to loosing
some bits of information.
This fixes EJABS-1875
Diffstat (limited to 'src')
-rw-r--r-- | src/web/ejabberd_http_ws.erl | 5 | ||||
-rw-r--r-- | src/web/ejabberd_websocket.erl | 2 |
2 files changed, 3 insertions, 4 deletions
diff --git a/src/web/ejabberd_http_ws.erl b/src/web/ejabberd_http_ws.erl index 28f9c4763..ec3bd4a09 100644 --- a/src/web/ejabberd_http_ws.erl +++ b/src/web/ejabberd_http_ws.erl @@ -143,13 +143,12 @@ handle_sync_event(close, _From, _StateName, StateData) -> handle_info(closed, _StateName, StateData) -> {stop, normal, StateData}; handle_info({browser, Packet}, StateName, StateData) -> - NPacket = unicode:characters_to_binary(Packet, latin1), NewState = case StateData#state.waiting_input of false -> - Input = <<(StateData#state.input)/binary, NPacket/binary>>, + Input = <<(StateData#state.input)/binary, Packet/binary>>, StateData#state{input = Input}; Receiver -> - Receiver ! {tcp, StateData#state.socket, NPacket}, + Receiver ! {tcp, StateData#state.socket, Packet}, cancel_timer(StateData#state.timer), Timer = erlang:start_timer(StateData#state.timeout, self(), []), diff --git a/src/web/ejabberd_websocket.erl b/src/web/ejabberd_websocket.erl index cfcec4f63..5d1d2fbac 100644 --- a/src/web/ejabberd_websocket.erl +++ b/src/web/ejabberd_websocket.erl @@ -360,7 +360,7 @@ process_hixie_68({_, L}, <<255, T/binary>>) -> {L2, Recv, Send} = process_hixie_68({false, <<>>}, T), {L2, [L | Recv], Send}; process_hixie_68({true, L}, <<H/utf8, T/binary>>) -> - process_hixie_68({true, <<L/binary, H>>}, T). + process_hixie_68({true, <<L/binary, H/utf8>>}, T). -record(hybi_8_state, {mask = none, offset = 0, left, final_frame = true, |