<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gun.git/ebin, branch http3</title>
<subtitle>HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/'/>
<entry>
<title>Initial HTTP/3 implementation</title>
<updated>2024-03-26T13:10:03+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2023-09-22T14:28:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=6dd58a4ff9deedeeb6029827b936c2e81866cd54'/>
<id>6dd58a4ff9deedeeb6029827b936c2e81866cd54</id>
<content type='text'>
Since quicer, which provides the QUIC implementation,
is a NIF, Gun cannot depend directly on it. In order
to enable QUIC and HTTP/3, users have to set the
GUN_QUICER environment variable:

  export GUN_QUICER=1

Gun is now tested using GitHub Actions. As a result
OTP-24+ is now required. In addition, the number
of OTP releases tested has been reduced; only the
latest of each major version is now tested.

This also updates Erlang.mk.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since quicer, which provides the QUIC implementation,
is a NIF, Gun cannot depend directly on it. In order
to enable QUIC and HTTP/3, users have to set the
GUN_QUICER environment variable:

  export GUN_QUICER=1

Gun is now tested using GitHub Actions. As a result
OTP-24+ is now required. In addition, the number
of OTP releases tested has been reduced; only the
latest of each major version is now tested.

This also updates Erlang.mk.
</pre>
</div>
</content>
</entry>
<entry>
<title>Gun 2.1.0</title>
<updated>2024-03-14T14:52:00+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2024-03-14T14:52:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=5dff085cd14923fb77eda9849accd3d7b9bd8ff7'/>
<id>5dff085cd14923fb77eda9849accd3d7b9bd8ff7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use public_key:cacerts_get/0 when possible</title>
<updated>2024-03-14T14:41:30+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2024-03-14T14:41:30+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=8b5f1609faffcf1166ca54c08df4ca9216c51993'/>
<id>8b5f1609faffcf1166ca54c08df4ca9216c51993</id>
<content type='text'>
Also "fix" many TLS test failures due to yet more changes
in the default options for TLS.

Also small changes to make Dialyzer happy.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also "fix" many TLS test failures due to yet more changes
in the default options for TLS.

Also small changes to make Dialyzer happy.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update Cowlib to 2.13.0</title>
<updated>2024-03-14T12:25:50+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2024-03-14T12:25:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=f0c19d6674d792defc181333e20268b785ce4321'/>
<id>f0c19d6674d792defc181333e20268b785ce4321</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Gun 2.0.1</title>
<updated>2023-04-28T12:28:33+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2023-04-28T12:28:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=db0655def7d113f5aa168a1653df5d62245d3502'/>
<id>db0655def7d113f5aa168a1653df5d62245d3502</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update version to 2.0.0</title>
<updated>2023-01-23T13:14:57+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2023-01-23T13:14:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=33223e751267c5f249f3db1277c13904a1801b92'/>
<id>33223e751267c5f249f3db1277c13904a1801b92</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Document Websocket subprotocol negotiation</title>
<updated>2022-12-05T16:22:09+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2022-12-05T16:22:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=172800967c2d53251d7cb1015e3c957c5b065bb1'/>
<id>172800967c2d53251d7cb1015e3c957c5b065bb1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Gun 2.0.0-rc.2</title>
<updated>2021-05-24T15:44:07+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2021-05-24T15:44:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=f9175998687678e227bdd49669e2d83f0648fa57'/>
<id>f9175998687678e227bdd49669e2d83f0648fa57</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial commit for Gun pools</title>
<updated>2021-02-07T16:31:38+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2021-01-11T14:14:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=36fdf30fcf09a8ffe20c3498ac0b58de0971fd7d'/>
<id>36fdf30fcf09a8ffe20c3498ac0b58de0971fd7d</id>
<content type='text'>
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.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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.
</pre>
</div>
</content>
</entry>
<entry>
<title>Change version to Gun 2.0.0-rc.1</title>
<updated>2020-11-12T13:11:34+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2020-11-12T13:11:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=7dabafe7a93582c71cdabc3c41a609f582afd7d1'/>
<id>7dabafe7a93582c71cdabc3c41a609f582afd7d1</id>
<content type='text'>
We are about one week before the actual release.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We are about one week before the actual release.
</pre>
</div>
</content>
</entry>
</feed>
