Skip to content

Commit

Permalink
Update version to 0.6.0
Browse files Browse the repository at this point in the history
Also update the CHANGELOG and copyright years.
  • Loading branch information
Loïc Hoguin committed May 23, 2012
1 parent 1a1b01c commit 0c2e222
Show file tree
Hide file tree
Showing 32 changed files with 163 additions and 79 deletions.
86 changes: 86 additions & 0 deletions CHANGELOG.md
@@ -1,6 +1,92 @@
CHANGELOG
=========

0.6.0
-----

* Add multipart support

* Add chunked transfer decoding support

Done by reworking the body reading API. Now all the body
reading goes through the cowboy_http_req:stream_body/1
function. This function takes care of handling both the
Transfer-Encoding and the Content-Encoding, returning
properly decoded data ready for consumption.

* Add fragmented websocket messages support

Properly tested by the addition of the Autobahn websocket
test suite to our toolbox. All tests pass except a few
related to UTF-8 handling, as Cowboy does no checks on that
end at this point.

* Add 'onrequest' and 'onresponse' hooks

The first can be used for all the special cases you may have
that can't be dealt with otherwise. It's also pretty good for
writing access logs or rewriting URLs.

The second can be used for logging errors or replacing error
pages, amongst others.

* Add cowboy:get_protocol_options/1 and cowboy:set_protocol_options/2

These functions allow for retrieving a listener's protocol options,
and for modifying them while the listener is running. This is
most useful to upgrade the dispatch list. The upgrade applies
to all the future connections.

* Add the sockname/1 function to TCP and SSL transports

* Improve SSL transport support

Add support for specifying the ciphers. Add CA support. Make
specifying the password optional.

* Add new HTTP status codes from RFC 6585

* Add a 'file' option to cowboy_http_static

This allows for mapping /folder/ paths to a /folder/index.html file.

* Add the '*' catch all Content-Type for REST

* Add {halt, Req, State} as a possible return value for REST

* Add absolute URI support for requests

* Add cowboy_http:x_www_form_urlencoded/2

* Various REST bug fixes

* Do not send chunked replies for HTTP/1.0 connections

* Fix a DST bug in the cookies code

* Fix a bug with setting cookie values containing slashes

* Fix a small timer leak when using loop/websocket timeouts

* Make charset and media type parsing more relaxed

This is to accomodate some widely used broken clients.

* Make error messages more readable

* Fix and improve type specifications

* Fix a bug preventing documentation from being generated

* Small improvements to the documentation

* Rework the HTTP test suite

The suite now uses an integrated Cowboy HTTP client. The client
is currently experimental and shouldn't be used.

* Add many many tests.

0.4.0
-----

Expand Down
2 changes: 1 addition & 1 deletion LICENSE
@@ -1,4 +1,4 @@
Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
Expand Down
14 changes: 7 additions & 7 deletions README.md
Expand Up @@ -157,28 +157,28 @@ based on the hostname and path information from the request. It also lets
you define static options for the handler directly in the rules.

To match the hostname and path, Cowboy requires a list of tokens. For
example, to match the "dev-extend.eu" domain name, you must specify
`[<<"dev-extend">>, <<"eu">>]`. Or, to match the "/path/to/my/resource"
example, to match the "ninenines.eu" domain name, you must specify
`[<<"ninenines">>, <<"eu">>]`. Or, to match the "/path/to/my/resource"
you must use `[<<"path">>, <<"to">>, <<"my">>, <<"resource">>]`. All the
tokens must be given as binary.

You can use the special token `'_'` (the atom underscore) to indicate that
you accept anything in that position. For example if you have both
"dev-extend.eu" and "dev-extend.fr" domains, you can use the match spec
`[<<"dev-extend">>, '_']` to match any top level extension.
"ninenines.eu" and "ninenines.fr" domains, you can use the match spec
`[<<"ninenines">>, '_']` to match any top level extension.

Finally, you can also match multiple leading segments of the domain name and
multiple trailing segments of the request path using the atom `'...'` (the atom
ellipsis) respectively as the first host token or the last path token. For
example, host rule `['...', <<"dev-extend">>, <<"eu">>]` can match both
"cowboy.bugs.dev-extend.eu" and "dev-extend.eu" and path rule
example, host rule `['...', <<"ninenines">>, <<"eu">>]` can match both
"cowboy.bugs.ninenines.eu" and "ninenines.eu" and path rule
`[<<"projects">>, '...']` can match both "/projects" and
"/projects/cowboy/issues/42". The host leading segments and the path trailing
segments can later be retrieved through `cowboy_http_req:host_info/1` and
`cowboy_http_req:path_info/1`.

Any other atom used as a token will bind the value to this atom when
matching. To follow on our hostnames example, `[<<"dev-extend">>, ext]`
matching. To follow on our hostnames example, `[<<"ninenines">>, ext]`
would bind the values `<<"eu">>` and `<<"fr">>` to the ext atom, that you
can later retrieve in your handler by calling `cowboy_http_req:binding/{2,3}`.

