0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 20:50:24 +00:00
Commit graph

81 commits

Author SHA1 Message Date
Loïc Hoguin
d3dcaf109b Rename cowboy_http_req to cowboy_req 2012-08-27 13:28:57 +02:00
Loïc Hoguin
9e2622becb Rename cowboy_http_protocol to cowboy_protocol 2012-08-27 12:58:04 +02:00
Loïc Hoguin
cc2e084d45 Update behaviours for R15B+
This effectively drops the R14B compatibility.

The cowboy_req:req() type will be introduced in a future commit.
It refers to the #http_req{} record.
2012-08-27 12:50:00 +02:00
Loïc Hoguin
e4124de2c7 Switch to Ranch for connection handling
This is the first of many API incompatible changes.

You have been warned.
2012-08-27 11:50:35 +02:00
Loïc Hoguin
0c2e2224e3 Update version to 0.6.0
Also update the CHANGELOG and copyright years.
2012-05-23 14:53:48 +02:00
Loïc Hoguin
1a1b01c7c4 Remove a dumb warning when running the tests 2012-05-21 16:46:18 +02:00
Loïc Hoguin
295dc64eaa Merge branch 'serve-static-file' of https://github.com/klaar/cowboy
Fix alphabetical order since @klaar seems to have issues with it. ;)
2012-05-21 16:33:37 +02:00
Loïc Hoguin
cc6c4e39de Fix a bug preventing 'onresponse' from being called on errors 2012-05-21 15:17:24 +02:00
Loïc Hoguin
8363e8995a Small updates to the ROADMAP and doc comments 2012-05-21 08:49:22 +02:00
Loïc Hoguin
90bae59307 Add a test checking requests with size around the MTU 2012-05-05 07:53:17 +02:00
Loïc Hoguin
0406a632dc Merge branch 'response-hook' 2012-05-04 06:32:12 +02:00
Loïc Hoguin
57fda14217 Add an 'onresponse' hook
This new protocol option is a fun.

It expects 3 args: the Status code used in the reply (this is the
cowboy_http:status() type, it can be an integer or a binary), the
headers that will be sent in the reply, and the Req. It should
only return a possibly modified Req. This can be used for many
things like error logging or custom error pages.

If a reply is sent inside the hook, then Cowboy will discard the
reply initially sent. Extra caution must be used in the handlers
making use of inline chunked replies as they will throw an error.

This fun cannot be used as a filter, you can either observe the
reply sent or discard it to send a different one instead.

The hook will not be called for replies sent from inside the hook.
2012-05-04 06:24:10 +02:00
Loïc Hoguin
dab6648290 Add a test for HTTP handlers loop timeouts 2012-05-02 20:27:44 +02:00
Magnus Klaar
8168ae96c8 Add file option to cowboy_http_static 2012-04-30 23:50:23 +02:00
Loïc Hoguin
ee8c50c5ab Fix and rework the HTTP test suite
Use a proper HTTP client to run all tests. This client is currently
undocumented and should not be used.

Includes a few fixes:

* Fix a bug in the max_keepalive test
* Fix a bug with max_keepalive handling
* Fix a bug in stream_body/1 where data was lost under some conditions

The tests now run quite faster than before.

All the tests now run twice: once for TCP, once for SSL.
2012-04-29 15:22:20 +02:00
Loïc Hoguin
e8ee64777c Merge branch 'websocket-fragments' of https://github.com/klaar/cowboy 2012-04-06 22:18:09 +02:00
Magnus Klaar
80c67bff33 Update autobahn suite to use autobahntestsuite 2012-04-06 17:53:53 +02:00
Magnus Klaar
0b15ed914d Add support for fragmented websocket messages 2012-04-05 22:02:04 +02:00
Loïc Hoguin
95e05d822f Add chunked transfer encoding support and rework the body reading API
Introduces 3 low level functions and updates the existing higher
levels functions. The new primitives are has_body/1, body_length/1
and stream_body/1. In addition to that, a helper function
init_stream/4 has been added.

