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

274 commits

Author SHA1 Message Date
Loïc Hoguin
a45813c60f
Allow passing options to sub protocols
Before this commit we had an issue where configuring a
Websocket connection was simply not possible without
doing magic, adding callbacks or extra return values.
The init/2 function only allowed setting hibernate
and timeout options.

After this commit, when switching to a different
type of handler you can either return

  {module, Req, State}

or

  {module, Req, State, Opts}

where Opts is any value (as far as the sub protocol
interface is concerned) and is ultimately checked
by the custom handlers.

A large protocol like Websocket would accept only
a map there, with many different options, while a
small interface like loop handlers would allow
passing hibernate and nothing else.

For Websocket, hibernate must be set from the
websocket_init/1 callback, because init/2 executes
in a separate process.

Sub protocols now have two callbacks: one with the
Opts value, one without.

The loop handler code was largely reworked and
simplified. It does not need to manage a timeout
or read from the socket anymore, it's the job of
the protocol code. A lot of unnecessary stuff was
therefore removed.

Websocket compression must now be enabled from
the handler options instead of per listener. This
means that a project can have two separate Websocket
handlers with different options. Compression is
still disabled by default, and the idle_timeout
value was changed from inifnity to 60000 (60 seconds),
as that's safer and is also a good value for mobile
devices.
2017-02-18 18:26:20 +01:00
Loïc Hoguin
1504c60c89
Add test for the compress_response example 2017-02-05 17:32:03 +01:00
Loïc Hoguin
61d66a4de2
Remove outdated todo comments from req_SUITE 2017-02-05 17:12:29 +01:00
Loïc Hoguin
4cbdfdd293
Fix sending of large files with HTTP/2
Also finish implementing the relevant test, getting rid of todos.
2017-02-05 13:45:35 +01:00
Loïc Hoguin
f4fddbd0a1
Test Websocket protocol version 7
A bit late but at least removes a todo.
2017-02-05 11:27:54 +01:00
Jean-Sébastien Pédron
d8d7838a77
examples_SUITE: Query system to find GNU Make executable
... instead of hard-coding "make".

First, we check the value of `$MAKE`. If it's unset, we look for `gmake`
in the `$PATH`. If it's missing, we assume it's `make`.

This fixes the testsuite where GNU Make is installed as `gmake`.
2017-01-24 11:40:52 +01:00
Jean-Sébastien Pédron
2166733628
cowboy_static: Add support for files in EZ archives
If cowboy_static is initialized with `{priv_file, ...}` or `{priv_dir,
...}`, it is now able to read files from Erlang application .ez
archives.

When serving a file from an archive, the #file_info{} comes from the
archive, not the contained file, except for the size and type. The
erl_prim_loader module is used to read the latter's #file_info{} and the
actual file content (ie. sendfile(2) is not used in this case).
2017-01-24 11:36:58 +01:00
Loïc Hoguin
3e05ab8f82
Add experimental cowboy_compress_h stream handler
Currently marked as experimental because it can't be tweaked
(just enabled/disabled) and because it is not documented yet.
2017-01-22 10:50:39 +01:00
Loïc Hoguin
e5a8088e68
Make the new cowboy_req tests more realistic 2017-01-04 19:45:35 +01:00
Johan Lövdahl
3f4e79d42f
Add functions for getting and setting response headers 2017-01-04 13:37:50 +01:00
Loïc Hoguin
42c95b1584
Rewrite the tests for header name/value limits
Putting them in the correct test suite, with the proper
documentation etc.
2017-01-03 18:07:39 +01:00
José Valim
f59c29dff0
Return status 431 if the request header field is too large
This commit changes Cowboy to follow RFC6585.
2017-01-03 17:47:23 +01:00
Loïc Hoguin
43adacc760
Welcome to 2017 2017-01-02 19:36:36 +01:00
Loïc Hoguin
ed664345d7
Add a few more test cases for cowboy_req:match_qs 2017-01-02 14:56:20 +01:00
Christopher Adams
59c32506c0
Fix if_modified_since match of last_modified
Correct expected return type from `no_call` to `undefined` in
if_modified_since when last_modified callback is not defined. Add an
http_SUITE test to catch regressions.
2016-10-18 10:43:47 +02:00
Loïc Hoguin
1d01d0fc06 Allow websocket_init/1 to reply/close/hibernate 2016-08-15 19:21:38 +02:00
Loïc Hoguin
af88442610 Modernize the Websocket test suite 2016-08-15 18:06:16 +02:00
Loïc Hoguin
d1b65a67cf Remove Req from the Websocket interface
After the switch to Websocket, we are no longer in a request/response
scenario, therefore a lot of the cowboy_req functions do not apply
anymore.

