ngtcp2: fix QUIC transport parameter version #7771
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Bug details
In the ngtcp2 + OpenSSL combination, the QUIC transport parameter is set to duplicate version of QUICv1 and draft, as shown below. Some QUIC stack, for example facebook.com's mvfst, returns a parameter error for this Initial.
As a result, curl returns
Resource temporarily unavailable
.Cause and patch
The cause is a missing call to the OpenSSL API. This patch fixes the transport parameter version to use DRAFT version. I think it is probably due to OpenSSL bug.
Default QUIC version
This patch keeps that curl with ngtcp2 uses DRAFT version (h3-29).
I think QUICv1+h3 should be the default version in the near future. If default version is changed to QUICv1,
SSL_set_quic_use_legacy_codepoint(qs->ssl, 0);
and some modifies enables it.