2011-09-16 15:44:45 -04:00
|
|
|
#ifndef HEADER_CURL_TOOL_CFGABLE_H
|
|
|
|
#define HEADER_CURL_TOOL_CFGABLE_H
|
|
|
|
/***************************************************************************
|
|
|
|
* _ _ ____ _
|
|
|
|
* Project ___| | | | _ \| |
|
|
|
|
* / __| | | | |_) | |
|
|
|
|
* | (__| |_| | _ <| |___
|
|
|
|
* \___|\___/|_| \_\_____|
|
|
|
|
*
|
2021-02-03 02:02:36 -05:00
|
|
|
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
2011-09-16 15:44:45 -04:00
|
|
|
*
|
|
|
|
* This software is licensed as described in the file COPYING, which
|
|
|
|
* you should have received as part of this distribution. The terms
|
2020-11-04 08:02:01 -05:00
|
|
|
* are also available at https://curl.se/docs/copyright.html.
|
2011-09-16 15:44:45 -04:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
|
|
*
|
|
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
* KIND, either express or implied.
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
2012-04-06 17:35:15 -04:00
|
|
|
#include "tool_setup.h"
|
2011-09-20 09:58:35 -04:00
|
|
|
#include "tool_sdecls.h"
|
2019-09-23 11:11:22 -04:00
|
|
|
#include "tool_urlglob.h"
|
2019-02-11 13:10:41 -05:00
|
|
|
#include "tool_formparse.h"
|
|
|
|
|
2017-06-16 05:30:36 -04:00
|
|
|
typedef enum {
|
|
|
|
ERR_NONE,
|
|
|
|
ERR_BINARY_TERMINAL = 1, /* binary to terminal detected */
|
|
|
|
ERR_LAST
|
|
|
|
} curl_error;
|
|
|
|
|
2014-02-26 16:02:53 -05:00
|
|
|
struct GlobalConfig;
|
|
|
|
|
2019-09-23 11:11:22 -04:00
|
|
|
struct State {
|
|
|
|
struct getout *urlnode;
|
2020-05-13 18:05:04 -04:00
|
|
|
struct URLGlob *inglob;
|
|
|
|
struct URLGlob *urls;
|
2019-09-23 11:11:22 -04:00
|
|
|
char *outfiles;
|
|
|
|
char *httpgetfields;
|
|
|
|
char *uploadfile;
|
|
|
|
unsigned long infilenum; /* number of files to upload */
|
|
|
|
unsigned long up; /* upload file counter within a single upload glob */
|
|
|
|
unsigned long urlnum; /* how many iterations this single URL has with ranges
|
|
|
|
etc */
|
|
|
|
unsigned long li;
|
|
|
|
};
|
|
|
|
|
2014-02-23 07:59:59 -05:00
|
|
|
struct OperationConfig {
|
2011-09-16 15:44:45 -04:00
|
|
|
bool remote_time;
|
|
|
|
char *random_file;
|
|
|
|
char *egd_file;
|
|
|
|
char *useragent;
|
2021-02-25 12:12:28 -05:00
|
|
|
struct curl_slist *cookies; /* cookies to serialize into a single line */
|
2011-09-16 15:44:45 -04:00
|
|
|
char *cookiejar; /* write to this file */
|
2021-02-25 12:12:28 -05:00
|
|
|
struct curl_slist *cookiefiles; /* file(s) to load cookies from */
|
2019-03-03 05:17:52 -05:00
|
|
|
char *altsvc; /* alt-svc cache file name */
|
2020-11-02 17:17:01 -05:00
|
|
|
char *hsts; /* HSTS cache file name */
|
2011-09-16 15:44:45 -04:00
|
|
|
bool cookiesession; /* new session? */
|
|
|
|
bool encoding; /* Accept-Encoding please */
|
|
|
|
bool tr_encoding; /* Transfer-Encoding please */
|
2012-04-18 17:04:35 -04:00
|
|
|
unsigned long authtype; /* auth bitmask */
|
2011-09-16 15:44:45 -04:00
|
|
|
bool use_resume;
|
|
|
|
bool resume_from_current;
|
|
|
|
bool disable_epsv;
|
|
|
|
bool disable_eprt;
|
|
|
|
bool ftp_pret;
|
|
|
|
long proto;
|
|
|
|
bool proto_present;
|
|
|
|
long proto_redir;
|
|
|
|
bool proto_redir_present;
|
2015-08-22 21:49:26 -04:00
|
|
|
char *proto_default;
|
2011-09-16 15:44:45 -04:00
|
|
|
curl_off_t resume_from;
|
|
|
|
char *postfields;
|
|
|
|
curl_off_t postfieldsize;
|
|
|
|
char *referer;
|
2013-04-30 10:23:39 -04:00
|
|
|
double timeout;
|
|
|
|
double connecttimeout;
|
2011-09-16 15:44:45 -04:00
|
|
|
long maxredirs;
|
|
|
|
curl_off_t max_filesize;
|
2020-08-24 02:31:36 -04:00
|
|
|
char *output_dir;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *headerfile;
|
|
|
|
char *ftpport;
|
|
|
|
char *iface;
|
2018-11-05 05:57:29 -05:00
|
|
|
long localport;
|
|
|
|
long localportrange;
|
2011-09-16 15:44:45 -04:00
|
|
|
unsigned short porttouse;
|
|
|
|
char *range;
|
|
|
|
long low_speed_limit;
|
|
|
|
long low_speed_time;
|
2013-09-13 13:50:11 -04:00
|
|
|
char *dns_servers; /* dot notation: 1.1.1.1;2.2.2.2 */
|
|
|
|
char *dns_interface; /* interface name */
|
|
|
|
char *dns_ipv4_addr; /* dot notation */
|
|
|
|
char *dns_ipv6_addr; /* dot notation */
|
2011-09-16 15:44:45 -04:00
|
|
|
char *userpwd;
|
2013-12-14 16:39:27 -05:00
|
|
|
char *login_options;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *tls_username;
|
|
|
|
char *tls_password;
|
|
|
|
char *tls_authtype;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_tls_username;
|
|
|
|
char *proxy_tls_password;
|
|
|
|
char *proxy_tls_authtype;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *proxyuserpwd;
|
|
|
|
char *proxy;
|
|
|
|
int proxyver; /* set to CURLPROXY_HTTP* define */
|
|
|
|
char *noproxy;
|
|
|
|
char *mail_from;
|
|
|
|
struct curl_slist *mail_rcpt;
|
2012-02-16 07:19:47 -05:00
|
|
|
char *mail_auth;
|
2020-01-14 17:22:38 -05:00
|
|
|
bool mail_rcpt_allowfails; /* --mail-rcpt-allowfails */
|
2019-04-19 09:26:47 -04:00
|
|
|
char *sasl_authzid; /* Authorisation identity (identity to use) */
|
2013-04-27 04:54:14 -04:00
|
|
|
bool sasl_ir; /* Enable/disable SASL initial response */
|
2011-09-16 15:44:45 -04:00
|
|
|
bool proxytunnel;
|
|
|
|
bool ftp_append; /* APPE on ftp */
|
|
|
|
bool use_ascii; /* select ascii or text transfer */
|
|
|
|
bool autoreferer; /* automatically set referer */
|
|
|
|
bool failonerror; /* fail on (HTTP) errors */
|
2021-02-11 02:30:39 -05:00
|
|
|
bool failwithbody; /* fail on (HTTP) errors but still store body */
|
2018-05-17 07:56:35 -04:00
|
|
|
bool show_headers; /* show headers to data output */
|
2011-09-16 15:44:45 -04:00
|
|
|
bool no_body; /* don't get the body */
|
|
|
|
bool dirlistonly; /* only get the FTP dir list */
|
|
|
|
bool followlocation; /* follow http redirects */
|
|
|
|
bool unrestricted_auth; /* Continue to send authentication (user+password)
|
|
|
|
when following ocations, even when hostname
|
|
|
|
changed */
|
|
|
|
bool netrc_opt;
|
|
|
|
bool netrc;
|
|
|
|
char *netrc_file;
|
|
|
|
struct getout *url_list; /* point to the first node */
|
|
|
|
struct getout *url_last; /* point to the last/current node */
|
|
|
|
struct getout *url_get; /* point to the node to fill in URL */
|
|
|
|
struct getout *url_out; /* point to the node to fill in outfile */
|
2017-11-04 07:56:30 -04:00
|
|
|
struct getout *url_ul; /* point to the node to fill in upload */
|
2018-09-06 03:16:02 -04:00
|
|
|
char *doh_url;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *cipher_list;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_cipher_list;
|
2018-05-29 10:12:52 -04:00
|
|
|
char *cipher13_list;
|
|
|
|
char *proxy_cipher13_list;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *cert;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_cert;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *cert_type;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_cert_type;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *cacert;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_cacert;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *capath;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_capath;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *crlfile;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_crlfile;
|
2014-09-30 22:31:17 -04:00
|
|
|
char *pinnedpubkey;
|
2018-01-28 08:15:56 -05:00
|
|
|
char *proxy_pinnedpubkey;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *key;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_key;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *key_type;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_key_type;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *key_passwd;
|
2016-11-16 12:49:15 -05:00
|
|
|
char *proxy_key_passwd;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *pubkey;
|
|
|
|
char *hostpubmd5;
|
|
|
|
char *engine;
|
2019-10-30 04:43:14 -04:00
|
|
|
char *etag_save_file;
|
|
|
|
char *etag_compare_file;
|
2011-09-16 15:44:45 -04:00
|
|
|
bool crlf;
|
|
|
|
char *customrequest;
|
2020-08-29 08:09:24 -04:00
|
|
|
char *ssl_ec_curves;
|
2011-09-16 15:44:45 -04:00
|
|
|
char *krblevel;
|
2017-06-21 17:35:08 -04:00
|
|
|
char *request_target;
|
2011-09-16 15:44:45 -04:00
|
|
|
long httpversion;
|
2018-12-17 09:46:56 -05:00
|
|
|
bool http09_allowed;
|
2011-09-16 15:44:45 -04:00
|
|
|
bool nobuffer;
|
|
|
|
bool readbusy; /* set when reading input returns EAGAIN */
|
|
|
|
bool globoff;
|
|
|
|
bool use_httpget;
|
|
|
|
bool insecure_ok; /* set TRUE to allow insecure SSL connects */
|
2021-02-11 17:09:59 -05:00
|
|
|
bool doh_insecure_ok; /* set TRUE to allow insecure SSL connects
|
|
|
|
for DOH */
|
2016-11-16 12:49:15 -05:00
|
|
|
bool proxy_insecure_ok; /* set TRUE to allow insecure SSL connects
|
|
|
|
for proxy */
|
2017-06-16 05:30:36 -04:00
|
|
|
bool terminal_binary_ok;
|
2014-06-16 14:47:26 -04:00
|
|
|
bool verifystatus;
|
2021-02-11 17:09:59 -05:00
|
|
|
bool doh_verifystatus;
|
2011-09-16 15:44:45 -04:00
|
|
|
bool create_dirs;
|
|
|
|
bool ftp_create_dirs;
|
|
|
|
bool ftp_skip_ip;
|
|
|
|
bool proxynegotiate;
|
|
|
|
bool proxyntlm;
|
|
|
|
bool proxydigest;
|
|
|
|
bool proxybasic;
|
|
|
|
bool proxyanyauth;
|
|
|
|
char *writeout; /* %-styled format string to output */
|
|
|
|
struct curl_slist *quote;
|
|
|
|
struct curl_slist *postquote;
|
|
|
|
struct curl_slist *prequote;
|
|
|
|
long ssl_version;
|
2016-12-13 15:10:00 -05:00
|
|
|
long ssl_version_max;
|
2016-11-16 12:49:15 -05:00
|
|
|
long proxy_ssl_version;
|
2011-09-16 15:44:45 -04:00
|
|
|
long ip_version;
|
2020-12-20 12:44:20 -05:00
|
|
|
long create_file_mode; /* CURLOPT_NEW_FILE_PERMS */
|
2011-09-16 15:44:45 -04:00
|
|
|
curl_TimeCond timecond;
|
2018-02-05 15:57:39 -05:00
|
|
|
curl_off_t condtime;
|
2011-09-16 15:44:45 -04:00
|
|
|
struct curl_slist *headers;
|
2014-02-04 17:48:16 -05:00
|
|
|
struct curl_slist *proxyheaders;
|
2020-05-13 18:05:04 -04:00
|
|
|
struct tool_mime *mimeroot;
|
|
|
|
struct tool_mime *mimecurrent;
|
2019-02-19 11:08:58 -05:00
|
|
|
curl_mime *mimepost;
|
2011-09-16 15:44:45 -04:00
|
|
|
struct curl_slist *telnet_options;
|
|
|
|
struct curl_slist *resolve;
|
2016-01-25 08:37:24 -05:00
|
|
|
struct curl_slist *connect_to;
|
2011-09-16 15:44:45 -04:00
|
|
|
HttpReq httpreq;
|
|
|
|
|
|
|
|
/* for bandwidth limiting features: */
|
|
|
|
curl_off_t sendpersecond; /* send to peer */
|
|
|
|
curl_off_t recvpersecond; /* receive from peer */
|
|
|
|
|
|
|
|
bool ftp_ssl;
|
|
|
|
bool ftp_ssl_reqd;
|
|
|
|
bool ftp_ssl_control;
|
|
|
|
bool ftp_ssl_ccc;
|
|
|
|
int ftp_ssl_ccc_mode;
|
2016-12-16 10:02:08 -05:00
|
|
|
char *preproxy;
|
2016-04-09 15:47:05 -04:00
|
|
|
int socks5_gssapi_nec; /* The NEC reference server does not protect the
|
|
|
|
encryption type exchange */
|
2017-05-19 12:11:47 -04:00
|
|
|
unsigned long socks5_auth;/* auth bitmask for socks5 proxies */
|
2016-04-09 15:47:05 -04:00
|
|
|
char *proxy_service_name; /* set authentication service name for HTTP and
|
|
|
|
SOCKS5 proxies */
|
2016-04-09 00:33:03 -04:00
|
|
|
char *service_name; /* set authentication service name for DIGEST-MD5,
|
|
|
|
Kerberos 5 and SPNEGO */
|
2011-09-16 15:44:45 -04:00
|
|
|
|
|
|
|
bool tcp_nodelay;
|
2016-02-16 07:21:34 -05:00
|
|
|
bool tcp_fastopen;
|
2011-09-16 15:44:45 -04:00
|
|
|
long req_retry; /* number of retries */
|
2020-04-04 16:16:18 -04:00
|
|
|
bool retry_all_errors; /* retry on any error */
|
2016-10-09 19:00:25 -04:00
|
|
|
bool retry_connrefused; /* set connection refused as a transient error */
|
2011-09-16 15:44:45 -04:00
|
|
|
long retry_delay; /* delay between retries (in seconds) */
|
|
|
|
long retry_maxtime; /* maximum time to keep retrying */
|
|
|
|
|
|
|
|
char *ftp_account; /* for ACCT */
|
|
|
|
char *ftp_alternative_to_user; /* send command if USER/PASS fails */
|
|
|
|
int ftp_filemethod;
|
|
|
|
long tftp_blksize; /* TFTP BLKSIZE option */
|
2015-08-24 00:15:01 -04:00
|
|
|
bool tftp_no_options; /* do not send TFTP options requests */
|
2011-09-16 15:44:45 -04:00
|
|
|
bool ignorecl; /* --ignore-content-length */
|
|
|
|
bool disable_sessionid;
|
|
|
|
|
|
|
|
bool raw;
|
|
|
|
bool post301;
|
|
|
|
bool post302;
|
2012-04-05 17:34:12 -04:00
|
|
|
bool post303;
|
2011-09-16 15:44:45 -04:00
|
|
|
bool nokeepalive; /* for keepalive needs */
|
|
|
|
long alivetime;
|
|
|
|
bool content_disposition; /* use Content-disposition filename */
|
|
|
|
|
|
|
|
int default_node_flags; /* default flags to search for each 'node', which
|
|
|
|
is basically each given URL to transfer */
|
2011-09-30 14:56:56 -04:00
|
|
|
|
2011-09-16 15:44:45 -04:00
|
|
|
bool xattr; /* store metadata in extended attributes */
|
|
|
|
long gssapi_delegation;
|
2012-02-06 16:25:04 -05:00
|
|
|
bool ssl_allow_beast; /* allow this SSL vulnerability */
|
2016-11-16 12:49:15 -05:00
|
|
|
bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy*/
|
|
|
|
|
2015-07-17 02:40:16 -04:00
|
|
|
bool ssl_no_revoke; /* disable SSL certificate revocation checks */
|
2016-11-16 12:49:15 -05:00
|
|
|
/*bool proxy_ssl_no_revoke; */
|
2012-05-26 09:51:03 -04:00
|
|
|
|
schannel: add "best effort" revocation check option
- Implement new option CURLSSLOPT_REVOKE_BEST_EFFORT and
--ssl-revoke-best-effort to allow a "best effort" revocation check.
A best effort revocation check ignores errors that the revocation check
was unable to take place. The reasoning is described in detail below and
discussed further in the PR.
---
When running e.g. with Fiddler, the schannel backend fails with an
unhelpful error message:
Unknown error (0x80092012) - The revocation function was unable
to check revocation for the certificate.
Sadly, many enterprise users who are stuck behind MITM proxies suffer
the very same problem.
This has been discussed in plenty of issues:
https://github.com/curl/curl/issues/3727,
https://github.com/curl/curl/issues/264, for example.
In the latter, a Microsoft Edge developer even made the case that the
common behavior is to ignore issues when a certificate has no recorded
distribution point for revocation lists, or when the server is offline.
This is also known as "best effort" strategy and addresses the Fiddler
issue.
Unfortunately, this strategy was not chosen as the default for schannel
(and is therefore a backend-specific behavior: OpenSSL seems to happily
ignore the offline servers and missing distribution points).
To maintain backward-compatibility, we therefore add a new flag
(`CURLSSLOPT_REVOKE_BEST_EFFORT`) and a new option
(`--ssl-revoke-best-effort`) to select the new behavior.
Due to the many related issues Git for Windows and GitHub Desktop, the
plan is to make this behavior the default in these software packages.
The test 2070 was added to verify this behavior, adapted from 310.
Based-on-work-by: georgeok <giorgos.n.oikonomou@gmail.com>
Co-authored-by: Markus Olsson <j.markus.olsson@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Closes https://github.com/curl/curl/pull/4981
2020-02-26 05:24:26 -05:00
|
|
|
bool ssl_revoke_best_effort; /* ignore SSL revocation offline/missing
|
|
|
|
revocation list errors */
|
|
|
|
|
2019-09-13 05:24:00 -04:00
|
|
|
bool native_ca_store; /* use the native os ca store */
|
2021-02-27 16:27:31 -05:00
|
|
|
bool ssl_auto_client_cert; /* automatically locate and use a client
|
|
|
|
certificate for authentication (Schannel) */
|
|
|
|
bool proxy_ssl_auto_client_cert; /* proxy version of ssl_auto_client_cert */
|
2015-09-04 02:11:09 -04:00
|
|
|
char *oauth_bearer; /* OAuth 2.0 bearer token */
|
2014-12-26 15:45:21 -05:00
|
|
|
bool nonpn; /* enable/disable TLS NPN extension */
|
|
|
|
bool noalpn; /* enable/disable TLS ALPN extension */
|
|
|
|
char *unix_socket_path; /* path to Unix domain socket */
|
2017-01-08 17:51:08 -05:00
|
|
|
bool abstract_unix_socket; /* path to an abstract Unix domain socket */
|
2015-02-14 12:17:04 -05:00
|
|
|
bool falsestart;
|
2015-03-23 05:51:49 -04:00
|
|
|
bool path_as_is;
|
2015-12-14 07:29:13 -05:00
|
|
|
double expect100timeout;
|
2016-04-28 05:33:25 -04:00
|
|
|
bool suppress_connect_headers; /* suppress proxy CONNECT response headers
|
|
|
|
from user callbacks */
|
2017-06-16 05:30:36 -04:00
|
|
|
curl_error synthetic_error; /* if non-zero, it overrides any libcurl
|
|
|
|
error */
|
2017-08-05 05:26:04 -04:00
|
|
|
bool ssh_compression; /* enable/disable SSH compression */
|
2018-01-30 19:33:51 -05:00
|
|
|
long happy_eyeballs_timeout_ms; /* happy eyeballs timeout in milliseconds.
|
|
|
|
0 is valid. default: CURL_HET_DEFAULT. */
|
2018-05-18 11:56:18 -04:00
|
|
|
bool haproxy_protocol; /* whether to send HAProxy protocol v1 */
|
2018-02-25 14:17:25 -05:00
|
|
|
bool disallow_username_in_url; /* disallow usernames in URLs */
|
2021-01-25 09:02:09 -05:00
|
|
|
char *aws_sigv4;
|
2014-02-26 16:02:53 -05:00
|
|
|
struct GlobalConfig *global;
|
2014-02-27 15:59:15 -05:00
|
|
|
struct OperationConfig *prev;
|
2014-12-26 15:45:21 -05:00
|
|
|
struct OperationConfig *next; /* Always last in the struct */
|
2019-09-23 11:11:22 -04:00
|
|
|
struct State state; /* for create_transfer() */
|
2014-02-07 16:14:43 -05:00
|
|
|
};
|
2011-09-16 15:44:45 -04:00
|
|
|
|
2014-02-23 08:15:31 -05:00
|
|
|
struct GlobalConfig {
|
2014-02-23 11:37:28 -05:00
|
|
|
int showerror; /* -1 == unset, default => show errors
|
|
|
|
0 => -s is used to NOT show errors
|
|
|
|
1 => -S has been used to show errors */
|
2014-02-27 15:21:23 -05:00
|
|
|
bool mute; /* don't show messages, --silent given */
|
2014-03-01 08:20:20 -05:00
|
|
|
bool noprogress; /* don't show progress bar --silent given */
|
2014-03-01 08:49:28 -05:00
|
|
|
bool isatty; /* Updated internally if output is a tty */
|
2014-03-01 08:00:31 -05:00
|
|
|
FILE *errors; /* Error stream, defaults to stderr */
|
|
|
|
bool errors_fopened; /* Whether error stream isn't stderr */
|
2014-02-27 15:51:49 -05:00
|
|
|
char *trace_dump; /* file to dump the network trace to */
|
|
|
|
FILE *trace_stream;
|
|
|
|
bool trace_fopened;
|
|
|
|
trace tracetype;
|
|
|
|
bool tracetime; /* include timestamp? */
|
2014-03-01 08:20:20 -05:00
|
|
|
int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */
|
2014-03-01 08:38:00 -05:00
|
|
|
char *libcurl; /* Output libcurl code to this file name */
|
2016-11-12 08:19:29 -05:00
|
|
|
bool fail_early; /* exit on first transfer error */
|
2018-05-17 08:09:17 -04:00
|
|
|
bool styled_output; /* enable fancy output style detection */
|
2019-07-20 13:14:00 -04:00
|
|
|
#ifdef CURLDEBUG
|
|
|
|
bool test_event_based;
|
|
|
|
#endif
|
|
|
|
bool parallel;
|
|
|
|
long parallel_max;
|
2019-10-17 04:05:53 -04:00
|
|
|
bool parallel_connect;
|
2020-09-02 14:11:20 -04:00
|
|
|
char *help_category; /* The help category, if set */
|
2014-02-23 08:15:31 -05:00
|
|
|
struct OperationConfig *first;
|
2014-02-23 10:30:24 -05:00
|
|
|
struct OperationConfig *current;
|
2014-02-23 08:15:31 -05:00
|
|
|
struct OperationConfig *last; /* Always last in the struct */
|
|
|
|
};
|
|
|
|
|
2014-02-27 15:59:15 -05:00
|
|
|
void config_init(struct OperationConfig *config);
|
|
|
|
void config_free(struct OperationConfig *config);
|
2011-09-16 15:44:45 -04:00
|
|
|
|
|
|
|
#endif /* HEADER_CURL_TOOL_CFGABLE_H */
|