aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2012-09-14 10:20:33 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2012-09-14 10:20:33 +0200
commit975f4c56d4d2b4fdecd4fa75364937c54c6dbf67 (patch)
treee52354b9f4223298c7280be5159e3f46ed3bdf71 /src
parentProperly 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.erl5
-rw-r--r--src/web/ejabberd_websocket.erl2
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,