Browse Source

Make cowlib a proper dependency

Start moving a few functions from Cowboy into cowlib.
Loïc Hoguin 11 years ago
parent
commit
4a30198f90

+ 1 - 1
Makefile

@@ -11,7 +11,7 @@ PLT_APPS = crypto public_key ssl
 # Dependencies.
 
 DEPS = cowlib ranch
-dep_cowlib = pkg://cowlib master
+dep_cowlib = pkg://cowlib 0.1.0
 dep_ranch = pkg://ranch 0.8.5
 
 TEST_DEPS = ct_helper gun

+ 1 - 0
examples/basic_auth/src/basic_auth.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(basic_auth).

+ 1 - 0
examples/chunked_hello_world/src/chunked_hello_world.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(chunked_hello_world).

+ 1 - 0
examples/compress_response/src/compress_response.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(compress_response).

+ 1 - 0
examples/cookie/src/cookie.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(cookie).

+ 1 - 0
examples/echo_get/src/echo_get.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(echo_get).

+ 1 - 0
examples/echo_post/src/echo_post.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(echo_post).

+ 1 - 0
examples/error_hook/src/error_hook.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(error_hook).

+ 1 - 0
examples/eventsource/src/eventsource.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(eventsource).

+ 1 - 0
examples/hello_world/src/hello_world.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(hello_world).

+ 1 - 0
examples/markdown_middleware/src/markdown_middleware.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(markdown_middleware).

+ 1 - 0
examples/rest_hello_world/src/rest_hello_world.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(rest_hello_world).

+ 1 - 0
examples/rest_pastebin/src/rest_pastebin.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(rest_pastebin).

+ 1 - 0
examples/rest_stream_response/src/rest_stream_response.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(rest_stream_response).

+ 1 - 0
examples/ssl_hello_world/src/ssl_hello_world.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(ssl_hello_world).

+ 1 - 0
examples/static_world/src/static_world.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(static_world).

+ 1 - 0
examples/web_server/src/web_server.erl

@@ -9,6 +9,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(web_server).

+ 1 - 0
examples/websocket/src/websocket.erl

@@ -7,6 +7,7 @@
 
 start() ->
 	ok = application:start(crypto),
+	ok = application:start(cowlib),
 	ok = application:start(ranch),
 	ok = application:start(cowboy),
 	ok = application:start(websocket).

+ 3 - 1
guide/getting_started.md

@@ -3,10 +3,12 @@ Getting started
 
 Cowboy does nothing by default.
 
-Cowboy requires the `crypto` and `ranch` applications to be started.
+Cowboy requires the `crypto`, `cowlib` and `ranch` applications to be
+started.
 
 ``` erlang
 ok = application:start(crypto).
+ok = application:start(cowlib).
 ok = application:start(ranch).
 ok = application:start(cowboy).
 ```

+ 1 - 0
rebar.config

@@ -1,3 +1,4 @@
 {deps, [
+	{cowlib, ".*", {git, "git://github.com/extend/cowlib.git", "0.1.0"}},
 	{ranch, ".*", {git, "git://github.com/extend/ranch.git", "0.8.5"}}
 ]}.

+ 1 - 0
src/cowboy.app.src

@@ -21,6 +21,7 @@
 		kernel,
 		stdlib,
 		ranch,
+		cowlib,
 		crypto
 	]},
 	{mod, {cowboy_app, []}},

+ 3 - 22
src/cowboy_protocol.erl

@@ -54,7 +54,6 @@
 %% Internal.
 -export([init/4]).
 -export([parse_request/3]).
--export([parse_host/3]).
 -export([resume/6]).
 
 -type opts() :: [{compress, boolean()}
@@ -443,6 +442,9 @@ default_port(ssl) -> 443;
 default_port(_) -> 80.
 
 %% Another hurtful block of code. :)
