0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 20:30:23 +00:00

Fix a crash in websocket_handshake/3 with hixie-76

Happened when an error occurred while trying to read the body to
get the key. Also fixes all the dialyzer warnings in cowboy_http_websocket.
This commit is contained in:
Loïc Hoguin 2011-12-06 12:54:09 +01:00
parent 3649b0ee0d
commit a12a910341

View file

@ -178,11 +178,15 @@ websocket_handshake(State=#state{version=0, origin=Origin,
%% We replied with a proper response. Proxies should be happy enough,
%% we can now read the 8 last bytes of the challenge keys and send
%% the challenge response directly to the socket.
{ok, Key3, Req3} = cowboy_http_req:body(8, Req2),
Challenge = hixie76_challenge(Key1, Key2, Key3),
Transport:send(Socket, Challenge),
handler_before_loop(State#state{messages=Transport:messages()},
Req3, HandlerState, <<>>);
case cowboy_http_req:body(8, Req2) of
{ok, Key3, Req3} ->
Challenge = hixie76_challenge(Key1, Key2, Key3),
Transport:send(Socket, Challenge),
handler_before_loop(State#state{messages=Transport:messages()},
Req3, HandlerState, <<>>);
_Any ->
ok %% If an error happened reading the body, stop there.
end;
websocket_handshake(State=#state{challenge=Challenge},
Req=#http_req{transport=Transport}, HandlerState) ->
{ok, Req2} = cowboy_http_req:upgrade_reply(