Any data required from the request will need to be taken from Req
in init/2 and saved in the handler's state.
2016-08-12 19:27:23 +02:00
Loïc Hoguin
e44ac98c83 Merge branch 'master' of https://github.com/camshaft/cowboy 2016-08-12 17:26:28 +02:00
Loïc Hoguin
97986df276 Fix Websocket compression
The option for enabling Websocket compression has been
renamed. Previously it was shared with HTTP compression,
now it's specific to Websocket. The new option is named
'websocket_compress'.
2016-08-12 16:56:08 +02:00
Loïc Hoguin
b75b0a6d4d Use integer_to_binary when possible 2016-08-11 11:53:05 +02:00
Loïc Hoguin
699164fbdd Add a test for echo_get example undefined 2016-08-11 11:48:09 +02:00
Loïc Hoguin
e2d5c268aa Fix timer-sent events in the websocket example 2016-08-11 11:06:03 +02:00
Loïc Hoguin
83aa3f1b9c Use binary_to_integer instead of to list and back 2016-08-10 17:50:28 +02:00
Loïc Hoguin
e30d120bd8 Make reply functions return Req 2016-08-10 17:15:02 +02:00
Loïc Hoguin
aa6f2ab5a4 Update the multipart reading interface
Now named read_part/read_part_body, with a verb indicating action.
2016-08-10 15:09:04 +02:00
Loïc Hoguin
3a057683af Add a lot of todos 2016-08-10 11:52:41 +02:00
Loïc Hoguin
ae0dd61673 Add tests for responses and request body reading
This is a large commit. The cowboy_req interface has largely
changed, and will change a little more. It's possible that
some examples or tests have not been converted to the new
interface yet. The documentation has not yet been updated.
All of this will be fixed in smaller subsequent commits.

Gotta start somewhere...
2016-08-10 11:49:31 +02:00
Cameron Bytheway
e09a856805 send resp_headers with websocket responses 2016-06-27 11:33:25 -06:00
Loïc Hoguin
0ba3a9a222 Add forgotten changes to a test handler 2016-06-22 13:10:33 +02:00
Loïc Hoguin
99a0e0fc46 Move TERM= declaration to make variable side 2016-06-22 13:09:27 +02:00
Loïc Hoguin
63c7d05eb2 Add tests for cowboy_req: match_cookies and match_qs 2016-06-22 09:27:29 +02:00
Loïc Hoguin
19468d0503 Add cowboy_req:uri/1,2
Along with more cowboy_req tests.

This commit also removes cowboy_req:url/1 and cowboy_req:host_url/1
in favor of the much more powerful new set of functions.
2016-06-21 19:04:52 +02:00
Loïc Hoguin
d9cad866f2 Add initial req suite 2016-06-20 17:31:31 +02:00
Loïc Hoguin
57901a7116 Fix upload example 2016-06-16 22:17:14 +02:00
Loïc Hoguin
43ccea87bc Fix rest_pastebin example 2016-06-15 13:27:31 +02:00
Loïc Hoguin
5003bae369 Fix eventsource example 2016-06-14 17:05:41 +02:00
Loïc Hoguin
84fb85e2e4 Fix cookie example 2016-06-14 16:23:51 +02:00
Loïc Hoguin
a55679b231 Fix rest_basic_auth example 2016-06-14 11:30:42 +02:00
Loïc Hoguin
a4fb56018e Fix websocket example 2016-06-13 18:10:33 +02:00
Loïc Hoguin
352cfce663 Fix markdown_middleware example 2016-06-13 17:35:26 +02:00
Loïc Hoguin
6f75598b70 Fix chunked_hello_world example 2016-06-13 16:26:00 +02:00
Loïc Hoguin
88227898ed Merge static_world and web_server examples
The new example is called file_server and it's basically
the same as web_server was. The name is clearer than the
original, all examples being "Web servers".

The new example is also tested and the test suite has
been refactored a little.
2016-06-13 13:26:24 +02:00
Loïc Hoguin
4293a40d9e Fix rest_hello_world example 2016-06-09 16:33:31 +02:00
Loïc Hoguin
4ced1d0994 Fix echo_post example 2016-06-08 23:35:02 +02:00
Loïc Hoguin
98323c2d72 Fix echo_get example 2016-06-08 20:18:09 +02:00
Loïc Hoguin
fd07b38952 Add a test suite that checks examples are working 2016-06-08 14:28:52 +02:00
Loïc Hoguin
e291c3bb94 Add the static_handler test suite 2016-06-06 17:41:26 +02:00
Loïc Hoguin
45158c1da4 Clarify comments about remaining tests to add to rfc7540_SUITE 2016-03-14 00:00:00 +01:00
Loïc Hoguin
3969c31824 Fix most remaining HTTP/2 handshake tests
One category of tests involving the SETTINGS ack still fails.
It is probably wise to leave these until more SETTINGS related
tests are written.
2016-03-13 23:14:57 +01:00