Expand Down
4 changes: 1 addition & 3 deletions ROADMAP.md
Expand Up @@ -61,14 +61,12 @@ are not ordered.
Tools like curl expect a 100 Continue before sending a
request body by default.

* Convert the multipart code to stream_body.

* Complete the work on Websockets.

Now that the Autobahn test suite is available (make inttests),
we have a definite way to know whether Cowboy's implementation
of Websockets is right. The work can thus be completed. The
remaining tasks are proper UTF8 handling.
remaining task is proper UTF8 handling.

* SPDY support.

Expand Down
4 changes: 2 additions & 2 deletions doc/overview.edoc
@@ -1,4 +1,4 @@
@author Lo�c Hoguin <essen@dev-extend.eu>
@copyright 2011 Lo�c Hoguin
@author Lo�c Hoguin <essen@ninenines.eu>
@copyright 2011-2012 Lo�c Hoguin
@version HEAD
@title Small, fast, modular HTTP server.
2 changes: 1 addition & 1 deletion include/http.hrl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
Expand Down
4 changes: 2 additions & 2 deletions src/cowboy.app.src
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand All @@ -14,7 +14,7 @@

{application, cowboy, [
{description, "Small, fast, modular HTTP server."},
{vsn, "0.5.0"},
{vsn, "0.6.0"},
{modules, []},
{registered, [cowboy_clock, cowboy_sup]},
{applications, [
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_acceptor.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_acceptors_sup.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_app.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_bstr.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_clock.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
76 changes: 38 additions & 38 deletions src/cowboy_dispatcher.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
Expand Down Expand Up @@ -85,8 +85,8 @@ do_split_path(RawPath, Separator, URLDec) ->
%% corresponding token value and return it.
%%
%% The list of hostname tokens is reversed before matching. For example, if
%% we were to match "www.dev-extend.eu", we would first match "eu", then
%% "dev-extend", then "www". This means that in the context of hostnames,
%% we were to match "www.ninenines.eu", we would first match "eu", then
%% "ninenines", then "www". This means that in the context of hostnames,
%% the <em>'...'</em> atom matches properly the lower levels of the domain
%% as would be expected.
%%
Expand Down Expand Up @@ -173,16 +173,16 @@ split_host_test_() ->
{<<"">>, {[], <<"">>, undefined}},
{<<".........">>, {[], <<".........">>, undefined}},
{<<"*">>, {[<<"*">>], <<"*">>, undefined}},
{<<"cowboy.dev-extend.eu">>,
{[<<"cowboy">>, <<"dev-extend">>, <<"eu">>],
<<"cowboy.dev-extend.eu">>, undefined}},
{<<"dev-extend..eu">>,
{[<<"dev-extend">>, <<>>, <<"eu">>],
<<"dev-extend..eu">>, undefined}},
{<<"dev-extend.eu">>,
{[<<"dev-extend">>, <<"eu">>], <<"dev-extend.eu">>, undefined}},
{<<"dev-extend.eu:8080">>,
{[<<"dev-extend">>, <<"eu">>], <<"dev-extend.eu">>, 8080}},
{<<"cowboy.ninenines.eu">>,
{[<<"cowboy">>, <<"ninenines">>, <<"eu">>],
<<"cowboy.ninenines.eu">>, undefined}},
{<<"ninenines..eu">>,
{[<<"ninenines">>, <<>>, <<"eu">>],
<<"ninenines..eu">>, undefined}},
{<<"ninenines.eu">>,
{[<<"ninenines">>, <<"eu">>], <<"ninenines.eu">>, undefined}},
{<<"ninenines.eu:8080">>,
{[<<"ninenines">>, <<"eu">>], <<"ninenines.eu">>, 8080}},
{<<"a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z">>,
{[<<"a">>, <<"b">>, <<"c">>, <<"d">>, <<"e">>, <<"f">>, <<"g">>,
<<"h">>, <<"i">>, <<"j">>, <<"k">>, <<"l">>, <<"m">>, <<"n">>,
Expand All @@ -195,13 +195,13 @@ split_host_test_() ->

split_host_fail_test_() ->
Tests = [
<<"dev-extend.eu:owns">>,
<<"dev-extend.eu: owns">>,
<<"dev-extend.eu:42fun">>,
<<"dev-extend.eu: 42fun">>,
<<"dev-extend.eu:42 fun">>,
<<"dev-extend.eu:fun 42">>,
<<"dev-extend.eu: 42">>,
<<"ninenines.eu:owns">>,
<<"ninenines.eu: owns">>,
<<"ninenines.eu:42fun">>,
<<"ninenines.eu: 42fun">>,
<<"ninenines.eu:42 fun">>,
<<"ninenines.eu:fun 42">>,
<<"ninenines.eu: 42">>,
<<":owns">>,
<<":42 fun">>
],
Expand Down Expand Up @@ -233,14 +233,14 @@ split_path_test_() ->

match_test_() ->
Dispatch = [
{[<<"www">>, '_', <<"dev-extend">>, <<"eu">>], [
{[<<"www">>, '_', <<"ninenines">>, <<"eu">>], [
{[<<"users">>, '_', <<"mails">>], match_any_subdomain_users, []}
]},
{[<<"dev-extend">>, <<"eu">>], [
{[<<"ninenines">>, <<"eu">>], [
{[<<"users">>, id, <<"friends">>], match_extend_users_friends, []},
{'_', match_extend, []}
]},
{[<<"dev-extend">>, var], [
{[<<"ninenines">>, var], [
{[<<"threads">>, var], match_duplicate_vars,
[we, {expect, two}, var, here]}
]},
Expand All @@ -255,22 +255,22 @@ match_test_() ->
%% {Host, Path, Result}
Tests = [
{[<<"any">>], [], {ok, match_any, [], []}},
{[<<"www">>, <<"any">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"any">>, <<"ninenines">>, <<"eu">>],
[<<"users">>, <<"42">>, <<"mails">>],
{ok, match_any_subdomain_users, [], []}},
{[<<"www">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"ninenines">>, <<"eu">>],
[<<"users">>, <<"42">>, <<"mails">>], {ok, match_any, [], []}},
{[<<"www">>, <<"dev-extend">>, <<"eu">>], [], {ok, match_any, [], []}},
{[<<"www">>, <<"any">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"ninenines">>, <<"eu">>], [], {ok, match_any, [], []}},
{[<<"www">>, <<"any">>, <<"ninenines">>, <<"eu">>],
[<<"not_users">>, <<"42">>, <<"mails">>], {error, notfound, path}},
{[<<"dev-extend">>, <<"eu">>], [], {ok, match_extend, [], []}},
{[<<"dev-extend">>, <<"eu">>], [<<"users">>, <<"42">>, <<"friends">>],
{[<<"ninenines">>, <<"eu">>], [], {ok, match_extend, [], []}},
{[<<"ninenines">>, <<"eu">>], [<<"users">>, <<"42">>, <<"friends">>],
{ok, match_extend_users_friends, [], [{id, <<"42">>}]}},
{[<<"erlang">>, <<"fr">>], '_',
{ok, match_erlang_ext, [], [{ext, <<"fr">>}]}},
{[<<"any">>], [<<"users">>, <<"444">>, <<"friends">>],
{ok, match_users_friends, [], [{id, <<"444">>}]}},
{[<<"dev-extend">>, <<"fr">>], [<<"threads">>, <<"987">>],
{[<<"ninenines">>, <<"fr">>], [<<"threads">>, <<"987">>],
{ok, match_duplicate_vars, [we, {expect, two}, var, here],
[{var, <<"fr">>}, {var, <<"987">>}]}}
],
Expand All @@ -280,27 +280,27 @@ match_test_() ->

match_info_test_() ->
Dispatch = [
{[<<"www">>, <<"dev-extend">>, <<"eu">>], [
{[<<"www">>, <<"ninenines">>, <<"eu">>], [
{[<<"pathinfo">>, <<"is">>, <<"next">>, '...'], match_path, []}
]},
{['...', <<"dev-extend">>, <<"eu">>], [
{['...', <<"ninenines">>, <<"eu">>], [
{'_', match_any, []}
]}
],
Tests = [
{[<<"dev-extend">>, <<"eu">>], [],
{[<<"ninenines">>, <<"eu">>], [],
{ok, match_any, [], [], [], undefined}},
{[<<"bugs">>, <<"dev-extend">>, <<"eu">>], [],
{[<<"bugs">>, <<"ninenines">>, <<"eu">>], [],
{ok, match_any, [], [], [<<"bugs">>], undefined}},
{[<<"cowboy">>, <<"bugs">>, <<"dev-extend">>, <<"eu">>], [],
{[<<"cowboy">>, <<"bugs">>, <<"ninenines">>, <<"eu">>], [],
{ok, match_any, [], [], [<<"cowboy">>, <<"bugs">>], undefined}},
{[<<"www">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"ninenines">>, <<"eu">>],
[<<"pathinfo">>, <<"is">>, <<"next">>],
{ok, match_path, [], [], undefined, []}},
{[<<"www">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"ninenines">>, <<"eu">>],
[<<"pathinfo">>, <<"is">>, <<"next">>, <<"path_info">>],
{ok, match_path, [], [], undefined, [<<"path_info">>]}},
{[<<"www">>, <<"dev-extend">>, <<"eu">>],
{[<<"www">>, <<"ninenines">>, <<"eu">>],
[<<"pathinfo">>, <<"is">>, <<"next">>, <<"foo">>, <<"bar">>],
{ok, match_path, [], [], undefined, [<<"foo">>, <<"bar">>]}}
],
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http_handler.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http_protocol.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http_req.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%% Copyright (c) 2011, Anthony Ramine <nox@dev-extend.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http_rest.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down
2 changes: 1 addition & 1 deletion src/cowboy_http_websocket.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Loïc Hoguin <essen@dev-extend.eu>
%% Copyright (c) 2011-2012, Loïc Hoguin <essen@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
Expand Down

0 comments on commit 0c2e222

Please sign in to comment.