0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-16 13:10:24 +00:00
Commit graph

600 commits

Author SHA1 Message Date
Vladimir Dronnikov
05a7fe0e2b Do not transform URIs to Unicode 2013-01-25 02:36:05 +00:00
Loïc Hoguin
68da864aeb Remove cowboy_dispatcher
Types and code are moved to cowboy_router. The match/3 export
from cowboy_dispatcher isn't available anymore as it is called
internally.
2013-01-22 18:26:19 +01:00
Loïc Hoguin
bcb1222df9 Merge branch 'fix_change_state' of https://github.com/nevar/cowboy 2013-01-22 17:30:05 +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
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
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
9d7f909923 Add missing clause to cowboy_req:has_resp_body/1 2013-01-20 00:58:50 +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
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
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
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
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
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
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
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
54063de2ff Hello 2013 2013-01-04 15:10:03 +01:00
Loïc Hoguin
1b3f510b7e Add middleware support
Middlewares allow customizing the request processing.

All existing Cowboy project are incompatible with this commit.
You need to change `{dispatch, Dispatch}` in the protocol options
to `{env, [{dispatch, Dispatch}]}` to fix your code.
2013-01-03 22:47:51 +01:00
Loïc Hoguin
73d86057f2 Fix small error in doc comment 2013-01-03 22:31:55 +01:00
Cameron Bytheway
f1b4acbb44 Return 422 instead of 500 when handling body
Using a 4xx error would be more appropriate for this since the server is parsing the content from the client and needs to let the client know the data is malformed (not the actual HTTP request but i.e. JSON semantics). The definition for 422 is described in [RFC 4918](https://tools.ietf.org/html/rfc4918#section-11.2)
2012-12-30 22:31:07 -07:00
Loïc Hoguin
2690d1254c Remove cowboy_req:body/2
This function was badly thought out and would cause more harm
than good if used at all. Recommendation will be for people
who need to limit body length to check it beforehand or when
not possible to use the stream_body API.
2012-12-26 18:51:41 +01:00
Loïc Hoguin
a3049f7100 Revert "Use lists:keyreplace/4 instead of lists:keydelete/3 + cons"
This reverts commit cc65a723d7.
2012-12-23 14:43:44 +01:00
Tom Burdick
13c28b8f58 use the original request when available for error_terminate
this change makes sure that once a request has been created
the error_terminate/3 function uses the original request instead
of making a new empty one with undefined values making the request
attributes easier to look at in many error cases

Conflicts:
	src/cowboy_protocol.erl
2012-12-22 21:20:39 +01:00
Loïc Hoguin
f7929d323c Merge branch 'undefined_url' of git://github.com/treetopllc/cowboy 2012-12-22 21:14:20 +01:00
Loïc Hoguin
31c7bf7234 Merge branch 'fix-websocket-timeout' of git://github.com/jeremyong/cowboy 2012-12-22 18:32:35 +01:00
Jeremy Ong
5f122d9fa6 Cancel timer only on websocket_data receives or sends
This commit prevents erlang messages from keeping a websocket connection
alive. Previously, the timer was canceled upon any activity. Now, the
timeout is only canceled when actual data is sent from the client. The
handler_loop_timeout/1 function is called from websocket_data/4 instead
of handler_before_loop/4. It is also called after every successful reply
in handler_call/4.
2012-12-22 18:32:15 +01:00
Loïc Hoguin
7ff2a62585 Make sure an incorrect port returns a 400 error 2012-12-22 16:45:04 +01:00
Loïc Hoguin
cc65a723d7 Use lists:keyreplace/4 instead of lists:keydelete/3 + cons 2012-12-22 16:37:11 +01:00
Loïc Hoguin
659ca05c54 We accept iodata() when setting cookies; fix that 2012-12-20 14:36:40 +01:00
Loïc Hoguin
8858ca240f Fix parsing of the Cookie header
This should be equivalent to what we do in Set-Cookie. Real-world
testing is needed to confirm it works as intended.
2012-12-20 14:19:39 +01:00
Loïc Hoguin
f48902cee7 Improve errors when the path provided is incorrect 2012-12-18 15:59:34 +01:00
Loïc Hoguin
06ab46c868 Merge branch 'master' of git://github.com/Menirad/cowboy 2012-12-17 15:49:54 +01:00
Loïc Hoguin
f077c711a8 Fix cowboy_http:cookie_to_iodata/3
No more trying to quote, this is still completely broken everywhere.
2012-12-17 12:32:17 +01:00
Thomas Nordström
143ed80486 Fix multipart parser when the boundary is not fully read yet 2012-12-14 15:43:22 +01:00
Loïc Hoguin
d761a34380 Merge branch 'adt-consistent-errors' of git://github.com/Vagabond/cowboy 2012-12-13 17:08:06 +01:00
Loïc Hoguin
6074ce4a39 Add missing quotes to quoting for cookie values 2012-12-13 16:57:58 +01:00
Andrew Thompson
d916d739d4 Make the arguments to error_logger more consistent
The purpose of this patch is to make the arguments cowboy passes to
error_logger more consistent. With this patch there's only 3 variations
on the error_logger argument list; a 5 element list, an 8 element list
and a 10 element list. In all cases, the first 3 arguments are the
Module, Function and Arity of the function being called and the
second-to-last argument is always the Request. Additionally, for lists
longer than 5 elements, the last argument is always the stack-trace.

The added consistency of the argument ordering makes it much easier to
write code in lager's error_logger handler to catch these messages and
write a pretty one-liner (while writing the full message to the
crash.log).
2012-12-13 03:38:38 -05:00
Loïc Hoguin
ea7af4b724 Merge pull request #335 from derdesign/master
Fix broken 'make docs'
2012-12-10 15:32:48 -08:00
derdesign
0ed805439a Fix broken 'make docs' 2012-12-10 19:30:30 -04:00