From c51c78dd8d93990d7168a7f6b2410ec437e66939 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Sun, 3 Mar 2019 11:17:52 +0100 Subject: alt-svc: the curl command line bits --- docs/cmdline-opts/Makefile.inc | 1 + docs/cmdline-opts/alt-svc.d | 17 +++++++++++++++++ src/tool_cfgable.c | 1 + src/tool_cfgable.h | 1 + src/tool_getparam.c | 25 ++++++++++++++++--------- src/tool_help.c | 2 ++ src/tool_operate.c | 6 ++++++ 7 files changed, 44 insertions(+), 9 deletions(-) create mode 100644 docs/cmdline-opts/alt-svc.d diff --git a/docs/cmdline-opts/Makefile.inc b/docs/cmdline-opts/Makefile.inc index b99a142ee..7a8af6f9e 100644 --- a/docs/cmdline-opts/Makefile.inc +++ b/docs/cmdline-opts/Makefile.inc @@ -2,6 +2,7 @@ DPAGES = \ abstract-unix-socket.d \ + alt-svc.d \ anyauth.d \ append.d basic.d \ cacert.d capath.d \ diff --git a/docs/cmdline-opts/alt-svc.d b/docs/cmdline-opts/alt-svc.d new file mode 100644 index 000000000..dfe636cfc --- /dev/null +++ b/docs/cmdline-opts/alt-svc.d @@ -0,0 +1,17 @@ +Long: alt-svc +Arg: +Protocols: HTTPS +Help: Enable alt-svc with this cache file +Added: 7.64.1 +--- +WARNING: this option is experiemental. Do not use in production. + +This option enables the alt-svc parser in curl. If the file name points to an +existing alt-svc cache file, that will be used. After a completed transfer, +the cache will be saved to the file name again if it has been modified. + +Specifiy a "" file name (zero length) to avoid loading/saving and make curl +just handle the cache in memory. + +If this option is used several times, curl will load contents from all the +files but the the last one will be used for saving. diff --git a/src/tool_cfgable.c b/src/tool_cfgable.c index cf5212bab..fabd6d635 100644 --- a/src/tool_cfgable.c +++ b/src/tool_cfgable.c @@ -53,6 +53,7 @@ static void free_config_fields(struct OperationConfig *config) Curl_safefree(config->random_file); Curl_safefree(config->egd_file); Curl_safefree(config->useragent); + Curl_safefree(config->altsvc); Curl_safefree(config->cookie); Curl_safefree(config->cookiejar); Curl_safefree(config->cookiefile); diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h index 2adfcae23..e374a7f0e 100644 --- a/src/tool_cfgable.h +++ b/src/tool_cfgable.h @@ -46,6 +46,7 @@ struct OperationConfig { char *cookie; /* single line with specified cookies */ char *cookiejar; /* write to this file */ char *cookiefile; /* read from this file */ + char *altsvc; /* alt-svc cache file name */ bool cookiesession; /* new session? */ bool encoding; /* Accept-Encoding please */ bool tr_encoding; /* Transfer-Encoding please */ diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 82ba8b215..b133cb87e 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -214,6 +214,7 @@ static const struct LongShort aliases[]= { {"a", "append", ARG_BOOL}, {"A", "user-agent", ARG_STRING}, {"b", "cookie", ARG_STRING}, + {"ba", "alt-svc", ARG_STRING}, {"B", "use-ascii", ARG_BOOL}, {"c", "cookie-jar", ARG_STRING}, {"C", "continue-at", ARG_STRING}, @@ -1244,17 +1245,23 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ /* This specifies the User-Agent name */ GetStr(&config->useragent, nextarg); break; - case 'b': /* cookie string coming up: */ - if(nextarg[0] == '@') { - nextarg++; - } - else if(strchr(nextarg, '=')) { - /* A cookie string must have a =-letter */ - GetStr(&config->cookie, nextarg); + case 'b': + switch(subletter) { + case 'a': /* --alt-svc */ + GetStr(&config->altsvc, nextarg); break; + default: /* --cookie string coming up: */ + if(nextarg[0] == '@') { + nextarg++; + } + else if(strchr(nextarg, '=')) { + /* A cookie string must have a =-letter */ + GetStr(&config->cookie, nextarg); + break; + } + /* We have a cookie file to read from! */ + GetStr(&config->cookiefile, nextarg); } - /* We have a cookie file to read from! */ - GetStr(&config->cookiefile, nextarg); break; case 'B': /* use ASCII/text when transferring */ diff --git a/src/tool_help.c b/src/tool_help.c index 0f6bcd36b..542998bd0 100644 --- a/src/tool_help.c +++ b/src/tool_help.c @@ -48,6 +48,8 @@ struct helptxt { static const struct helptxt helptext[] = { {" --abstract-unix-socket ", "Connect via abstract Unix domain socket"}, + {" --alt-svc ", + "Enable alt-svc with this cache file"}, {" --anyauth", "Pick any authentication method"}, {"-a, --append", diff --git a/src/tool_operate.c b/src/tool_operate.c index a8698285d..7f0748753 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -1538,6 +1538,12 @@ static CURLcode operate_do(struct GlobalConfig *global, if(config->disallow_username_in_url) my_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L); +#ifdef USE_ALTSVC + /* only if explicitly enabled in configure */ + if(config->altsvc) + my_setopt_str(curl, CURLOPT_ALTSVC, config->altsvc); +#endif + /* initialize retry vars for loop below */ retry_sleep_default = (config->retry_delay) ? config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */ -- cgit v1.2.3