Streaming a body implies to decode the Transfer-Encoding and
Content-Encoding used for the body. By default, Cowboy will try
to figure out what was used and decode them properly. You can
override this if you want to disable this behavior or simply
support more encodings by calling the init_stream/4 function
before you start streaming the body.
2012-04-01 21:25:55 +02:00
Loïc Hoguin
8e2cc3d7f1 Add an 'onrequest' hook for HTTP
This new protocol option is a fun.

It expects a single arg, the Req, and should only return a possibly
modified Req. This can be used for many things like URL rewriting,
access logging or listener-wide authentication.

If a reply is sent inside the hook, then Cowboy will consider the
request handled and will move on to the next one.
2012-03-15 22:29:38 +01:00
Loïc Hoguin
36a6823e50 Do not send chunked Transfer-Encoding replies for HTTP/1.0
Fixes compatibility issue #140 reported by @majek.
2012-03-13 03:00:05 +01:00
Magnus Klaar
9922de6d9e Tests and fixes for the generate_etag/2 callback
The return value from the generate_etag/2 callback is expected to be a
binary tagged with either weak or strong. This binary is quoted, and
may be prefixed with W/ before it is set as the value of the ETag header
in the response.

For backwards compatibility with older handlers where the return value
was expected to be a quoted binary a function has been added to parse any
return values that are untagged binaries. All untagged binaries are expected
to be a valid value for the ETag header.
2012-02-29 22:32:37 +01:00
David Kelly
e7b6e2a402 Added absoluteURI support
If requests go through a proxy, they will have the original uri in the
request, i.e. : GET http://proxy.server.uri/some/query/string  HTTP 1.1 ...

That was problematic -- cowboy_http_protocol:request didn't know what to
to with the result of decode_packet applied to this, which would be something
like:

``` erlang
{http_request,'GET',{absoluteURI,http,<<"proxy.server.uri">>,
	undefined,<<"/some/query/string">>},{1,1}}
```

So, I just ignore the host, grab the path and pass into

``` erlang
cowboy_http_protocol:request({http_request, Method, {abs_path, Path},
	Version}, State)
```

Seems to do the trick without much effort.
2012-02-02 20:25:23 +01:00
Loïc Hoguin
9823450cc3 Merge branch 'autobahn-suite' of https://github.com/klaar/cowboy
This needs python2 to be the default python in /usr/bin/python.
2012-01-31 12:17:29 +01:00
Loïc Hoguin
bb08cf85e3 Remove a leftover ct:print 2012-01-26 23:27:34 +01:00
Tom Burdick
ca42ea1620 Handle delete better when no delete_resource function is implemented 2012-01-26 18:21:20 +01:00
Magnus Klaar
8808825173 Add Autobahn test suite for websockets
We're using the existing test suite for websocket servers from the
Autobahn project to verify that out websockets implementation is
sane. A CT test suite and python module wrapping the test suite has
been added. The test suite is run when the 'make inttests' target
is executed.
2012-01-25 12:10:05 +01:00
Loïc Hoguin
dd08a90568 Merge branch 'master' of https://github.com/bfrog/cowboy 2012-01-23 21:57:20 +01:00
Tom Burdick
62de899c95 added test for posting to a rest controller where forbidden returns true on a keep alive socket 2012-01-23 12:42:04 -06:00
Loïc Hoguin
b650ef8907 Merge branch 'multipart' of https://github.com/nox/cowboy
Conflicts:
	src/cowboy_http_req.erl
	test/http_SUITE.erl
2012-01-23 07:37:49 +01:00
Anthony Ramine
528507c7de Add multipart support 2012-01-23 07:20:35 +01:00
Magnus Klaar
a7334d55c0 Add etag option to cowboy_http_static handler. 2012-01-07 23:07:45 +01:00
Loïc Hoguin
d2f13366a9 Fix the stream_body_set_resp test
It was failing from time to time due to the response being sent
as two separate packets.
2012-01-06 20:49:31 +01:00
Loïc Hoguin
5095c27c65 Merge branch 'issue-114-tests' of https://github.com/klaar/cowboy into gracefully-handle-crashes
Conflicts:
	test/http_SUITE.erl
