| #ifndef HEADER_CURL_TOOL_CFGABLE_H |
| #define HEADER_CURL_TOOL_CFGABLE_H |
| /*************************************************************************** |
| * _ _ ____ _ |
| * Project ___| | | | _ \| | |
| * / __| | | | |_) | | |
| * | (__| |_| | _ <| |___ |
| * \___|\___/|_| \_\_____| |
| * |
| * Copyright (C) Daniel Stenberg, <[email protected]>, 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 https://curl.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 |
| * 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. |
| * |
| * SPDX-License-Identifier: curl |
| * |
| ***************************************************************************/ |
| #include "tool_setup.h" |
| #include "tool_sdecls.h" |
| #include "tool_urlglob.h" |
| #include "tool_formparse.h" |
| |
| struct GlobalConfig; |
| |
| struct State { |
| struct getout *urlnode; |
| struct URLGlob *inglob; |
| struct URLGlob *urls; |
| 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; |
| }; |
| |
| struct OperationConfig { |
| bool remote_time; |
| char *useragent; |
| struct curl_slist *cookies; /* cookies to serialize into a single line */ |
| char *cookiejar; /* write to this file */ |
| struct curl_slist *cookiefiles; /* file(s) to load cookies from */ |
| char *altsvc; /* alt-svc cache file name */ |
| char *hsts; /* HSTS cache file name */ |
| bool cookiesession; /* new session? */ |
| bool encoding; /* Accept-Encoding please */ |
| bool tr_encoding; /* Transfer-Encoding please */ |
| unsigned long authtype; /* auth bitmask */ |
| bool use_resume; |
| bool resume_from_current; |
| bool disable_epsv; |
| bool disable_eprt; |
| bool ftp_pret; |
| char *proto_str; |
| bool proto_present; |
| char *proto_redir_str; |
| bool proto_redir_present; |
| char *proto_default; |
| curl_off_t resume_from; |
| char *postfields; |
| curl_off_t postfieldsize; |
| char *referer; |
| char *query; |
| long timeout_ms; |
| long connecttimeout_ms; |
| long maxredirs; |
| curl_off_t max_filesize; |
| char *output_dir; |
| char *headerfile; |
| char *ftpport; |
| char *iface; |
| long localport; |
| long localportrange; |
| unsigned short porttouse; |
| char *range; |
| long low_speed_limit; |
| long low_speed_time; |
| 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 */ |
| char *userpwd; |
| char *login_options; |
| char *tls_username; |
| char *tls_password; |
| char *tls_authtype; |
| char *proxy_tls_username; |
| char *proxy_tls_password; |
| char *proxy_tls_authtype; |
| char *proxyuserpwd; |
| char *proxy; |
| int proxyver; /* set to CURLPROXY_HTTP* define */ |
| char *noproxy; |
| char *mail_from; |
| struct curl_slist *mail_rcpt; |
| char *mail_auth; |
| bool mail_rcpt_allowfails; /* --mail-rcpt-allowfails */ |
| char *sasl_authzid; /* Authorization identity (identity to use) */ |
| bool sasl_ir; /* Enable/disable SASL initial response */ |
| 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 */ |
| bool failwithbody; /* fail on (HTTP) errors but still store body */ |
| bool show_headers; /* show headers to data output */ |
| 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 */ |
| struct getout *url_ul; /* point to the node to fill in upload */ |
| char *doh_url; |
| char *cipher_list; |
| char *proxy_cipher_list; |
| char *cipher13_list; |
| char *proxy_cipher13_list; |
| char *cert; |
| char *proxy_cert; |
| char *cert_type; |
| char *proxy_cert_type; |
| char *cacert; |
| char *proxy_cacert; |
| char *capath; |
| char *proxy_capath; |
| char *crlfile; |
| char *proxy_crlfile; |
| char *pinnedpubkey; |
| char *proxy_pinnedpubkey; |
| char *key; |
| char *proxy_key; |
| char *key_type; |
| char *proxy_key_type; |
| char *key_passwd; |
| char *proxy_key_passwd; |
| char *pubkey; |
| char *hostpubmd5; |
| char *hostpubsha256; |
| char *engine; |
| char *etag_save_file; |
| char *etag_compare_file; |
| bool crlf; |
| char *customrequest; |
| char *ssl_ec_curves; |
| char *krblevel; |
| char *request_target; |
| long httpversion; |
| bool http09_allowed; |
| 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 */ |
| bool doh_insecure_ok; /* set TRUE to allow insecure SSL connects |
| for DoH */ |
| bool proxy_insecure_ok; /* set TRUE to allow insecure SSL connects |
| for proxy */ |
| bool terminal_binary_ok; |
| bool verifystatus; |
| bool doh_verifystatus; |
| bool create_dirs; |
| bool ftp_create_dirs; |
| bool ftp_skip_ip; |
| bool proxynegotiate; |
| bool proxyntlm; |
| bool proxydigest; |
| bool proxybasic; |
| bool proxyanyauth; |
| bool jsoned; /* added json content-type */ |
| char *writeout; /* %-styled format string to output */ |
| struct curl_slist *quote; |
| struct curl_slist *postquote; |
| struct curl_slist *prequote; |
| long ssl_version; |
| long ssl_version_max; |
| long proxy_ssl_version; |
| long ip_version; |
| long create_file_mode; /* CURLOPT_NEW_FILE_PERMS */ |
| curl_TimeCond timecond; |
| curl_off_t condtime; |
| struct curl_slist *headers; |
| struct curl_slist *proxyheaders; |
| struct tool_mime *mimeroot; |
| struct tool_mime *mimecurrent; |
| curl_mime *mimepost; |
| struct curl_slist *telnet_options; |
| struct curl_slist *resolve; |
| struct curl_slist *connect_to; |
| 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; |
| char *preproxy; |
| bool socks5_gssapi_nec; /* The NEC reference server does not protect the |
| encryption type exchange */ |
| unsigned long socks5_auth;/* auth bitmask for socks5 proxies */ |
| char *proxy_service_name; /* set authentication service name for HTTP and |
| SOCKS5 proxies */ |
| char *service_name; /* set authentication service name for DIGEST-MD5, |
| Kerberos 5 and SPNEGO */ |
| |
| bool tcp_nodelay; |
| bool tcp_fastopen; |
| long req_retry; /* number of retries */ |
| bool retry_all_errors; /* retry on any error */ |
| bool retry_connrefused; /* set connection refused as a transient error */ |
| 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 mime_options; /* Mime option flags. */ |
| long tftp_blksize; /* TFTP BLKSIZE option */ |
| bool tftp_no_options; /* do not send TFTP options requests */ |
| bool ignorecl; /* --ignore-content-length */ |
| bool disable_sessionid; |
| |
| bool raw; |
| bool post301; |
| bool post302; |
| bool post303; |
| 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 */ |
| |
| bool xattr; /* store metadata in extended attributes */ |
| long gssapi_delegation; |
| bool ssl_allow_beast; /* allow this SSL vulnerability */ |
| bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy */ |
| bool ssl_no_revoke; /* disable SSL certificate revocation checks */ |
| bool ssl_revoke_best_effort; /* ignore SSL revocation offline/missing |
| revocation list errors */ |
| |
| bool native_ca_store; /* use the native os ca store */ |
| 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 */ |
| char *oauth_bearer; /* OAuth 2.0 bearer token */ |
| bool noalpn; /* enable/disable TLS ALPN extension */ |
| char *unix_socket_path; /* path to Unix domain socket */ |
| bool abstract_unix_socket; /* path to an abstract Unix domain socket */ |
| bool falsestart; |
| bool path_as_is; |
| long expect100timeout_ms; |
| bool suppress_connect_headers; /* suppress proxy CONNECT response headers |
| from user callbacks */ |
| bool synthetic_error; /* if TRUE, this is tool-internal error */ |
| bool ssh_compression; /* enable/disable SSH compression */ |
| long happy_eyeballs_timeout_ms; /* happy eyeballs timeout in milliseconds. |
| 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 */ |
| char *aws_sigv4; |
| enum { |
| CLOBBER_DEFAULT, /* Provides compatibility with previous versions of curl, |
| by using the default behavior for -o, -O, and -J. |
| If those options would have overwritten files, like |
| -o and -O would, then overwrite them. In the case of |
| -J, this will not overwrite any files. */ |
| CLOBBER_NEVER, /* If the file exists, always fail */ |
| CLOBBER_ALWAYS /* If the file exists, always overwrite it */ |
| } file_clobber_mode; |
| struct GlobalConfig *global; |
| struct OperationConfig *prev; |
| struct OperationConfig *next; /* Always last in the struct */ |
| struct State state; /* for create_transfer() */ |
| bool rm_partial; /* on error, remove partially written output |
| files */ |
| }; |
| |
| struct GlobalConfig { |
| bool showerror; /* show errors when silent */ |
| bool silent; /* don't show messages, --silent given */ |
| bool noprogress; /* don't show progress bar */ |
| bool isatty; /* Updated internally if output is a tty */ |
| char *trace_dump; /* file to dump the network trace to */ |
| FILE *trace_stream; |
| bool trace_fopened; |
| trace tracetype; |
| bool tracetime; /* include timestamp? */ |
| int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */ |
| char *libcurl; /* Output libcurl code to this file name */ |
| bool fail_early; /* exit on first transfer error */ |
| bool styled_output; /* enable fancy output style detection */ |
| long ms_per_transfer; /* start next transfer after (at least) this |
| many milliseconds */ |
| #ifdef CURLDEBUG |
| bool test_event_based; |
| #endif |
| bool parallel; |
| long parallel_max; |
| bool parallel_connect; |
| char *help_category; /* The help category, if set */ |
| struct OperationConfig *first; |
| struct OperationConfig *current; |
| struct OperationConfig *last; /* Always last in the struct */ |
| }; |
| |
| void config_init(struct OperationConfig *config); |
| void config_free(struct OperationConfig *config); |
| |
| #endif /* HEADER_CURL_TOOL_CFGABLE_H */ |