Loïc Hoguin
93e8744e22
Move cowboy_iolists to Cowlib as cow_iolists
...
Depend on Cowlib master for the moment.
2018-05-07 15:33:11 +02:00
Loïc Hoguin
28d3515d71
Remove a bunch of todos
2018-04-30 18:39:27 +02:00
Loïc Hoguin
8d1f468ac0
Reject HTTP/2 requests with a body size different than content-length
2018-04-30 13:47:33 +02:00
Loïc Hoguin
84b4128d06
Receive and ignore HTTP/2 request trailers if any
...
This is a first step toward properly supporting request trailers.
2018-04-29 17:39:48 +02:00
Loïc Hoguin
2db5ffbf84
Add SETTINGS ack timeout and option settings_timeout
2018-04-28 11:00:50 +02:00
Loïc Hoguin
3d6bb01d5f
Reject WINDOW_UPDATE frames sent after an RST_STREAM
2018-04-27 20:45:34 +02:00
Loïc Hoguin
9a29aea148
Add options controlling maximum h2 frame sizes
2018-04-27 17:58:37 +02:00
Loïc Hoguin
d38d86c4a9
Add options controlling initial control flow windows
2018-04-26 22:08:05 +02:00
Loïc Hoguin
7373822b86
Add the max_concurrent_streams h2 option
2018-04-25 21:32:58 +02:00
Loïc Hoguin
8f4adf437c
Add options to control h2's SETTINGS_HEADER_TABLE_SIZE
2018-04-25 16:55:52 +02:00
Loïc Hoguin
8b9a09c9fe
HTTP/2 informational responses don't end the stream
2018-04-23 15:49:34 +02:00
Loïc Hoguin
9af8b0d23a
Add missing enable_connect_protocol in typespecs
2018-04-23 14:34:53 +02:00
Loïc Hoguin
adf1a40287
Fix Dialyzer warnings
2018-04-04 17:34:10 +02:00
Loïc Hoguin
bbfc1569cc
Add initial implementation of Websocket over HTTP/2
...
Using the current draft:
https://tools.ietf.org/html/draft-ietf-httpbis-h2-websockets-01
2018-04-04 17:23:37 +02:00
Kirill Kinduk
4c34774b7e
Add max_frame_size option for websocket handlers
...
Option allows to limit a frame by size before decoding its payload.
LH: I have added a test for when the limit is reached on a nofin
fragmented frame (the last commit addressed that case but it had
no test). I have fixed formatting and other, and changed the
default value to infinity since it might otherwise be incompatible
with existing code. I also added documentation and a bunch of other
minor changes.
2018-03-28 16:58:02 +02:00
Loïc Hoguin
5964273cc4
Fix the flushing of messages when switching to Websocket
...
We now flush messages that are specific to cowboy_http only.
Stream handlers should also flush their own specific messages
if necessary, although timeouts will be flushed regardless
of where they originate from.
Also renames the http_SUITE to old_http_SUITE to distinguish
new tests from old tests. Most old tests need to be removed
or converted eventually as they're legacy tests from Cowboy 1.0.
2018-03-26 18:53:07 +02:00
Loïc Hoguin
4d5174632c
Add initial support for system messages in cowboy_loop
2018-03-23 18:33:16 +01:00
Loïc Hoguin
21c9c66971
Merge the two separate receive loops in cowboy_websocket
...
Also rename a bunch of functions to make the code easier to read.
2018-03-23 16:32:53 +01:00
Loïc Hoguin
6945882cd3
Fix a Dialyzer warning
2018-03-14 17:43:13 +01:00
Bartek Walkowicz
2131709328
Add case for handling infinity for idle/request_timeout
...
Currently cowboy assumes that idle_timeout or request_timeout is
a number and always starts timers. Similar situation takes place
in case of preface_timeout for http2. This commit adds case for
handling infinity as a timeout, allowing to not start mentioned
timers.
2018-03-14 17:15:06 +01:00
Loïc Hoguin
f9092126fa
Handle system messages in cowboy_websocket
2018-03-13 11:19:13 +01:00
Loïc Hoguin
b9c8d86502
Handle supervisor calls properly everywhere
2018-03-13 10:40:14 +01:00
Loïc Hoguin
19054e40e0
Fix crash in cowboy_http2 when content-length is invalid
2018-02-28 16:18:29 +01:00
Loïc Hoguin
819a47a220
Fix sending HTTP/2 bodies as iolists out of order
2018-01-24 11:44:03 +01:00
Loïc Hoguin
e09ae60d5b
Fix an unused variable warning
2018-01-23 16:29:25 +01:00
Loïc Hoguin
482de55a96
Fix a miscount of output flow control window for HTTP/2
...
The miscount occurred because of a faulty iolist split function.
The bug should now be corrected, a PropEr test has been added
and a regression test has also been added.
2018-01-23 16:14:18 +01:00
Loïc Hoguin
3a7b411143
Don't crash in delete_resp_header if no resp headers are set
2018-01-22 14:00:05 +01:00
Paul Fisher
82cd22a88b
Allow colon within path segments
...
Allow `cowboy_router:compile` to handle colon characters within
path segments, rather than exiting with `badarg`. This is allowed
via RFC 7230 2.7 -> [RFC 3986 3.3](https://tools.ietf.org/html/rfc3986#section-3.3 ):
```
segment = *pchar
segment-nz = 1*pchar
segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
; non-zero-length segment without any colon ":"
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
```
2018-01-16 11:24:49 +01:00
Loïc Hoguin
34473bc247
Fix Dialyzer warnings
2017-12-13 12:40:00 +01:00
Loïc Hoguin
576e2d2111
Don't badmatch on HTTP/2 preface's Transport:send
...
Send errors produce annoying logs and we notice the connection
is gone later on anyway.
2017-12-12 16:57:05 +01:00
Loïc Hoguin
eafca21198
Fix HTTP/1.1 pipelining
...
Cases where a request body was involved could sometimes
fail depending on timing. Also fix all of the old
http_SUITE tests.
2017-12-12 11:37:48 +01:00
Loïc Hoguin
17719a136d
Add the few remaining tests to the rfc7231 test suite
2017-12-08 20:38:31 +01:00
Loïc Hoguin
b000d53855
Add more rfc7231 tests and a new max_skip_body_length option
...
The option controls how much body we accept to skip for HTTP/1.1
connections when the user code did not consume the body fully.
It defaults to 1MB.
2017-12-07 22:33:52 +01:00
Loïc Hoguin
c2b813684e
Send a 426 when Websocket is required and client didn't upgrade
2017-12-06 17:31:32 +01:00
Loïc Hoguin
5269bf580b
Fix 408 not sending connection: close for HTTP/1.1
...
Also make sure the header is sent for all types of early_error
that result in the closing of the connection.
2017-12-06 16:30:30 +01:00
Loïc Hoguin
bc39b433bb
Properly handle OPTIONS * requests
...
Support for these was broken during the development
of Cowboy 2.0. It is now fixed and better handled
than it ever was.
2017-12-06 14:05:30 +01:00
Loïc Hoguin
2eb3e3f994
Also disable the TRACE method entirely
2017-12-06 10:54:23 +01:00
Loïc Hoguin
dd002b8141
Disable the CONNECT method completely
...
It's safer than allow it with the wrong behavior.
2017-12-06 00:30:59 +01:00
Loïc Hoguin
10dc2c2ef0
Add an rfc7231 test suite, fix an HTTP/2 bug with HEAD
...
In some cases there could be a body sent as a response to
a HEAD request when using HTTP/2. This has been corrected.
2017-12-04 18:21:10 +01:00
Loïc Hoguin
2185198dee
Fix HTTP/2 push
2017-11-30 15:01:01 +01:00
Loïc Hoguin
a66eb5cd6e
Don't send chunked bodies when the method is HEAD
2017-11-29 22:09:33 +01:00
Loïc Hoguin
b0519af42a
Don't include a content-length in 204 responses
2017-11-29 21:38:10 +01:00
Loïc Hoguin
8d9404e9b6
Reject absolute URIs with no authority components
2017-11-29 18:33:50 +01:00
Loïc Hoguin
d50bab8e78
Reject absolute URIs with userinfo components in HTTP/1.1
2017-11-29 18:10:11 +01:00
Loïc Hoguin
aea172857f
Reject whitespace before/after HTTP/1.1 header names properly
2017-11-29 18:01:16 +01:00
Loïc Hoguin
0246d9a4e6
Don't send a GOAWAY frame on close when the h2 preface is invalid
2017-11-29 17:49:42 +01:00
Loïc Hoguin
d33a0df3fe
Ignore stray HTTP/2 stream messages that we expect
2017-11-29 16:41:40 +01:00
Loïc Hoguin
73126e7693
Add many rfc7540 tests, improve detection of malformed requests
2017-11-29 14:54:47 +01:00
Loïc Hoguin
4cdd1aa70e
Add more flow control tests to rfc7540 and fix related issues
2017-11-27 22:49:50 +01:00
Loïc Hoguin
7f80ff28a5
Add more rfc7540 tests along with their respective fixes
2017-11-27 19:00:35 +01:00