2012-01-06 19:19:34 +01:00
Magnus Klaar
1592adcd4e only run end_static_dir for http and https 2012-01-05 01:01:03 +01:00
Magnus Klaar
54d16c14ad Add test and doc for content types function. 2012-01-05 01:01:03 +01:00
Magnus Klaar
50578254d5 Add tests for #114 2011-12-29 00:06:22 +01:00
Magnus Klaar
ea7ae14df8 Add built-in cowboy_http_static handler. 2011-12-28 18:17:15 +01:00
Magnus Klaar
937a2b0326 Add cowboy_http_req:set_resp_body_fun/3. 2011-12-28 18:17:10 +01:00
Loïc Hoguin
72d91583b9 Add a max_keepalive HTTP protocol option
Based on the patch by Louis-Philippe Gauthier.
2011-12-22 21:35:40 +01:00
Loïc Hoguin
7a68a38e5a Add ct tests for binary websocket frames 2011-12-22 20:19:05 +01:00
Loïc Hoguin
9800348c21 Move the websocket tests in a separate suite 2011-12-22 20:06:58 +01:00
Loïc Hoguin
8d2102fe11 Allow HTTP protocol upgrades to use keepalive
REST needed this to be allowed to chain requests on the same connection.
2011-12-08 18:30:13 +01:00
Loïc Hoguin
ce92ab1e63 Add cowboy_http_req:set_resp_cookie/4
Pretty much just an alias for a combination of set_resp_header and cookie.
2011-12-07 11:54:57 +01:00
Loïc Hoguin
0201f7f2b2 cowboy_http_protocol shouldn't crash if the client sends HTTP responses
It was replying back the correct error, but with a crash message in
the console. This patch prevents it from crashing.

Fixes issue #94 reported by oribrost.
2011-12-06 12:22:36 +01:00
Loïc Hoguin
aab1587a4b Add experimental Webmachine based REST protocol support
As with everything experimental, it probably has a lot of bugs and
may not even work.

Like Websocket, REST must be upgraded from a standard resource through
the init/3 function.

A key difference between Webmachine and Cowboy's REST protocol handler
is that in Cowboy the resource has direct access to the request object.
This makes a small change in a few places where you were expected to
return headers or body in Webmachine and are now expected to set them
directly yourself if needed (options/2, for example).

Another difference is that the functions rest_init/2 will always be
called when starting to process a request. Similarly, rest_terminate/2
will be called when the process completes successfully.

The Cowboy REST support also includes automatic language selection,
thanks to the languages_provided/2 callback.

Finally, Cowboy REST expects full URIs to be given at all times, and
will not try to reconstruct URIs from fragments.

Note that REST requests cannot be chained (keepalive) at this time.
This is a design issue in cowboy_http_protocol that will be fixed soon.

Check out the source for more details. It has been designed to be very
easy to read and understand so if you don't understand something,
it's probably a bug. Thanks in advance for all the great bug reports,
pull requests and comments you'll forward my way!
2011-12-05 23:05:32 +01:00
Loïc Hoguin
ad87fee0af Fix a websocket test handler that was throwing an unwanted error
The test still worked because we expect the websocket connection
to fail, but it didn't fail exactly the way we wanted it to.
2011-11-28 09:14:07 +01:00
Loïc Hoguin
64a40cb479 Add set_resp_header/3 and set_resp_body/2 to cowboy_http_req
These functions allow to set response headers and body in advance,
before calling any of the reply functions.

Also add has_resp_header/2 and has_resp_body/1 to check if the given
response headers have already been set.
2011-11-28 09:09:41 +01:00
Paul Oliver
30c3c75bbc Accept Sec-WebSocket-Version: 13 header on Chrome 15 through 17 2011-10-24 15:23:36 +01:00
Loïc Hoguin
70d28ff64d Make sure the hixie-76 websocket code works properly with proxies 2011-10-20 01:36:23 +02:00