aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_http2.erl
AgeCommit message (Collapse)Author
2017-08-21Tentative fix for out of order queued dataLoïc Hoguin
2017-08-08Implement the shutdown timeout for request processesLoïc Hoguin
This should work very similar to normal supervisors, in particular during the shutdown sequence when the connection process goes down or switches to Websocket. Processes that need to enforce the shutdown timeout will be required to trap exits, just like in a supervisor. In a vanilla Cowboy, this only matters at connection shutdown, as Cowboy will otherwise wait for the request process to be down before stopping the stream. Tests are currently missing.
2017-07-26Fix HTTP/2 server pushLoïc Hoguin
Cowboy was encoding the headers then decoding them when initializing the request. The problem is that the encoding and decoding contexts are not the same. Now, Cowboy will directly use the headers it received in the push command for the new request. This is also more efficient. I am surprised it worked at all considering the issue.
2017-05-31Don't terminate streams that were already terminatedLoïc Hoguin
This and the issues in the last two commits were reported by leo2007 on IRC.
2017-05-31Fix bad accounting of HTTP/2 windowsLoïc Hoguin
The previous code was incorrectly substracting the maximum frame size we could send when the data we were actually sending was much lower.
2017-05-31Apply the received SETTINGS frameLoïc Hoguin
2017-05-23Add many tests for RFC7540 5.1 and 5.1.1 and related fixesLoïc Hoguin
2017-05-19Preliminary h2 flow control supportLoïc Hoguin
Existing tests pass. A number of things remain to be done. Has only been tested with Gun so far. Feedback welcome!
2017-05-05Add inactivity_timeout and other options improvementsLoïc Hoguin
2017-04-18Get rid of stray messages when killing HTTP/2 request processesLoïc Hoguin
2017-04-18Make the default 204 response go through stream handlersLoïc Hoguin
2017-04-18Pass the HTTP/2 switch_protocol event to stream handlersLoïc Hoguin
To accomplish this the code for sending the 101 response was moved to the cowboy_http2 module.
2017-03-02Add more HTTP/2 tests for RFC7540 4.1 and 4.3Loïc Hoguin
2017-02-26Unknown HTTP/2 frames are ignoredLoïc Hoguin
2017-02-25Add many test cases covering RFC7540 4.2Loïc Hoguin
These tests cover frame sizes. It's mostly edge cases for sure (ie misbehaving clients and us having to reject them properly). I had these almost ready for a long time, so I'm glad I can push them out. This requires updating Cowlib too (we currently track master).
2017-02-05Remove or fix a small number of todo commentsLoïc Hoguin
One had the todo text fixed, another had the task to do done.
2017-02-05Fix sending of large files with HTTP/2Loïc Hoguin
Also finish implementing the relevant test, getting rid of todos.
2017-01-16Add support for multiple stream handlersLoïc Hoguin
The stream handlers can be specified using the protocol option 'stream_handlers'. It defaults to [cowboy_stream_h]. The cowboy_stream_h module currently does not forward the calls to further stream handlers. It feels like an edge case; usually we'd want to put our own handlers between the protocol code and the request process. I am therefore going to focus on other things for now. The various types and specifications for stream handlers have been updated and the cowboy_stream module can now be safely used as a behavior. The interface might change a little more, though. This commit does not include tests or documentation. They will follow separately.
2017-01-02Welcome to 2017Loïc Hoguin
2017-01-02Remaining Dialyzer fixesLoïc Hoguin
2016-08-10Make reply functions return ReqLoïc Hoguin
2016-08-10Add a lot of todosLoïc Hoguin
2016-08-10Add tests for responses and request body readingLoïc Hoguin
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-06-20Properly parse the host/port in HTTP/2Loïc Hoguin
2016-06-20Fix cowboy_req:peer/1Loïc Hoguin
2016-06-16Make sure a response is always sent with HTTP/2Loïc Hoguin
Previously only DATA was sent, with missing HEADERS.
2016-06-13Fix streaming HTTP/2 responsesLoïc Hoguin
Error reporting for connection processes has been improved, using a similar proc_lib hack as was done for the stream processes.
2016-06-08Fix request body reading in HTTP/2Loïc Hoguin
2016-06-06HTTP/2: Separate path and query componentsLoïc Hoguin
2016-06-06HTTP/2: Handle internal errorsLoïc Hoguin
2016-06-06HTTP/2: add support for sending filesLoïc Hoguin
2016-03-13Fix most remaining HTTP/2 handshake testsLoïc Hoguin
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-13Fix more HTTP/2 handshake test casesLoïc Hoguin
2016-03-12Add initial HTTP/1.1 Upgrade to HTTP/2Loïc Hoguin
The same edge cases that fail with other handshake methods also fail here (mostly bad preface/timeouts stuff). In addition, the HTTP2-Settings header contents are currently not checked and so the related edge case tests also fail.
2016-03-10Add the beginning of the rfc7540 test suiteLoïc Hoguin
Currently only testing handshake. Tests that pass currently involve no request/response. ALPN and prior knowledge support have some edge cases left to fix. HTTP/1.1 Upgrade has not been implemented yet.
2016-03-05Initial commit with connection/streamsLoïc Hoguin
Breaking changes with previous commit. This is a very large change, and I am giving up on making a single commit that fixes everything. More commits will follow slowly adding back features, introducing new tests and fixing the documentation. This change contains most of the work toward unifying the interface for handling both HTTP/1.1 and HTTP/2. HTTP/1.1 connections are now no longer 1 process per connection; instead by default 1 process per request is also created. This has a number of pros and cons. Because it has cons, we also allow users to use a lower-level API that acts on "streams" (requests/responses) directly at the connection process-level. If performance is a concern, one can always write a stream handler. The performance in this case will be even greater than with Cowboy 1, although all the special handlers are unavailable. When switching to Websocket, after the handler returns from init/2, Cowboy stops the stream and the Websocket protocol takes over the connection process. Websocket then calls websocket_init/2 for any additional initialization such as timers, because the process is different in init/2 and websocket_*/* functions. This however would allow us to use websocket_init/2 for sending messages on connect, instead of sending ourselves a message and be subject to races. Note that websocket_init/2 is optional. This is all a big change and while most of the tests pass, some functionality currently doesn't. SPDY is broken and will be removed soon in favor of HTTP/2. Automatic compression is currently disabled. The cowboy_req interface probably still have a few functions that need to be updated. The docs and examples do not refer the current functionality anymore. Everything will be fixed over time. Feedback is more than welcome. Open a ticket!
2015-06-12Fix compilation error due to previous commitLoïc Hoguin
Ah, conference commits.
2015-06-11Add HTTP/2 support preview2.0.0-pre.2Loïc Hoguin
This commit is not only an early preview of HTTP/2, it is an early preview of the new Cowboy architecture that will be presented tomorrow in my talk. If you have found it before the talk, great! It's not complete so you better go watch the talk anyway.