Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
b150645
feat: add --quic-v2 option for specific QUIC version 2 support
google-labs-jules[bot] Jun 16, 2025
11fcf0c
feat: add --quic-v2 option for specific QUIC version 2 support
google-labs-jules[bot] Jun 16, 2025
18d8438
Hi there! I've been working on a new feature for you.
google-labs-jules[bot] Jun 16, 2025
543de72
feat: add --quic-v2 option and CURLOPT_QUIC_VERSION
google-labs-jules[bot] Jun 16, 2025
7d2bd93
refactor: Verify const correctness for unicodefree
google-labs-jules[bot] Jun 16, 2025
3beca38
Here's a proposed refactor of the tests to convert --quic-v2 tests to…
google-labs-jules[bot] Jun 17, 2025
541754a
Here's the revised commit message:
google-labs-jules[bot] Jun 17, 2025
a8d3e6e
fix: address test suite failures for QUIC v2 feature
google-labs-jules[bot] Jun 17, 2025
03cf3c2
fix: resolve C90 error in curl_ngtcp2.c
google-labs-jules[bot] Jun 17, 2025
72b1b23
I've made some changes to address various test failures and a C90 iss…
google-labs-jules[bot] Jun 17, 2025
9b448ab
I've made some changes to address various test failures and a C90 iss…
google-labs-jules[bot] Jun 17, 2025
440349f
fix: address test failures, C90, and checksrc warnings for QUICv2
google-labs-jules[bot] Jun 18, 2025
85cf258
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 8, 2025
497860d
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 8, 2025
0484ced
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 9, 2025
659ff35
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 9, 2025
cd0187c
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 10, 2025
8e8bf16
Merge branch 'curl:master' into quic-v2-support
devkdas Jul 12, 2025
1b8a298
Update tool_getparam.c
devkdas Jul 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion docs/HTTP3.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ SPDX-License-Identifier: curl
[HTTP/3 Explained](https://http3-explained.haxx.se/en/) - the online free
book describing the protocols involved.

[quicwg.org](https://quicwg.org/) - home of the official protocol drafts
[quicwg.org](https://quicwg.org/) - home of the official QUIC protocol drafts

## QUIC libraries

Expand Down Expand Up @@ -411,6 +411,18 @@ those until one succeeds - just as with all other protocols. If those IP
addresses contain both IPv6 and IPv4, those attempts happen, delayed, in
parallel (the actual eyeballing).

## --quic-v2

The `--quic-v2` option instructs curl to attempt to connect to the server using exclusively QUIC version 2.
QUIC version 2 is identified by the protocol ID `0x6b3343cf`.

If this option is used, curl will only try to establish a QUIC version 2 connection. It will not fall back to other QUIC versions (like v1) or other HTTP versions (like HTTP/2 or HTTP/1.1) if the QUIC v2 connection attempt fails or is not supported by the server. This behavior is similar to `--http3-only` but specifically targets QUIC version 2 for the QUIC layer.

This option requires a QUIC backend library (e.g., ngtcp2, quiche, OpenSSL with QUIC support) that is capable of and configured to use QUIC version 2. If the backend does not support QUIC v2 or cannot be configured for it, using this flag might result in a connection failure or the flag having no specific effect on the QUIC version chosen (depending on the backend).

Example:
% curl --quic-v2 https://example.com

## Known Bugs

Check out the [list of known HTTP3 bugs](https://curl.se/docs/knownbugs.html#HTTP3).
Expand Down
9 changes: 9 additions & 0 deletions docs/MANUAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,15 @@ still have `foo.example.com` do it, set `NO_PROXY` to `www.example.com`.

The usage of the `-x`/`--proxy` flag overrides the environment variables.

--quic-v2
(HTTP/3) Tells curl to attempt to connect using QUIC version 2 only.
This option makes curl try to connect to the target server using the
QUIC version 2 protocol (`0x6b3343cf`). If the server does not
support QUIC version 2, the connection will fail. This option does
not fall back to other QUIC versions or other HTTP versions.
This requires a QUIC backend that supports QUIC version 2.
(Added in 8.X.Y)

## Netrc

Unix introduced the `.netrc` concept a long time ago. It is a way for a user
Expand Down
36 changes: 36 additions & 0 deletions docs/cmdline-opts/quic-v2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---
c: Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
SPDX-License-Identifier: curl
Long: quic-v2
Help: Use QUIC version 2 only for HTTP/3 connections
Protocols: HTTP
Category: http important tls
Added: 8.X.Y
See-also:
- http3
- http-version
---
# NAME

--quic-v2 - Use QUIC version 2 only for HTTP/3

# SYNOPSIS

`--quic-v2`

# DESCRIPTION

This option tells curl to attempt to connect to the server using exclusively
QUIC version 2. QUIC version 2 is identified by the protocol ID `0x6b3343cf`.

If this option is used, curl will only try to establish a QUIC version 2
connection. It will not fall back to other QUIC versions (like v1) or other
HTTP versions (like HTTP/2 or HTTP/1.1) if the QUIC v2 connection attempt
fails or is not supported by the server. This behavior is similar to
`--http3-only` but specifically targets QUIC version 2 for the QUIC layer.

This option requires a QUIC backend library (e.g., ngtcp2, quiche, OpenSSL
with QUIC support) that is capable of and configured to use QUIC version 2.
If the backend does not support QUIC v2 or cannot be configured for it, using
this flag might result in a connection failure or the flag having no specific
effect on the QUIC version chosen (depending on the backend).
15 changes: 15 additions & 0 deletions docs/libcurl/curl_easy_setopt.md
Original file line number Diff line number Diff line change
Expand Up @@ -878,6 +878,21 @@ Add transfer mode to URL over proxy. See CURLOPT_PROXY_TRANSFER_MODE(3)

**Deprecated option** Issue an HTTP PUT request. See CURLOPT_PUT(3)

## CURLOPT_QUIC_VERSION

Pass a long specifying the QUIC version to use. Set to `0` (default) to allow
negotiation by the QUIC library, `1` to request QUIC version 1
(`0x00000001`), or `2` to request QUIC version 2 (`0x6b3343cf`).

Using `1` or `2` will instruct libcurl to attempt to use that specific QUIC
version only and not attempt other QUIC versions or fall back to other HTTP
versions if the specified QUIC version fails.

This option is used by HTTP/3 connections. It requires a QUIC-enabled build of
libcurl with a backend that supports the specified version. If the selected
QUIC version is not supported by the backend or the server, the connection
attempt may fail.

## CURLOPT_QUICK_EXIT

To be set by toplevel tools like "curl" to skip lengthy cleanups when they are
Expand Down
1 change: 1 addition & 0 deletions docs/libcurl/opts/Makefile.inc
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ man_MANS = \
CURLOPT_PROXYUSERNAME.3 \
CURLOPT_PROXYUSERPWD.3 \
CURLOPT_PUT.3 \
CURLOPT_QUIC_VERSION.3 \
CURLOPT_QUICK_EXIT.3 \
CURLOPT_QUOTE.3 \
CURLOPT_RANDOM_FILE.3 \
Expand Down
2 changes: 2 additions & 0 deletions docs/libcurl/symbols-in-versions
Original file line number Diff line number Diff line change
Expand Up @@ -787,6 +787,8 @@ CURLOPT_PROXYTYPE 7.10
CURLOPT_PROXYUSERNAME 7.19.1
CURLOPT_PROXYUSERPWD 7.1
CURLOPT_PUT 7.1 7.12.1
CURLOPT_QUIC_VERSION 8.X.Y
CURLOPT_QUICK_EXIT 7.87.0
CURLOPT_QUOTE 7.1
CURLOPT_RANDOM_FILE 7.7 7.84.0
CURLOPT_RANGE 7.1
Expand Down
3 changes: 3 additions & 0 deletions include/curl/curl.h
Original file line number Diff line number Diff line change
Expand Up @@ -2249,6 +2249,9 @@ typedef enum {
/* set TLS supported signature algorithms */
CURLOPT(CURLOPT_SSL_SIGNATURE_ALGORITHMS, CURLOPTTYPE_STRINGPOINT, 328),

/* long, for specific QUIC version (0 = default, 1 = v1, 2 = v2) */
CURLOPT(CURLOPT_QUIC_VERSION, CURLOPTTYPE_LONG, 329),

CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

Expand Down
Loading