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

1079 commits

Author SHA1 Message Date
Loïc Hoguin
bcb1222df9 Merge branch 'fix_change_state' of https://github.com/nevar/cowboy 2013-01-22 17:30:05 +01:00
Loïc Hoguin
ca98a86b30 Add HTML5 Video Example to the static example 2013-01-22 17:19:39 +01:00
Slava Yurin
9aa0e1a58a Fix handler state change in cowboy_rest 2013-01-22 23:14:08 +07:00
Loïc Hoguin
166761483d Do not crash if connection is closed while sending static file 2013-01-22 17:08:32 +01:00
Loïc Hoguin
ca9184f39c Merge branch 'master' of https://github.com/0x00F6/cowboy 2013-01-22 14:43:43 +01:00
0x00F6
ebadc185c1 Make cowboy_static use universal time 2013-01-22 17:41:00 +04:00
Loïc Hoguin
3b8a1365d1 Do not require inets for running tests anymore 2013-01-22 14:22:28 +01:00
Loïc Hoguin
647e95aed1 Replace terminate/2 with terminate/3, adding a Reason
This should have been done a *long* time ago, back when I initially
added Websocket support. This is the first part of two in improving
loop handler support with regards to socket closure.

Reason may include: {normal, shutdown} for the most normal shutdown,
{normal, timeout} for a loop handler timeout shutdown, or {error, _}
if an error occured.
2013-01-22 02:34:18 +01:00
Loïc Hoguin
297ae32af1 Fix cowboy_websocket_handler callback spec 2013-01-22 02:33:06 +01:00
Loïc Hoguin
fe462599c2 Merge pull request #369 from rramsden/patch-1
Fix typo in the guide introduction
2013-01-21 09:03:14 -08:00
Loïc Hoguin
81cfc1651e Improve keepalive tests 2013-01-21 14:34:33 +01:00
Loïc Hoguin
823a82b8f2 Fix an issue for replies in onresponse mishandling headers
Reported and fixed over email by Adrian Roe.
2013-01-20 19:06:28 +01:00
Loïc Hoguin
4b15d8f6e3 First draft done for the request object guide chapter 2013-01-20 15:14:13 +01:00
Loïc Hoguin
9d7f909923 Add missing clause to cowboy_req:has_resp_body/1 2013-01-20 00:58:50 +01:00
Loïc Hoguin
42e3468fec More request object documentation in the guide 2013-01-19 17:58:58 +01:00
Loïc Hoguin
82de4254dd Make cowboy_req:has_body/1 return boolean()
This makes it similar to the other has_* functions.
2013-01-19 17:20:35 +01:00
Loïc Hoguin
645556a80a Document the static handler in the guide 2013-01-18 20:33:48 +01:00
Loïc Hoguin
6d98b320ff Finish up the Internals chapter 2013-01-18 20:22:49 +01:00
Loïc Hoguin
a27296b34d Document loop handlers in the guide 2013-01-18 19:51:00 +01:00
Loïc Hoguin
09c68ca755 Remove a few old @todo comments 2013-01-18 18:21:28 +01:00
Loïc Hoguin
acd6847d3d Set max_keepalive default to 100 instead of infinity 2013-01-18 18:09:46 +01:00
Loïc Hoguin
529de4d518 Beginning of request object chapter in the guide 2013-01-18 18:04:21 +01:00
Loïc Hoguin
1476b13ca0 Add plain HTTP handlers documentation to the guide 2013-01-18 17:07:46 +01:00
Loïc Hoguin
6f552005f2 Finish the routing chapter of the guide
Note that this is the new routing not yet available in master.
The code should follow in a few days.
2013-01-18 16:07:38 +01:00
Loïc Hoguin
efdf3a3433 Fix capitalize_hook example 2013-01-18 13:15:51 +01:00
Richard Ramsden
dbecfcc3db Fix typo in the guide introduction 2013-01-17 16:14:45 -08:00
Loïc Hoguin
2f0d683622 Add hooks documentation to the guide 2013-01-18 00:54:41 +01:00
Loïc Hoguin
7f2409a4bb Do not use tabulations in the guide 2013-01-18 00:49:06 +01:00
Loïc Hoguin
acd89f6116 Explain how to write custom protocol upgrades in the guide 2013-01-18 00:15:00 +01:00
Loïc Hoguin
1f1969ba71 Get the basics of Websocket covered in the guide 2013-01-17 23:58:55 +01:00
Loïc Hoguin
1b996794ee Add cowboy_bstr:capitalize_token/1
For optional header name capitalization. See the guide section about it.
2013-01-17 23:37:50 +01:00
Loïc Hoguin
cd680706cd Add cowboy_websocket:close_code/0
Also fixes a warning.
2013-01-17 16:22:05 +01:00
Loïc Hoguin
563e7d91ce Add recursive dependency fetching to the Makefile
Also small other changes like how we build the PLT.
2013-01-17 16:04:03 +01:00
Loïc Hoguin
305e639fef Add Sec-Websocket-Protocol header parsing 2013-01-14 16:29:23 +01:00
Loïc Hoguin
8d69099508 Improve websocket close handling
We now always send a failure reason (bad protocol, bad encoding, etc.)
unless the closure was initiated by the client and it didn't send a
close code.

