<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gun.git/test, branch corral</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>Catch post-handshake TLS 1.3 alerts</title>
<updated>2025-04-09T15:18:53+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-28T10:42:29+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=403a0af4cd8dd378c500e5ec7604bcc68c5ee5b8'/>
<id>403a0af4cd8dd378c500e5ec7604bcc68c5ee5b8</id>
<content type='text'>
When TLS 1.3 is used and `fail_if_no_peer_cert` (or equivalent)
is configured on the server, such as in mTLS scenarios, and
the client certificate is missing or invalid, the TLS 1.3 alert
will be sent after the handshake has completed.

The same is true for post-handshake authentication in TLS 1.3
which Erlang/OTP doesn't yet support, but will at some point in
the future.

Due to the asynchronous nature of some `ssl` socket operations,
such as sending, the alert may not always be returned from a
socket call. When the ssl socket is active we would receive
it as a message instead, so when Gun gets `{error,closed}`
it must look for the active message and see if an alert
occurred. When the ssl socket is passive we don't, so we
must query the socket for it (trying to set the socket active
at that point gets us the alert in the return value). There
is a span between handshake and the initial active mode set
where the socket is passive and may send data (the HTTP/2
preface) so we must account for both cases.

Because we sometimes have to wait for the alert as a message,
and we don't want to wait for a very long time (200ms), we
sometimes may lose the alert. Perhaps in the future this wait
time can be made configurable for users that really require
getting the alert.

The tests are only enabled on Linux because other OSes have
intermittent failures (likely due to timing).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When TLS 1.3 is used and `fail_if_no_peer_cert` (or equivalent)
is configured on the server, such as in mTLS scenarios, and
the client certificate is missing or invalid, the TLS 1.3 alert
will be sent after the handshake has completed.

The same is true for post-handshake authentication in TLS 1.3
which Erlang/OTP doesn't yet support, but will at some point in
the future.

Due to the asynchronous nature of some `ssl` socket operations,
such as sending, the alert may not always be returned from a
socket call. When the ssl socket is active we would receive
it as a message instead, so when Gun gets `{error,closed}`
it must look for the active message and see if an alert
occurred. When the ssl socket is passive we don't, so we
must query the socket for it (trying to set the socket active
at that point gets us the alert in the return value). There
is a span between handshake and the initial active mode set
where the socket is passive and may send data (the HTTP/2
preface) so we must account for both cases.

Because we sometimes have to wait for the alert as a message,
and we don't want to wait for a very long time (200ms), we
sometimes may lose the alert. Perhaps in the future this wait
time can be made configurable for users that really require
getting the alert.

The tests are only enabled on Linux because other OSes have
intermittent failures (likely due to timing).
</pre>
</div>
</content>
</entry>
<entry>
<title>Reject Websocket frames sent over HTTP</title>
<updated>2025-03-28T13:29:06+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-28T13:29:06+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=694fed991b4611147f2da73a183d3b8768f4b45d'/>
<id>694fed991b4611147f2da73a183d3b8768f4b45d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Default the origin authority to "localhost" for unix sockets</title>
<updated>2025-03-26T16:28:16+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-26T16:28:16+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=3eaa67dd8196821bbafe78daedaf86790fd123c6'/>
<id>3eaa67dd8196821bbafe78daedaf86790fd123c6</id>
<content type='text'>
Otherwise garbage gets sent.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Otherwise garbage gets sent.
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove copyright years from all files except LICENSE</title>
<updated>2025-03-26T14:13:34+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-26T14:13:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=5a8d0f5454b87ef021c26228e2b06e29074e9bf9'/>
<id>5a8d0f5454b87ef021c26228e2b06e29074e9bf9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Better identify ping errors and test the HTTP/1.1 one</title>
<updated>2025-03-26T13:37:41+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-26T13:24:01+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=6221b68dd3607ad6297199e7fd7f41c83a0e7738'/>
<id>6221b68dd3607ad6297199e7fd7f41c83a0e7738</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Implement user pings for tunnels</title>
<updated>2025-03-26T10:20:37+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-26T10:20:37+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=e5dc5fb6c245f218ba7f321b0a519ac8202c33ed'/>
<id>e5dc5fb6c245f218ba7f321b0a519ac8202c33ed</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add gun:ping/2,3 for user-initiated ping for HTTP/2</title>
<updated>2025-03-21T14:24:55+00:00</updated>
<author>
<name>Viktor Söderqvist</name>
<email>viktor.soderqvist@est.tech</email>
</author>
<published>2024-12-13T17:50:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=4054e917774df76072c2c47aa3d1c43ccbe0810e'/>
<id>4054e917774df76072c2c47aa3d1c43ccbe0810e</id>
<content type='text'>
Signed-off-by: Viktor Söderqvist &lt;viktor.soderqvist@est.tech&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Viktor Söderqvist &lt;viktor.soderqvist@est.tech&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Respect remote concurrency limit for headers/connect/ws_upgrade</title>
<updated>2025-03-21T12:10:50+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-03-21T12:10:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=dd1a09d7c8395d8e77d40a8bc5e1e4537c3c15b3'/>
<id>dd1a09d7c8395d8e77d40a8bc5e1e4537c3c15b3</id>
<content type='text'>
In order to simplify the implementation the CookieStore is
given to the connect function now, even though it's not
currently used.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In order to simplify the implementation the CookieStore is
given to the connect function now, even though it's not
currently used.
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/2: Respect remote MAX_CONCURRENT_STREAMS</title>
<updated>2025-03-18T11:44:21+00:00</updated>
<author>
<name>Viktor Söderqvist</name>
<email>viktor.soderqvist@est.tech</email>
</author>
<published>2022-10-24T15:36:59+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=04c3436586eb150225791f96692eeff78f4d27c1'/>
<id>04c3436586eb150225791f96692eeff78f4d27c1</id>
<content type='text'>
If the limit has been reached, new requests are failed immediately,
so that the application can retry them on a different connection.

Co-authored-by: Björn Svensson &lt;bjorn.a.svensson@est.tech&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the limit has been reached, new requests are failed immediately,
so that the application can retry them on a different connection.

Co-authored-by: Björn Svensson &lt;bjorn.a.svensson@est.tech&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Do not ignore data received immediately after switching to raw</title>
<updated>2025-02-27T14:34:56+00:00</updated>
<author>
<name>Denys Knertser</name>
<email>denys@avassa.io</email>
</author>
<published>2024-07-08T13:50:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/gun.git/commit/?id=50491ae56fbb26dc108f5e7ebd7edb384a3fa295'/>
<id>50491ae56fbb26dc108f5e7ebd7edb384a3fa295</id>
<content type='text'>
LH: Minor tweaks.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
LH: Minor tweaks.
</pre>
</div>
</content>
</entry>
</feed>
