0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-15 12:40:25 +00:00
Commit graph

924 commits

Author SHA1 Message Date
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
7481cf9963 Update Ranch to latest commit 2012-09-26 14:20:18 +02:00
Loïc Hoguin
e30c6debdc Remove a '++' use when replying 2012-09-24 04:53:24 +02:00
Loïc Hoguin
3c10d54883 Removal of binary:split from cowboy_dispatcher and small optimizations
The internal host_tokens value now has host tokens in reverse order
compared to before. This allows us to remove one lists:reverse call.
2012-09-24 04:53:12 +02:00
Loïc Hoguin
793d058125 Use binary:match/2 instead of binary:split/2 in cowboy_dispatcher
Didn't replace everything, just the ones that didn't use the
global option. Also removed a couple now useless code paths.
2012-09-24 00:54:05 +02:00
Loïc Hoguin
9d4f4ec9c7 Extract the buffer out of the #state{} in cowboy_protocol
This reduces the number of operations done each time the buffer changes.
2012-09-23 22:41:32 +02:00
Loïc Hoguin
332c274d87 Use binary:match/2 instead of binary:split/2 in cowboy_http
Also fix a bug introduced in a previous commit.
2012-09-23 21:25:54 +02:00
Loïc Hoguin
ff3c5c7f45 Improve state reset between requests 2012-09-23 16:50:44 +02:00
Loïc Hoguin
8a6baac9ad Use binary:match/2 instead of binary:split/2
The former is a BIF while the latter is not.
2012-09-23 16:50:06 +02:00
Loïc Hoguin
981ea359ba Update CHANGELOG 2012-09-21 13:14:25 +02:00
Loïc Hoguin
e27fd5fcb9 Make multipart part headers binary lowercase
Here we do not remove decode_packet yet, we just lowercase the
header name and transform it into a binary if needed, to fix
the consistency issue.
2012-09-21 13:07:51 +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
f6791b008a Update CHANGELOG 2012-09-17 14:02: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
9090cd9765 Replace many proplists:get_value/{2,3} calls by BIFs
Originally suggested by Roberto Ostinelli.
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
Loïc Hoguin
5b56dd780b Add the private set_buffer/2 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
fc02b7f767 Add the private add_header/3 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
905083a7fd Add the private set_connection/2 function used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
350d4ae3f2 Add the private function set_host/4 used by cowboy_protocol 2012-09-17 13:57:28 +02:00
Loïc Hoguin
6dbc1f9ef9 Add a private cowboy_req function to create a Req object
Private means you must not used it. It's meant for internal use.
2012-09-17 13:57:28 +02:00
Loïc Hoguin
c1f5a2acb2 Use cowboy_req:version/1 in cowboy_protocol where applicable
More cleanup towards making cowboy_req:req() opaque.
2012-09-17 13:57:28 +02:00
Loïc Hoguin
82d7e89ea2 Remove http.hrl dependency in cowboy_rest
Only cowboy_protocol remaining now.
2012-09-17 13:57:28 +02:00
Loïc Hoguin
f205d44518 Add a function to lock request responses instead of inlining
Just more cleanup in order to have req() opaque.
2012-09-17 13:57:28 +02:00
Loïc Hoguin
8d5f8db90a Improve consistency of return types for cowboy_req API
The signature of parse_header, body_qs, multipart_data and
the set_resp_* functions has changed.

See the cowboy_req module edoc for more details.
2012-09-17 13:56:58 +02:00
Loïc Hoguin
e13ab806ea Add cowboy_req:delete_resp_header/2
Both requested and better for making Req opaque.
2012-09-16 03:50:56 +02:00
Loïc Hoguin
527477bd4a Introduce cowboy_req:host_url/1 to remove more duplicate code 2012-09-16 01:13:44 +02:00
Loïc Hoguin
736bcd4841 Put the method in cowboy_rest's #state{} 2012-09-15 23:53:30 +02:00
Loïc Hoguin
9ef94fb64e Introduce cowboy_req:set_meta/3 to set request metadata 2012-09-15 22:51:37 +02:00
Loïc Hoguin
f65f7d19a8 Use skip_body directly between requests
There's no need for more complex logic now that we have
the API for it.
2012-09-15 22:24:59 +02:00
Loïc Hoguin
0aaa717575 Remove duplicate code for ensure_response 2012-09-15 22:19:39 +02:00
Loïc Hoguin
27d591180c Add cowboy_req:url/1 to return the full request URL
Use it in cowboy_websocket for hixie76, replacing http by ws.
2012-09-15 22:03:00 +02:00
Loïc Hoguin
cd54214def Avoid a duplicate HTTP reply in cowboy_websocket:upgrade_error/1
Do this by checking whether we received the resp_sent message.
2012-09-15 21:18:53 +02:00
Loïc Hoguin
35ebe0b108 Put socket and transport into cowboy_websocket's #state{}
As part of the work to make cowboy_req:req() opaque.
2012-09-15 21:09:12 +02:00
Loïc Hoguin
bb4bd9ac96 Add a cowboy_req:to_list/1 function
Removes a lot of duplicate code when printing error messages.
2012-09-15 20:33:57 +02:00
Loïc Hoguin
9b5cbb5000 Remove two unneeded Req modifications 2012-09-15 12:56:45 +02:00
Loïc Hoguin
d9e76d59a1 Change type #http_req{} to cowboy_req:req()
This removes cowboy_static's dependency on http.hrl.
2012-09-15 01:31:51 +02:00
Loïc Hoguin
4040a9f72d Separate multipart from body_state 2012-09-15 00:59:49 +02:00
Loïc Hoguin
79839b7bb5 Replace cowboy_req:path/1 with cowboy_req:raw_path/1
The latter is much more useful than the former, which ends up
being removed.
2012-09-10 12:26:04 +02:00
Loïc Hoguin
6fa734b487 Replace cowboy_req:host/1 with cowboy_req:raw_host/1
The latter is much more useful than the former, which ends up
being removed.
2012-09-10 12:25:57 +02:00