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

218 commits

Author SHA1 Message Date
Loïc Hoguin
ae401f7460 Fix crashes when creating the request
We now obtain the peer address before creating the Req object.
If an error occurs, then something went wrong, we close the connection
nicely directly.
2013-02-06 23:32:31 +01:00
Loïc Hoguin
4e71cd0f14 Merge branch 'master' of git://github.com/tsloughter/cowboy 2013-02-06 18:35:52 +01:00
Tristan Sloughter
29c4508884 add guards on set_resp_body_fun for streamlen and streamfun 2013-02-01 10:41:45 -06:00
Loïc Hoguin
855e9652fa Make sure the peer name is always available 2013-01-30 23:38:51 +01:00
Ivan Lisenkov
54c6d3fa3a Implement authorization header parsing
Basic HTTP authorization according to RFC 2617 is implemented.
Added an example of its usage with REST handler.
2013-01-30 00:30:05 +04:00
Loïc Hoguin
85d05fff34 Fix chunked streaming of request body and improve speed 2013-01-29 19:12:34 +01: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
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
305e639fef Add Sec-Websocket-Protocol header parsing 2013-01-14 16:29:23 +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
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
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
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
cc65a723d7 Use lists:keyreplace/4 instead of lists:keydelete/3 + cons 2012-12-22 16:37:11 +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
Loïc Hoguin
27da09282d Make cookies use universal time instead of local time
Includes:
  * cowboy_clock:rfc2109/1 now expects UTC datetime
  * Rewrite of the cookie code to cowboy_http
  * Removal of cowboy_cookies
  * Add type cowboy_req:cookie_opts/0

Cookies should now be set using cowboy_req:set_resp_cookie/3.
Code calling cowboy_cookies directly will need to be updated.
2012-12-07 15:13:35 +01:00
Tom Burdick
b63502e32e url and host_url may return undefined
this can happen when the request parsing fails and onresponse
needs the url, its perfectly possible that the url has not
yet been defined
2012-11-27 13:22:38 -06:00
Loïc Hoguin
5bc5f56eb2 Do not try to keep-alive when using HTTP/1.0 2012-11-27 16:15:15 +01:00
José Valim
0d0b962f03 Do not remove duplicated Set-Cookie entries
This commit closes #195, closes #199, closes #246.
2012-10-11 22:27:57 +02:00
Loïc Hoguin
9facad9245 Cleanup cowboy_req:parse_header/3
As suggested by @yrashk.
2012-10-11 20:03:34 +02:00
Loïc Hoguin
76cd1e40c9 The onresponse hook now receives 4 arguments, including the body
We do not always provide the body however. It is not available
when using chunked replies, or when using set_resp_body_fun.
2012-10-04 22:59:33 +02:00
Loïc Hoguin
7367f07ca0 Fix the parsing of the Connection header 2012-10-04 18:38:47 +02:00
Loïc Hoguin
0e01b82046 Remove a redundant function 2012-09-29 19:33:10 +02:00
Loïc Hoguin
1f6c324c3f Merge pull request #254 from billiob/master
fix typo in doc
2012-09-29 05:20:28 -07:00
Loïc Hoguin
b4d1407d63 Fix a small edoc issue 2012-09-29 13:16:48 +02:00
Loïc Hoguin
ce9aff19f0 Remove the urldecode cowboy_protocol option
This allows inconsistent behavior and is not used enough to be supported.
2012-09-29 13:03:45 +02:00
Loïc Hoguin
c326a195e0 Add cowboy_req:get/2 and :set/2 private functions
They should not be used unless you have a very special need,
which generally involves interacting with the internals of Cowboy.
2012-09-29 11:08:59 +02:00
Loïc Hoguin
cd7f37d346 Optimize Connection header parsing
Still optimizing the critical path.

Removes cowboy_http:connection_to_atom/1.
2012-09-27 01:31:19 +02:00
Loïc Hoguin
681a216a24 Add cowboy_req:fragment/1
Allows retrieving the request URI fragment (the #fragment part).
2012-09-27 01:30:30 +02:00
Loïc Hoguin
b2243aa544 Optimize cowboy_protocol
* #state{} changes are avoided where possible
* #state{} is now smaller and use less memory
* the Req object is created only after the whole request is parsed
* parsing makes use of a single binary match context
* external calls are avoided in the critical path
* URL fragment is now extracted properly (retrieval API next commit)
* argument orders to local functions modified to avoid extra operations
* dispatching waits as long as possible before tokenizing host/path
* handler opts are no longer shown in the error messages except in init

The code may not look as beautiful as it was before. But it really
is, for parsing code. The parsing section of the file may be skipped
if your eyes start to burn.
2012-09-26 14:20:29 +02:00
Loïc Hoguin
bfab8d4b22 Use a single Transport:send/2 call to send the reply if possible
This gives a huge boost in performance when replies are small.
2012-09-26 14:20:29 +02:00
Loïc Hoguin
e30c6debdc Remove a '++' use when replying 2012-09-24 04:53:24 +02:00
Loïc Hoguin
34021666cb Don't use decode_packet/3 for parsing the headers
Header names are now binaries. Since header names are case insensitive
they are all converted to lowercase. For example: <<"content-length">>.

The max_line_length option was removed. Three new options have been
added instead:

 *  max_request_line_length (defaults to 4096)
 *  max_header_name_length (defaults to 64)
 *  max_header_value_length (defaults to 4096)
2012-09-21 09:18:56 +02:00
Loïc Hoguin
8497c8bbcd Don't use decode_packet/3 for parsing the request-line
First step in making all methods and header names binaries to
get rid of many inconsistencies caused by decode_packet/3.

Methods are all binary now. Note that since they are case
sensitive, the usual methods become <<"GET">>, <<"POST">> and so on.
2012-09-21 08:54:57 +02:00
Boris Faure
9393613214 fix typo in doc 2012-09-17 20:56:29 +02:00
Loïc Hoguin
c2be7c1920 Add types for onrequest and onresponse funs 2012-09-17 13:57:29 +02:00
Loïc Hoguin
18be3a8021 Rename cowboy_req:raw_qs/1 to cowboy_req:qs/1 2012-09-17 13:57:29 +02:00
Loïc Hoguin
13b743ba26 Include the eunit file only if TEST is defined 2012-09-17 13:57:29 +02:00
Loïc Hoguin
183bf7f143 Make cowboy_req:req() opaque
Remove http.hrl in the process.

If you feel furious about this change after reaching this commit,
don't worry! You probably just need a few access or modification
functions to be added in cowboy_req for your needs. Problem is,
I don't know these. I'll be very thankful if you can open a ticket
and tell me all about it so the best solution can be swiftly
implemented to make you happy again.
2012-09-17 13:57:29 +02:00
Loïc Hoguin
58edd4c35a Add the private get_connection/1 function used by cowboy_protocol
This removes cowboy_protocol's dependency on http.hrl!
2012-09-17 13:57:29 +02:00
Loïc Hoguin
cf0e905c52 Add the private get_buffer/1 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
e55ec7d43d Add the private get_resp_state/1 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
c1dd5b5176 Add the private set_bindings/4 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00