]> granicus.if.org Git - curl/commitdiff
alt-svc: the curl command line bits
authorDaniel Stenberg <daniel@haxx.se>
Sun, 3 Mar 2019 10:17:52 +0000 (11:17 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 3 Mar 2019 10:17:52 +0000 (11:17 +0100)
docs/cmdline-opts/Makefile.inc
docs/cmdline-opts/alt-svc.d [new file with mode: 0644]
src/tool_cfgable.c
src/tool_cfgable.h
src/tool_getparam.c
src/tool_help.c
src/tool_operate.c

index b99a142eee78e1a2905a881231dad1496f247717..7a8af6f9ee802ac805e3bb81b6f66cee33ba6245 100644 (file)
@@ -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 (file)
index 0000000..dfe636c
--- /dev/null
@@ -0,0 +1,17 @@
+Long: alt-svc
+Arg: <file name>
+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.
index cf5212bab09cf4321e496b489304c36fefdd510d..fabd6d635b18e15ec3d45a74c19c7b476e430389 100644 (file)
@@ -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);
index 2adfcae23e59a8989abc7c31ff479717718a9fb4..e374a7f0e16e1533d22ae3435943a9943d79802d 100644 (file)
@@ -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 */
index 82ba8b2157c5107dc99d26e842a505a8a1e2f500..b133cb87edb115ffd089592188669eb94d615ff7 100644 (file)
@@ -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 */
index 0f6bcd36bb606cd35934d465eefdfb76571e82dd..542998bd0355dbeb57a5543a9a9592a54fe0b593 100644 (file)
@@ -48,6 +48,8 @@ struct helptxt {
 static const struct helptxt helptext[] = {
   {"    --abstract-unix-socket <path>",
    "Connect via abstract Unix domain socket"},
+  {"    --alt-svc <file name>",
+   "Enable alt-svc with this cache file"},
   {"    --anyauth",
    "Pick any authentication method"},
   {"-a, --append",
index a8698285d71f4cd5cda8c0990852388c7d3d6bb2..7f0748753384dab2cca9c777d0b149e83df8c63c 100644 (file)
@@ -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 */