diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-07-21 23:48:58 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-07-21 23:49:03 +0200 |
commit | 3af0e76d1e71995b7790c74e79b76af86ee7c681 (patch) | |
tree | b80190acaf03d83f5f408cc6da3ec1a9f831d8d3 /src | |
parent | 7644abf8e8101910ed86ab2869b7cc4031b27720 (diff) |
HTTP3: initial (experimental) support
USe configure --with-ngtcp2 or --with-quiche
Using either option will enable a HTTP3 build.
Co-authored-by: Alessandro Ghedini <alessandro@ghedini.me>
Closes #3500
Diffstat (limited to 'src')
-rw-r--r-- | src/tool_cfgable.h | 1 | ||||
-rw-r--r-- | src/tool_getparam.c | 7 | ||||
-rw-r--r-- | src/tool_help.c | 3 | ||||
-rw-r--r-- | src/tool_operate.c | 3 |
4 files changed, 13 insertions, 1 deletions
diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h index 848123e7c..d43f03c40 100644 --- a/src/tool_cfgable.h +++ b/src/tool_cfgable.h @@ -258,6 +258,7 @@ struct OperationConfig { 0 is valid. default: CURL_HET_DEFAULT. */ bool haproxy_protocol; /* whether to send HAProxy protocol v1 */ bool disallow_username_in_url; /* disallow usernames in URLs */ + bool h3direct; /* go HTTP/3 directly */ struct GlobalConfig *global; struct OperationConfig *prev; struct OperationConfig *next; /* Always last in the struct */ diff --git a/src/tool_getparam.c b/src/tool_getparam.c index ae0902613..d0336351a 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -200,6 +200,7 @@ static const struct LongShort aliases[]= { {"01", "http1.1", ARG_NONE}, {"02", "http2", ARG_NONE}, {"03", "http2-prior-knowledge", ARG_NONE}, + {"04", "http3-direct", ARG_NONE}, {"09", "http0.9", ARG_BOOL}, {"1", "tlsv1", ARG_NONE}, {"10", "tlsv1.0", ARG_NONE}, @@ -1189,10 +1190,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ /* HTTP version 2.0 */ config->httpversion = CURL_HTTP_VERSION_2_0; break; - case '3': + case '3': /* --http2-prior-knowledge */ /* HTTP version 2.0 over clean TCP*/ config->httpversion = CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE; break; + case '4': /* --http3-direct */ + /* HTTP version 3 over QUIC - at once */ + config->h3direct = toggle; + break; case '9': /* Allow HTTP/0.9 responses! */ config->http09_allowed = toggle; diff --git a/src/tool_help.c b/src/tool_help.c index a8f285a00..a5b6e7204 100644 --- a/src/tool_help.c +++ b/src/tool_help.c @@ -191,6 +191,8 @@ static const struct helptxt helptext[] = { "Use HTTP 2"}, {" --http2-prior-knowledge", "Use HTTP 2 without HTTP/1.1 Upgrade"}, + {" --http3-direct", + "Use HTTP v3"}, {" --ignore-content-length", "Ignore the size of the remote resource"}, {"-i, --include", @@ -530,6 +532,7 @@ static const struct feat feats[] = { {"CharConv", CURL_VERSION_CONV}, {"TLS-SRP", CURL_VERSION_TLSAUTH_SRP}, {"HTTP2", CURL_VERSION_HTTP2}, + {"HTTP3", CURL_VERSION_HTTP3}, {"UnixSockets", CURL_VERSION_UNIX_SOCKETS}, {"HTTPS-proxy", CURL_VERSION_HTTPS_PROXY}, {"MultiSSL", CURL_VERSION_MULTI_SSL}, diff --git a/src/tool_operate.c b/src/tool_operate.c index 238d87c9f..14fffda36 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -1118,6 +1118,9 @@ static CURLcode create_transfers(struct GlobalConfig *global, if(config->tcp_fastopen) my_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L); + if(config->h3direct) + my_setopt(curl, CURLOPT_H3, CURLH3_DIRECT); + /* where to store */ my_setopt(curl, CURLOPT_WRITEDATA, per); my_setopt(curl, CURLOPT_INTERLEAVEDATA, per); |