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); | 
