Age | Commit message (Collapse) | Author |
|
The following functions used to return a state, but now
return {state, State} or {error, Reason}:
* frame/5
* update_window/1,2
* maybe_ack_or_notify/2
* reset_stream/3
* push_promise_frame/7
* goaway/2
* maybe_send_data/6
* send_data/4
* send_data/6
* send_data_frame/4
Dialyzer will temporarily fail until functions start to
return error tuples.
|
|
|
|
|
|
|
|
The http-state tests were removed and replaced with
tests in HTML pages. I have devised a way to semi-
automatically import them and test them.
Additional fixes were made following changes in
the rfc6265bis draft.
|
|
|
|
|
|
This is a preparation for allowing init/4 to return an ok or an
error tuple.
|
|
|
|
Amended to make the test case hit the problem.
|
|
|
|
|
|
|
|
|
|
This will make it more obvious what callbacks return.
|
|
|
|
|
|
Because we depend on Cowboy master for tests we also need the more
recent Cowlib commits otherwise some tests will fail.
|
|
|
|
|
|
|
|
|
|
|
|
The approach taken here is very similar to what browsers are
doing. A separate pool is created for each host/port/scope.
The authority (host header) is used to determine which pool
will execute requests. A connection process is semi-randomly
chosen, from the connections that have capacity. Maximum
capacity is determined by the protocol (the HTTP/2 setting
set by the server is used, for example). Multiple processes
can process requests/responses on the same connection
concurrently. There is no need to "give back" the response
to the pool, the number of ongoing streams is maintained via
an event handler.
The implementation is currently not strict, there may be
more attempts to create requests than there is capacity.
I'm not sure if it should be made strict or if Gun should
just wait before sending requests (it only matters in the
HTTP/2 case at the moment).
When there is no connection with capacity available in the
pool (because they have too many streams, or are reconnecting,
or any other reason), checking out fails. There is no timeout
to wait for a connection to be available. On the other hand
the checkout_retry option allows setting multiple timeouts
to retry checking out a connection. Each retry attempt's
wait time can have a different value.
The initial implementation of this work was sponsored by
Kobil and made at the suggestion of Ilya Khaprov.
|
|
|
|
|
|
|
|
I've made some more test timeouts infinity in order
to fix additional intermittent issues that popped up.
|
|
|
|
|
|
If a request/headers/connect/ws_upgrade is created when a connection is in state
'closing', such as after receiving an HTTP/2 GOAWAY frame or an HTTP/1.1
"Connection: close" header, an error message is sent back to the caller
immediately, if reconnect is off (that is if the option retry is set to 0).
This allows an application to retry the request on another connection without
waiting for all streams on the current connection to complete.
|
|
We are about one week before the actual release.
|
|
|
|
|
|
Switching from /2 to /3 should be easy enough.
Also update the documentation about HTTP/2 Websocket support.
|
|
HTTP/1.1 Upgrade to HTTP/2 will not be implemented. There are
discussions for this functionality to be removed from the
HTTP/2 spec.
HTTP/1.1 Upgrade to TLS will most likely not be implemented.
|
|
|
|
|
|
|
|
It was missing the StreamRef from the message.
|
|
Cowlib master has the fix for this test. Temporarily depend
on Cowlib master until a release is made.
|
|
|
|
The main source file for the test tool h2specd was moved a
time ago, but correct one is used now.
Also make sure that gun sends the GOAWAY directly to avoid
timing issues in test 6.9.1 in h2specd_SUITE.
|
|
|
|
|
|
While the stream has not ended, the response has.
|
|
|
|
The response ends when the tunnel is established, even if the
stream itself does not. The data coming in on the stream after
is not part of the response.
This makes both HTTP/1.1 and HTTP/2 send 'fin' to successful
CONNECT responses.
|
|
|
|
The cookie_ignore_informational has been moved to http_opts and
http2_opts.
Also fix an issue when using 'protocols' in gun:open.
When connecting via TLS the protocol's options were
discarded.
|