You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ro...@apache.org on 2015/06/29 23:46:40 UTC
[34/50] couch commit: updated refs/heads/COUCHDB-2734-header-date to
f3e022c
clean up whitespace and long lines
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/74d6cdc7
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/74d6cdc7
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/74d6cdc7
Branch: refs/heads/COUCHDB-2734-header-date
Commit: 74d6cdc7efc70e3024458ad0d7da3104233348b5
Parents: ef24a57
Author: Bob Ippolito <bo...@redivi.com>
Authored: Thu Dec 26 10:03:07 2013 -0800
Committer: Bob Ippolito <bo...@redivi.com>
Committed: Thu Dec 26 10:07:27 2013 -0800
----------------------------------------------------------------------
src/mochiweb_websocket.erl | 141 ++++++++++++++-------------------
test/mochiweb_websocket_tests.erl | 71 ++++++++++-------
2 files changed, 103 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/74d6cdc7/src/mochiweb_websocket.erl
----------------------------------------------------------------------
diff --git a/src/mochiweb_websocket.erl b/src/mochiweb_websocket.erl
index 3b87629..e5aff05 100644
--- a/src/mochiweb_websocket.erl
+++ b/src/mochiweb_websocket.erl
@@ -30,7 +30,8 @@
loop(Socket, Body, State, WsVersion, ReplyChannel) ->
ok = mochiweb_socket:setopts(Socket, [{packet, 0}, {active, once}]),
- proc_lib:hibernate(?MODULE, request, [Socket, Body, State, WsVersion, ReplyChannel]).
+ proc_lib:hibernate(?MODULE, request,
+ [Socket, Body, State, WsVersion, ReplyChannel]).
request(Socket, Body, State, WsVersion, ReplyChannel) ->
receive
@@ -43,22 +44,18 @@ request(Socket, Body, State, WsVersion, ReplyChannel) ->
{tcp_error, _, _} ->
mochiweb_socket:close(Socket),
exit(normal);
-
{tcp, _, WsFrames} ->
case parse_frames(WsVersion, WsFrames, Socket) of
close ->
mochiweb_socket:close(Socket),
exit(normal);
-
error ->
mochiweb_socket:close(Socket),
exit(normal);
-
Payload ->
NewState = call_body(Body, Payload, State, ReplyChannel),
loop(Socket, Body, NewState, WsVersion, ReplyChannel)
end;
-
_ ->
mochiweb_socket:close(Socket),
exit(normal)
@@ -75,7 +72,6 @@ send(Socket, Payload, hybi) ->
Len = payload_length(iolist_size(Payload)),
Data = <<1:1, 0:3, 1:4, 0:1, Len/bits, Payload/binary>>,
mochiweb_socket:send(Socket, Data);
-
send(Socket, Payload, hixie) ->
Data = <<0, Payload/binary, 255>>,
mochiweb_socket:send(Socket, Data).
@@ -120,7 +116,6 @@ hybi_handshake(SecKey) ->
BinKey = list_to_binary(SecKey),
Bin = <<BinKey/binary, "258EAFA5-E914-47DA-95CA-C5AB0DC85B11">>,
Challenge = base64:encode(crypto:hash(sha, Bin)),
-
Response = {101, [{"Connection", "Upgrade"},
{"Upgrade", "websocket"},
{"Sec-Websocket-Accept", Challenge}], ""},
@@ -135,23 +130,23 @@ scheme(Req) ->
end.
hixie_handshake(Scheme, Host, Path, Key1, Key2, Body, Origin) ->
- Ikey1 = [D || D <- Key1, $0 =< D, D =< $9],
- Ikey2 = [D || D <- Key2, $0 =< D, D =< $9],
- Blank1 = length([D || D <- Key1, D =:= 32]),
- Blank2 = length([D || D <- Key2, D =:= 32]),
- Part1 = erlang:list_to_integer(Ikey1) div Blank1,
- Part2 = erlang:list_to_integer(Ikey2) div Blank2,
- Ckey = <<Part1:4/big-unsigned-integer-unit:8, Part2:4/big-unsigned-integer-unit:8, Body/binary>>,
- Challenge = erlang:md5(Ckey),
-
- Location = lists:concat([Scheme, Host, Path]),
-
- Response = {101, [{"Upgrade", "WebSocket"},
- {"Connection", "Upgrade"},
- {"Sec-WebSocket-Origin", Origin},
- {"Sec-WebSocket-Location", Location}],
- Challenge},
- {hixie, Response}.
+ Ikey1 = [D || D <- Key1, $0 =< D, D =< $9],
+ Ikey2 = [D || D <- Key2, $0 =< D, D =< $9],
+ Blank1 = length([D || D <- Key1, D =:= 32]),
+ Blank2 = length([D || D <- Key2, D =:= 32]),
+ Part1 = erlang:list_to_integer(Ikey1) div Blank1,
+ Part2 = erlang:list_to_integer(Ikey2) div Blank2,
+ Ckey = <<Part1:4/big-unsigned-integer-unit:8,
+ Part2:4/big-unsigned-integer-unit:8,
+ Body/binary>>,
+ Challenge = erlang:md5(Ckey),
+ Location = lists:concat([Scheme, Host, Path]),
+ Response = {101, [{"Upgrade", "WebSocket"},
+ {"Connection", "Upgrade"},
+ {"Sec-WebSocket-Origin", Origin},
+ {"Sec-WebSocket-Location", Location}],
+ Challenge},
+ {hixie, Response}.
parse_frames(hybi, Frames, Socket) ->
try parse_hybi_frames(Socket, Frames, []) of
@@ -159,7 +154,6 @@ parse_frames(hybi, Frames, Socket) ->
catch
_:_ -> error
end;
-
parse_frames(hixie, Frames, _Socket) ->
try parse_hixie_frames(Frames, []) of
Payload -> Payload
@@ -172,7 +166,6 @@ parse_frames(hixie, Frames, _Socket) ->
%%
process_frames([], Acc) ->
lists:reverse(Acc);
-
process_frames([{Opcode, Payload} | Rest], Acc) ->
case Opcode of
8 -> close;
@@ -182,43 +175,38 @@ process_frames([{Opcode, Payload} | Rest], Acc) ->
parse_hybi_frames(_, <<>>, Acc) ->
lists:reverse(Acc);
-
parse_hybi_frames(S, <<_Fin:1,
- _Rsv:3,
- Opcode:4,
- _Mask:1,
- PayloadLen:7,
- MaskKey:4/binary,
- Payload:PayloadLen/binary-unit:8,
- Rest/binary>>,
- Acc) when PayloadLen < 126 ->
-
+ _Rsv:3,
+ Opcode:4,
+ _Mask:1,
+ PayloadLen:7,
+ MaskKey:4/binary,
+ Payload:PayloadLen/binary-unit:8,
+ Rest/binary>>,
+ Acc) when PayloadLen < 126 ->
Payload2 = hybi_unmask(Payload, MaskKey, <<>>),
parse_hybi_frames(S, Rest, [{Opcode, Payload2} | Acc]);
-
parse_hybi_frames(S, <<_Fin:1,
- _Rsv:3,
- Opcode:4,
- _Mask:1,
- 126:7,
- PayloadLen:16,
- MaskKey:4/binary,
- Payload:PayloadLen/binary-unit:8,
- Rest/binary>>,
- Acc) ->
-
+ _Rsv:3,
+ Opcode:4,
+ _Mask:1,
+ 126:7,
+ PayloadLen:16,
+ MaskKey:4/binary,
+ Payload:PayloadLen/binary-unit:8,
+ Rest/binary>>,
+ Acc) ->
Payload2 = hybi_unmask(Payload, MaskKey, <<>>),
parse_hybi_frames(S, Rest, [{Opcode, Payload2} | Acc]);
-
parse_hybi_frames(Socket, <<_Fin:1,
- _Rsv:3,
- _Opcode:4,
- _Mask:1,
- 126:7,
- _PayloadLen:16,
- _MaskKey:4/binary,
- _/binary-unit:8>> = PartFrame,
- Acc) ->
+ _Rsv:3,
+ _Opcode:4,
+ _Mask:1,
+ 126:7,
+ _PayloadLen:16,
+ _MaskKey:4/binary,
+ _/binary-unit:8>> = PartFrame,
+ Acc) ->
ok = mochiweb_socket:setopts(Socket, [{packet, 0}, {active, once}]),
receive
@@ -231,10 +219,9 @@ parse_hybi_frames(Socket, <<_Fin:1,
{tcp_error, _, _} ->
mochiweb_socket:close(Socket),
exit(normal);
-
{tcp, _, Continuation} ->
- parse_hybi_frames(Socket, <<PartFrame/binary, Continuation/binary>>, Acc);
-
+ parse_hybi_frames(Socket, <<PartFrame/binary, Continuation/binary>>,
+ Acc);
_ ->
mochiweb_socket:close(Socket),
exit(normal)
@@ -243,39 +230,33 @@ parse_hybi_frames(Socket, <<_Fin:1,
mochiweb_socket:close(Socket),
exit(normal)
end;
-
parse_hybi_frames(S, <<_Fin:1,
- _Rsv:3,
- Opcode:4,
- _Mask:1,
- 127:7,
- 0:1,
- PayloadLen:63,
- MaskKey:4/binary,
- Payload:PayloadLen/binary-unit:8,
- Rest/binary>>,
- Acc) ->
-
+ _Rsv:3,
+ Opcode:4,
+ _Mask:1,
+ 127:7,
+ 0:1,
+ PayloadLen:63,
+ MaskKey:4/binary,
+ Payload:PayloadLen/binary-unit:8,
+ Rest/binary>>,
+ Acc) ->
Payload2 = hybi_unmask(Payload, MaskKey, <<>>),
parse_hybi_frames(S, Rest, [{Opcode, Payload2} | Acc]).
-% Unmasks RFC 6455 message
+%% Unmasks RFC 6455 message
hybi_unmask(<<O:32, Rest/bits>>, MaskKey, Acc) ->
<<MaskKey2:32>> = MaskKey,
- T = O bxor MaskKey2,
- hybi_unmask(Rest, MaskKey, <<Acc/binary, T:32>>);
+ hybi_unmask(Rest, MaskKey, <<Acc/binary, (O bxor MaskKey2):32>>);
hybi_unmask(<<O:24>>, MaskKey, Acc) ->
<<MaskKey2:24, _:8>> = MaskKey,
- T = O bxor MaskKey2,
- <<Acc/binary, T:24>>;
+ <<Acc/binary, (O bxor MaskKey2):24>>;
hybi_unmask(<<O:16>>, MaskKey, Acc) ->
<<MaskKey2:16, _:16>> = MaskKey,
- T = O bxor MaskKey2,
- <<Acc/binary, T:16>>;
+ <<Acc/binary, (O bxor MaskKey2):16>>;
hybi_unmask(<<O:8>>, MaskKey, Acc) ->
<<MaskKey2:8, _:24>> = MaskKey,
- T = O bxor MaskKey2,
- <<Acc/binary, T:8>>;
+ <<Acc/binary, (O bxor MaskKey2):8>>;
hybi_unmask(<<>>, _MaskKey, Acc) ->
Acc.
http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/74d6cdc7/test/mochiweb_websocket_tests.erl
----------------------------------------------------------------------
diff --git a/test/mochiweb_websocket_tests.erl b/test/mochiweb_websocket_tests.erl
index 98cb860..890aa17 100644
--- a/test/mochiweb_websocket_tests.erl
+++ b/test/mochiweb_websocket_tests.erl
@@ -23,49 +23,62 @@
%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
%% THE SOFTWARE.
--ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
make_handshake_for_correct_client_test() ->
%% Hybi handshake
- Req1 = mochiweb_request:new(nil, 'GET', "/foo", {1, 1},
- mochiweb_headers:make([{"Sec-WebSocket-Key", "Xn3fdKyc3qEXPuj2A3O+ZA=="}])),
+ Req1 = mochiweb_request:new(
+ nil, 'GET', "/foo", {1, 1},
+ mochiweb_headers:make([{"Sec-WebSocket-Key",
+ "Xn3fdKyc3qEXPuj2A3O+ZA=="}])),
- {Version1, {HttpCode1, Headers1, _}} = mochiweb_websocket:make_handshake(Req1),
+ {Version1,
+ {HttpCode1, Headers1, _}} = mochiweb_websocket:make_handshake(Req1),
?assertEqual(hybi, Version1),
?assertEqual(101, HttpCode1),
?assertEqual("Upgrade", proplists:get_value("Connection", Headers1)),
- ?assertEqual(<<"BIFTHkJk4r5t8kuud82tZJaQsCE=">>, proplists:get_value("Sec-Websocket-Accept", Headers1)),
+ ?assertEqual(<<"BIFTHkJk4r5t8kuud82tZJaQsCE=">>,
+ proplists:get_value("Sec-Websocket-Accept", Headers1)),
%% Hixie handshake
- {Version2, {HttpCode2, Headers2, Body2}} = mochiweb_websocket:hixie_handshake(
- "ws://",
- "localhost", "/",
- "33j284 9 z63 e 9 7",
- "TF'3|6D12659H 7 70",
- <<175,181,191,215,128,195,144,120>>,
- "null"),
+ {Version2, {HttpCode2, Headers2, Body2}} =
+ mochiweb_websocket:hixie_handshake(
+ "ws://",
+ "localhost", "/",
+ "33j284 9 z63 e 9 7",
+ "TF'3|6D12659H 7 70",
+ <<175,181,191,215,128,195,144,120>>,
+ "null"),
?assertEqual(hixie, Version2),
?assertEqual(101, HttpCode2),
?assertEqual("null", proplists:get_value("Sec-WebSocket-Origin", Headers2)),
- ?assertEqual("ws://localhost/", proplists:get_value("Sec-WebSocket-Location", Headers2)),
- ?assertEqual(<<230,144,237,94,84,214,41,69,244,150,134,167,221,103,239,246>>, Body2).
+ ?assertEqual("ws://localhost/",
+ proplists:get_value("Sec-WebSocket-Location", Headers2)),
+ ?assertEqual(
+ <<230,144,237,94,84,214,41,69,244,150,134,167,221,103,239,246>>,
+ Body2).
hybi_frames_decode_test() ->
- Resp1 = mochiweb_websocket:parse_hybi_frames(nil, <<129,131,118,21,153,58,16,122,246>>, []),
- ?assertEqual([{1, <<"foo">>}], Resp1),
-
- Resp2 = mochiweb_websocket:parse_hybi_frames(nil, <<129,131,1,225,201,42,103,142,166,129,131,93,222,214,66,63,191,164>>, []),
- ?assertEqual([{1, <<"foo">>}, {1, <<"bar">>}], Resp2).
+ ?assertEqual(
+ [{1, <<"foo">>}],
+ mochiweb_websocket:parse_hybi_frames(
+ nil, <<129,131,118,21,153,58,16,122,246>>, [])),
+ ?assertEqual(
+ [{1, <<"foo">>}, {1, <<"bar">>}],
+ mochiweb_websocket:parse_hybi_frames(
+ nil,
+ <<129,131,1,225,201,42,103,142,166,129,131,93,222,214,66,63,191,164>>,
+ [])).
hixie_frames_decode_test() ->
- Resp1 = mochiweb_websocket:parse_hixie_frames(<<>>, []),
- ?assertEqual([], Resp1),
-
- Resp2 = mochiweb_websocket:parse_hixie_frames(<<0,102,111,111,255>>, []),
- ?assertEqual([<<"foo">>], Resp2),
-
- Resp3 = mochiweb_websocket:parse_hixie_frames(<<0,102,111,111,255,0,98,97,114,255>>, []),
- ?assertEqual([<<"foo">>, <<"bar">>], Resp3).
-
--endif.
+ ?assertEqual(
+ [],
+ mochiweb_websocket:parse_hixie_frames(<<>>, [])),
+ ?assertEqual(
+ [<<"foo">>],
+ mochiweb_websocket:parse_hixie_frames(<<0,102,111,111,255>>, [])),
+ ?assertEqual(
+ [<<"foo">>, <<"bar">>],
+ mochiweb_websocket:parse_hixie_frames(
+ <<0,102,111,111,255,0,98,97,114,255>>,
+ [])).