+%%
+%% Same code as cow_http:parse_fullhost/1, but inline because we
+%% really want this to go fast.
 parse_host(<< $[, Rest/bits >>, false, <<>>) ->
 	parse_host(Rest, true, << $[ >>);
 parse_host(<<>>, false, Acc) ->
@@ -593,24 +595,3 @@ error_terminate(Status, Req, State) ->
 terminate(#state{socket=Socket, transport=Transport}) ->
 	Transport:close(Socket),
 	ok.
-
-%% Tests.
-
--ifdef(TEST).
-
-parse_host(RawHost) ->
-	parse_host(RawHost, false, <<>>).
-
-parse_host_test() ->
-	{<<"example.org">>, 8080} = parse_host(<<"example.org:8080">>),
-	{<<"example.org">>, undefined} = parse_host(<<"example.org">>),
-	{<<"192.0.2.1">>, 8080} = parse_host(<<"192.0.2.1:8080">>),
-	{<<"192.0.2.1">>, undefined} = parse_host(<<"192.0.2.1">>),
-	{<<"[2001:db8::1]">>, 8080} = parse_host(<<"[2001:db8::1]:8080">>),
-	{<<"[2001:db8::1]">>, undefined} = parse_host(<<"[2001:db8::1]">>),
-	{<<"[::ffff:192.0.2.1]">>, 8080} =
-		parse_host(<<"[::ffff:192.0.2.1]:8080">>),
-	{<<"[::ffff:192.0.2.1]">>, undefined} =
-		parse_host(<<"[::ffff:192.0.2.1]">>).
-
--endif.

+ 4 - 21
src/cowboy_spdy.erl

@@ -340,11 +340,11 @@ delete_child(Pid, State=#state{children=Children}) ->
 
 request_init(FakeSocket, Peer, OnRequest, OnResponse,
 		Env, Middlewares, Method, Host, Path, Version, Headers) ->
-	Version2 = parse_version(Version),
-	{Host2, Port} = cowboy_protocol:parse_host(Host, false, <<>>),
-	{Path2, Query} = parse_path(Path, <<>>),
+	{Host2, Port} = cow_http:parse_fullhost(Host),
+	{Path2, Qs} = cow_http:parse_fullpath(Path),
+	Version2 = cow_http:parse_version(Version),
 	Req = cowboy_req:new(FakeSocket, ?MODULE, Peer,
-		Method, Path2, Query, Version2, Headers,
+		Method, Path2, Qs, Version2, Headers,
 		Host2, Port, <<>>, true, false, OnResponse),
 	case OnRequest of
 		undefined ->
@@ -357,23 +357,6 @@ request_init(FakeSocket, Peer, OnRequest, OnResponse,
 			end
 	end.
 
-parse_version(<<"HTTP/1.1">>) ->
-	'HTTP/1.1';
-parse_version(<<"HTTP/1.0">>) ->
-	'HTTP/1.0'.
-
-parse_path(<<>>, Path) ->
-	{Path, <<>>};
-parse_path(<< $?, Rest/binary >>, Path) ->
-	parse_query(Rest, Path, <<>>);
-parse_path(<< C, Rest/binary >>, SoFar) ->
-	parse_path(Rest, << SoFar/binary, C >>).
-
-parse_query(<<>>, Path, Query) ->
-	{Path, Query};
-parse_query(<< C, Rest/binary >>, Path, SoFar) ->
-	parse_query(Rest, Path, << SoFar/binary, C >>).
-
 -spec execute(cowboy_req:req(), cowboy_middleware:env(), [module()])
 	-> ok.
 execute(Req, _, []) ->

+ 2 - 0
test/autobahn_SUITE.erl

@@ -37,6 +37,7 @@ groups() ->
 
 init_per_suite(Config) ->
 	application:start(crypto),
+	application:start(cowlib),
 	application:start(ranch),
 	application:start(cowboy),
 	%% /tmp must be used as the parent directory for the virtualenv because
@@ -58,6 +59,7 @@ end_per_suite(_Config) ->
 	os:cmd("deactivate"),
 	application:stop(cowboy),
 	application:stop(ranch),
+	application:stop(cowlib),
 	application:stop(crypto),
 	ok.
 

+ 2 - 0
test/http_SUITE.erl

@@ -196,6 +196,7 @@ groups() ->
 
 init_per_suite(Config) ->
 	application:start(crypto),
+	application:start(cowlib),
 	application:start(ranch),
 	application:start(cowboy),
 	Dir = ?config(priv_dir, Config) ++ "/static",
@@ -207,6 +208,7 @@ end_per_suite(Config) ->
 	ct_helper:delete_static_dir(Dir),
 	application:stop(cowboy),
 	application:stop(ranch),
+	application:stop(cowlib),
 	application:stop(crypto),
 	ok.
 

+ 2 - 0
test/spdy_SUITE.erl

@@ -43,6 +43,7 @@ groups() ->
 
 init_per_suite(Config) ->
 	application:start(crypto),
+	application:start(cowlib),
 	application:start(ranch),
 	application:start(cowboy),
 	application:start(asn1),
@@ -62,6 +63,7 @@ end_per_suite(Config) ->
 	application:stop(asn1),
 	application:stop(cowboy),
 	application:stop(ranch),
+	application:stop(cowlib),
 	application:stop(crypto),
 	ok.
 

+ 2 - 0
test/ws_SUITE.erl

@@ -70,6 +70,7 @@ groups() ->
 
 init_per_suite(Config) ->
 	application:start(crypto),
+	application:start(cowlib),
 	application:start(ranch),
 	application:start(cowboy),
 	Config.
@@ -77,6 +78,7 @@ init_per_suite(Config) ->
 end_per_suite(_Config) ->
 	application:stop(cowboy),
 	application:stop(ranch),
+	application:stop(cowlib),
 	application:stop(crypto),
 	ok.