We now check that the close frames have a payload that is valid UTF-8,
unless they don't have a payload at all.

We now do not crash the process anymore when bad opcodes are sent, or
when the opcode 0 is sent before fragmentation was initiated.

Overall this makes us closer to full compliance with the RFC.
2013-01-14 16:20:33 +01:00
Loïc Hoguin
5dd09737d0 Websocket text frames are now checked for UTF-8 correctness
The autobahntestsuite now passes 100% of the tests. We are
getting close to fully implementing the Websocket RFC.
2013-01-13 00:10:32 +01:00
Loïc Hoguin
cccc0bc475 Unmask websocket frames on the fly and optimize the code
No change in functionality, but this will allow us to validate
that text frames are utf8 without having to receive the frame
entirely.
2013-01-12 22:31:23 +01:00
Loïc Hoguin
71b68d53d9 All frames sent from client to server MUST be masked
Good in theory, but implementations may vary. If something stops
working after this commit we might need some tweaks to support
existing clients.

Please try it and give feedback.
2013-01-12 16:04:35 +01:00
Loïc Hoguin
1d45698757 Fix getting started example, missing env 2013-01-11 16:55:11 +01:00
Loïc Hoguin
10e3692fa6 Remove support for Websocket hixie76 draft
It was only used by Safari 5.0.1 and possibly 5.1. Their market share
is dropping as we speak. It was also insecure (disabled in Firefox
for that reason).

This will allow us to make much more efficient and cleaner code for
the rest of the Websocket versions we support (drafts 7 to 17 + RFC),
which are pretty much all versions seen in the wild excluding the
one we're removing here.
2013-01-10 21:58:38 +01:00
Loïc Hoguin
9bfef7c715 Update autobahntestsuite to 0.5.2
Also small mostly insignificant changes to tests.
2013-01-10 19:54:10 +01:00
Loïc Hoguin
01f57ad65d Add optional automatic response body compression
This behavior can be enabled with the `compress` protocol option.
See the `compress_response` example for more details.

All tests are now ran with and without compression for both HTTP
and HTTPS.
2013-01-07 22:42:16 +01:00
Loïc Hoguin
a013becc66 Add protection against slowloris vulnerability
This changes the behavior of the `timeout` protocol option to
mean "Time in which the full request line and headers must be
received". The default of 5s should be fine for all normal uses.

This change has no noticeable impact on performance and is thus
enabled by default for everyone. It can be disabled by setting
`timeout` to `infinity` although that is definitely not encouraged.

Inspired by the contribution from @naryl on github.
2013-01-06 19:49:01 +01:00
Loïc Hoguin
638d0345d1 Merge pull request #359 from unix1/master
Fix examples to follow new env tuple standard
2013-01-06 04:15:03 -08:00
Unix1
33461ecdbd Fix examples to follow new env tuple standard
This brings examples in line with the recent Middleware change.
2013-01-05 19:19:14 -08:00
Loïc Hoguin
faeb37ed80 Add cowboy_req:set_resp_body_fun/2
This allows streaming a body without knowing the length in advance.
Also allows {stream, StreamFun} response body in the REST code.
2013-01-05 23:35:30 +01:00
Loïc Hoguin
6edea1c123 Fix a small warning in eunit_SUITE 2013-01-05 23:35:13 +01:00
Loïc Hoguin
c930327fbf Remove cowboy_req:transport/1
It was added to help with response body streaming functions.
But it was a clumsy solution that we discarded in favor of
passing socket and transport to said function. It was also
very odd compared to the rest of the cowboy_req interface.

If you used this function before, worry not, here's its
proper equivalent.

[Socket, Transport] = cowboy_req:get([socket, transport], Req)
2013-01-05 22:04:52 +01:00
Loïc Hoguin
58e89e2189 Change the response body streaming fun interface
Before we were required to get the socket and transport ourselves,
now they're passed to the function.
2013-01-05 20:19:43 +01:00
Loïc Hoguin
d8be610d4c Stop using rebar in the Makefile
First and foremost: yes, you can still use Cowboy as a rebar dependency.
This commit only removes the use of rebar when *developing* Cowboy, not
when *using* Cowboy.

Over the past two years I went from very happy with rebar to unsatisfied
and most recently found it counter productive in many ways, from having
insane default configuration to various unefficient operations. The earlier
reversal from 'rebar ct' to 'ct_run' made my workflow much more natural,
as I always needed to look at 'logs/raw.log' to find out what was wrong,
anyway. Why not let 'ct_run' output it directly instead? Removing rebar
made my life easier.

If you wonder why I don't patch rebar, there's two reasons. First is that
the direction taken by rebar isn't compatible with my views, and this
would be a huge fight to steer it in another direction. I got other,
more important fights to make. Second is that I'd rather patch OTP so
that everyone benefits from it, not just users of rebar.

Anyway this isn't my personal blog so I will stop babbling here. There's
a few important things to note relative to this commit:

 *  You don't need rebar to work on Cowboy anymore
 *  The eunit tests are now ran through common_test

Ping me if it doesn't work out for you.
2013-01-05 17:25:04 +01:00