* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
+ * are also available at https://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
};
static const struct LongShort aliases[]= {
- /* all these ones, starting with "*" or "$" as a short-option have *no*
- short option to mention. */
- {"*", "url", TRUE},
+ /* 'letter' strings with more than one character have *no* short option to
+ mention. */
+ {"*@", "url", TRUE},
{"*4", "dns-ipv4-addr", TRUE},
{"*6", "dns-ipv6-addr", TRUE},
{"*a", "random-file", TRUE},
{"*u", "crlf", FALSE},
{"*v", "stderr", TRUE},
{"*w", "interface", TRUE},
- {"*x", "krb" , TRUE},
- {"*x", "krb4" , TRUE},
+ {"*x", "krb", TRUE},
+ {"*x", "krb4", TRUE},
/* 'krb4' is the previous name */
{"*y", "max-filesize", TRUE},
{"*z", "disable-eprt", FALSE},
{"*Z", "eprt", FALSE},
/* 'eprt' made like this to make --no-eprt and --eprt to work
although --disable-eprt is the documented option */
+ {"*~", "xattr", FALSE},
{"$a", "ftp-ssl", FALSE},
/* 'ftp-ssl' deprecated name since 7.20.0 */
{"$a", "ssl", FALSE},
/* 'ssl' new option name in 7.20.0, previously this was ftp-ssl */
{"$b", "ftp-pasv", FALSE},
{"$c", "socks5", TRUE},
- {"$c", "socks", TRUE},
- /* 'socks' is how the option once was documented but we prefer
- the --socks5 version for explicit version */
{"$d", "tcp-nodelay", FALSE},
{"$e", "proxy-digest", FALSE},
{"$f", "proxy-basic", FALSE},
{"$3", "keepalive-time", TRUE},
{"$4", "post302", FALSE},
{"$5", "noproxy", TRUE},
- {"$6", "socks5-gssapi-service", TRUE},
{"$7", "socks5-gssapi-nec", FALSE},
- {"$O", "proxy-service-name", TRUE},
- {"$P", "service-name", TRUE},
{"$8", "proxy1.0", TRUE},
{"$9", "tftp-blksize", TRUE},
{"$A", "mail-from", TRUE},
{"$L", "test-event", FALSE},
{"$M", "unix-socket", TRUE},
{"$N", "path-as-is", FALSE},
+ {"$O", "socks5-gssapi-service", TRUE},
+ /* 'socks5-gssapi-service' merged with'proxy-service-name' and
+ deprecated since 7.49.0 */
+ {"$O", "proxy-service-name", TRUE},
+ {"$P", "service-name", TRUE},
+ {"$Q", "proto-default", TRUE},
+ {"$R", "expect100-timeout", TRUE},
+ {"$S", "tftp-no-options", FALSE},
+ {"$U", "connect-to", TRUE},
{"0", "http1.0", FALSE},
{"01", "http1.1", FALSE},
{"02", "http2", FALSE},
+ {"03", "http2-prior-knowledge", FALSE},
{"1", "tlsv1", FALSE},
{"10", "tlsv1.0", FALSE},
{"11", "tlsv1.1", FALSE},
{"Ed", "key-type", TRUE},
{"Ee", "pass", TRUE},
{"Ef", "engine", TRUE},
- {"Eg", "capath ", TRUE},
+ {"Eg", "capath", TRUE},
{"Eh", "pubkey", TRUE},
{"Ei", "hostpubmd5", TRUE},
{"Ej", "crlfile", TRUE},
{"Eq", "cert-status", FALSE},
{"Er", "false-start", FALSE},
{"Es", "ssl-no-revoke", FALSE},
+ {"Et", "tcp-fastopen", FALSE},
{"f", "fail", FALSE},
{"F", "form", TRUE},
{"Fs", "form-string", TRUE},
{"O", "remote-name", FALSE},
{"Oa", "remote-name-all", FALSE},
{"p", "proxytunnel", FALSE},
- {"P", "ftpport", TRUE},
- /* 'ftpport' old version */
{"P", "ftp-port", TRUE},
{"q", "disable", FALSE},
{"Q", "quote", TRUE},
{"R", "remote-time", FALSE},
{"s", "silent", FALSE},
{"S", "show-error", FALSE},
- {"t", "telnet-options", TRUE},
- /* 'telnet-options' documented as telnet-option */
+ {"t", "telnet-option", TRUE},
{"T", "upload-file", TRUE},
{"u", "user", TRUE},
{"U", "proxy-user", TRUE},
{"w", "write-out", TRUE},
{"x", "proxy", TRUE},
{"X", "request", TRUE},
- {"X", "http-request", TRUE},
- /* 'http-request' OBSOLETE VERSION */
{"Y", "speed-limit", TRUE},
{"y", "speed-time", TRUE},
{"z", "time-cond", TRUE},
{"#", "progress-bar", FALSE},
{":", "next", FALSE},
- {"~", "xattr", FALSE},
};
/* Split the argument of -E to 'certname' and 'passphrase' separated by colon.
if(param_length == 0)
return;
- /* next less trivial: cert_parameter contains no colon nor backslash; this
+ /* next less trivial: cert_parameter starts 'pkcs11:' and thus
+ * looks like a RFC7512 PKCS#11 URI which can be used as-is.
+ * Also if cert_parameter contains no colon nor backslash, this
* means no passphrase was given and no characters escaped */
- if(!strpbrk(cert_parameter, ":\\")) {
+ if(!strncmp(cert_parameter, "pkcs11:", 7) ||
+ !strpbrk(cert_parameter, ":\\")) {
*certname = strdup(cert_parameter);
return;
}
case 'b': /* egd-file */
GetStr(&config->egd_file, nextarg);
break;
- case 'B': /* XOAUTH2 Bearer */
- GetStr(&config->xoauth2_bearer, nextarg);
+ case 'B': /* OAuth 2.0 bearer token */
+ GetStr(&config->oauth_bearer, nextarg);
break;
case 'c': /* connect-timeout */
err = str2udouble(&config->connecttimeout, nextarg);
case 'Z': /* --eprt */
config->disable_eprt = (!toggle)?TRUE:FALSE;
break;
-
- default: /* the URL! */
+ case '~': /* --xattr */
+ config->xattr = toggle;
+ break;
+ case '@': /* the URL! */
{
struct getout *url;
if(config->url_get || ((config->url_get = config->url_list) != NULL)) {
/* This specifies the noproxy list */
GetStr(&config->noproxy, nextarg);
break;
- case '6': /* --socks5-gssapi-service */
- GetStr(&config->socks5_gssapi_service, nextarg);
- break;
- case '7': /* --socks5-gssapi-nec*/
+ case '7': /* --socks5-gssapi-nec*/
config->socks5_gssapi_nec = toggle;
break;
- case 'O': /* --proxy-service-name */
- GetStr(&config->proxy_service_name, nextarg);
- break;
- case 'P': /* --service-name */
- GetStr(&config->service_name, nextarg);
- break;
case '8': /* --proxy1.0 */
/* http 1.0 proxy */
GetStr(&config->proxy, nextarg);
case 'N': /* --path-as-is */
config->path_as_is = toggle;
break;
+ case 'O': /* --proxy-service-name */
+ GetStr(&config->proxy_service_name, nextarg);
+ break;
+ case 'P': /* --service-name */
+ GetStr(&config->service_name, nextarg);
+ break;
+ case 'Q': /* --proto-default */
+ GetStr(&config->proto_default, nextarg);
+ err = check_protocol(config->proto_default);
+ if(err)
+ return err;
+ break;
+ case 'R': /* --expect100-timeout */
+ err = str2udouble(&config->expect100timeout, nextarg);
+ if(err)
+ return err;
+ break;
+ case 'S': /* --tftp-no-options */
+ config->tftp_no_options = toggle;
+ break;
+ case 'U': /* --connect-to */
+ err = add2list(&config->connect_to, nextarg);
+ if(err)
+ return err;
+ break;
}
break;
case '#': /* --progress-bar */
break;
case ':': /* --next */
return PARAM_NEXT_OPERATION;
- case '~': /* --xattr */
- config->xattr = toggle;
- break;
case '0': /* --http* options */
switch(subletter) {
case '\0':
/* HTTP version 2.0 */
config->httpversion = CURL_HTTP_VERSION_2_0;
break;
+ case '3':
+ /* HTTP version 2.0 over clean TCP*/
+ config->httpversion = CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE;
+ break;
}
break;
case '1': /* --tlsv1* options */
config->ssl_no_revoke = TRUE;
break;
+ case 't': /* --tcp-fastopen */
+ config->tcp_fastopen = TRUE;
+ break;
+
default: /* certificate file */
{
char *certname, *passphrase;
&config->last_post,
(subletter=='s')?TRUE:FALSE)) /* 's' means literal string */
return PARAM_BAD_USE;
- if(SetHTTPrequest(config, HTTPREQ_POST, &config->httpreq))
+ if(SetHTTPrequest(config, HTTPREQ_FORMPOST, &config->httpreq))
return PARAM_BAD_USE;
break;