1 | #ifndef HEADER_CURL_TOOL_CFGABLE_H |
2 | #define |
3 | /*************************************************************************** |
4 | * _ _ ____ _ |
5 | * Project ___| | | | _ \| | |
6 | * / __| | | | |_) | | |
7 | * | (__| |_| | _ <| |___ |
8 | * \___|\___/|_| \_\_____| |
9 | * |
10 | * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. |
11 | * |
12 | * This software is licensed as described in the file COPYING, which |
13 | * you should have received as part of this distribution. The terms |
14 | * are also available at https://curl.haxx.se/docs/copyright.html. |
15 | * |
16 | * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
17 | * copies of the Software, and permit persons to whom the Software is |
18 | * furnished to do so, under the terms of the COPYING file. |
19 | * |
20 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
21 | * KIND, either express or implied. |
22 | * |
23 | ***************************************************************************/ |
24 | #include "tool_setup.h" |
25 | #include "tool_sdecls.h" |
26 | #include "tool_metalink.h" |
27 | #include "tool_urlglob.h" |
28 | #include "tool_formparse.h" |
29 | |
30 | typedef enum { |
31 | ERR_NONE, |
32 | ERR_BINARY_TERMINAL = 1, /* binary to terminal detected */ |
33 | ERR_LAST |
34 | } curl_error; |
35 | |
36 | struct GlobalConfig; |
37 | |
38 | struct State { |
39 | struct getout *urlnode; |
40 | URLGlob *inglob; |
41 | URLGlob *urls; |
42 | char *outfiles; |
43 | char *httpgetfields; |
44 | char *uploadfile; |
45 | unsigned long infilenum; /* number of files to upload */ |
46 | unsigned long up; /* upload file counter within a single upload glob */ |
47 | unsigned long urlnum; /* how many iterations this single URL has with ranges |
48 | etc */ |
49 | unsigned long li; |
50 | }; |
51 | |
52 | struct OperationConfig { |
53 | bool remote_time; |
54 | char *random_file; |
55 | char *egd_file; |
56 | char *useragent; |
57 | char *cookie; /* single line with specified cookies */ |
58 | char *cookiejar; /* write to this file */ |
59 | char *cookiefile; /* read from this file */ |
60 | char *altsvc; /* alt-svc cache file name */ |
61 | bool cookiesession; /* new session? */ |
62 | bool encoding; /* Accept-Encoding please */ |
63 | bool tr_encoding; /* Transfer-Encoding please */ |
64 | unsigned long authtype; /* auth bitmask */ |
65 | bool use_resume; |
66 | bool resume_from_current; |
67 | bool disable_epsv; |
68 | bool disable_eprt; |
69 | bool ftp_pret; |
70 | long proto; |
71 | bool proto_present; |
72 | long proto_redir; |
73 | bool proto_redir_present; |
74 | char *proto_default; |
75 | curl_off_t resume_from; |
76 | char *postfields; |
77 | curl_off_t postfieldsize; |
78 | char *referer; |
79 | double timeout; |
80 | double connecttimeout; |
81 | long maxredirs; |
82 | curl_off_t max_filesize; |
83 | char *; |
84 | char *ftpport; |
85 | char *iface; |
86 | long localport; |
87 | long localportrange; |
88 | unsigned short porttouse; |
89 | char *range; |
90 | long low_speed_limit; |
91 | long low_speed_time; |
92 | char *dns_servers; /* dot notation: 1.1.1.1;2.2.2.2 */ |
93 | char *dns_interface; /* interface name */ |
94 | char *dns_ipv4_addr; /* dot notation */ |
95 | char *dns_ipv6_addr; /* dot notation */ |
96 | char *userpwd; |
97 | char *login_options; |
98 | char *tls_username; |
99 | char *tls_password; |
100 | char *tls_authtype; |
101 | char *proxy_tls_username; |
102 | char *proxy_tls_password; |
103 | char *proxy_tls_authtype; |
104 | char *proxyuserpwd; |
105 | char *proxy; |
106 | int proxyver; /* set to CURLPROXY_HTTP* define */ |
107 | char *noproxy; |
108 | char *mail_from; |
109 | struct curl_slist *mail_rcpt; |
110 | char *mail_auth; |
111 | char *sasl_authzid; /* Authorisation identity (identity to use) */ |
112 | bool sasl_ir; /* Enable/disable SASL initial response */ |
113 | bool proxytunnel; |
114 | bool ftp_append; /* APPE on ftp */ |
115 | bool use_ascii; /* select ascii or text transfer */ |
116 | bool autoreferer; /* automatically set referer */ |
117 | bool failonerror; /* fail on (HTTP) errors */ |
118 | bool ; /* show headers to data output */ |
119 | bool no_body; /* don't get the body */ |
120 | bool dirlistonly; /* only get the FTP dir list */ |
121 | bool followlocation; /* follow http redirects */ |
122 | bool unrestricted_auth; /* Continue to send authentication (user+password) |
123 | when following ocations, even when hostname |
124 | changed */ |
125 | bool netrc_opt; |
126 | bool netrc; |
127 | char *netrc_file; |
128 | struct getout *url_list; /* point to the first node */ |
129 | struct getout *url_last; /* point to the last/current node */ |
130 | struct getout *url_get; /* point to the node to fill in URL */ |
131 | struct getout *url_out; /* point to the node to fill in outfile */ |
132 | struct getout *url_ul; /* point to the node to fill in upload */ |
133 | char *doh_url; |
134 | char *cipher_list; |
135 | char *proxy_cipher_list; |
136 | char *cipher13_list; |
137 | char *proxy_cipher13_list; |
138 | char *cert; |
139 | char *proxy_cert; |
140 | char *cert_type; |
141 | char *proxy_cert_type; |
142 | char *cacert; |
143 | char *proxy_cacert; |
144 | char *capath; |
145 | char *proxy_capath; |
146 | char *crlfile; |
147 | char *proxy_crlfile; |
148 | char *pinnedpubkey; |
149 | char *proxy_pinnedpubkey; |
150 | char *key; |
151 | char *proxy_key; |
152 | char *key_type; |
153 | char *proxy_key_type; |
154 | char *key_passwd; |
155 | char *proxy_key_passwd; |
156 | char *pubkey; |
157 | char *hostpubmd5; |
158 | char *engine; |
159 | bool crlf; |
160 | char *customrequest; |
161 | char *krblevel; |
162 | char *request_target; |
163 | long httpversion; |
164 | bool http09_allowed; |
165 | bool nobuffer; |
166 | bool readbusy; /* set when reading input returns EAGAIN */ |
167 | bool globoff; |
168 | bool use_httpget; |
169 | bool insecure_ok; /* set TRUE to allow insecure SSL connects */ |
170 | bool proxy_insecure_ok; /* set TRUE to allow insecure SSL connects |
171 | for proxy */ |
172 | bool terminal_binary_ok; |
173 | bool verifystatus; |
174 | bool create_dirs; |
175 | bool ftp_create_dirs; |
176 | bool ftp_skip_ip; |
177 | bool proxynegotiate; |
178 | bool proxyntlm; |
179 | bool proxydigest; |
180 | bool proxybasic; |
181 | bool proxyanyauth; |
182 | char *writeout; /* %-styled format string to output */ |
183 | struct curl_slist *quote; |
184 | struct curl_slist *postquote; |
185 | struct curl_slist *prequote; |
186 | long ssl_version; |
187 | long ssl_version_max; |
188 | long proxy_ssl_version; |
189 | long ip_version; |
190 | curl_TimeCond timecond; |
191 | curl_off_t condtime; |
192 | struct curl_slist *; |
193 | struct curl_slist *; |
194 | tool_mime *mimeroot; |
195 | tool_mime *mimecurrent; |
196 | curl_mime *mimepost; |
197 | struct curl_slist *telnet_options; |
198 | struct curl_slist *resolve; |
199 | struct curl_slist *connect_to; |
200 | HttpReq httpreq; |
201 | |
202 | /* for bandwidth limiting features: */ |
203 | curl_off_t sendpersecond; /* send to peer */ |
204 | curl_off_t recvpersecond; /* receive from peer */ |
205 | |
206 | bool ftp_ssl; |
207 | bool ftp_ssl_reqd; |
208 | bool ftp_ssl_control; |
209 | bool ftp_ssl_ccc; |
210 | int ftp_ssl_ccc_mode; |
211 | char *preproxy; |
212 | int socks5_gssapi_nec; /* The NEC reference server does not protect the |
213 | encryption type exchange */ |
214 | unsigned long socks5_auth;/* auth bitmask for socks5 proxies */ |
215 | char *proxy_service_name; /* set authentication service name for HTTP and |
216 | SOCKS5 proxies */ |
217 | char *service_name; /* set authentication service name for DIGEST-MD5, |
218 | Kerberos 5 and SPNEGO */ |
219 | |
220 | bool tcp_nodelay; |
221 | bool tcp_fastopen; |
222 | long req_retry; /* number of retries */ |
223 | bool retry_connrefused; /* set connection refused as a transient error */ |
224 | long retry_delay; /* delay between retries (in seconds) */ |
225 | long retry_maxtime; /* maximum time to keep retrying */ |
226 | |
227 | char *ftp_account; /* for ACCT */ |
228 | char *ftp_alternative_to_user; /* send command if USER/PASS fails */ |
229 | int ftp_filemethod; |
230 | long tftp_blksize; /* TFTP BLKSIZE option */ |
231 | bool tftp_no_options; /* do not send TFTP options requests */ |
232 | bool ignorecl; /* --ignore-content-length */ |
233 | bool disable_sessionid; |
234 | |
235 | bool raw; |
236 | bool post301; |
237 | bool post302; |
238 | bool post303; |
239 | bool nokeepalive; /* for keepalive needs */ |
240 | long alivetime; |
241 | bool content_disposition; /* use Content-disposition filename */ |
242 | |
243 | int default_node_flags; /* default flags to search for each 'node', which |
244 | is basically each given URL to transfer */ |
245 | |
246 | bool xattr; /* store metadata in extended attributes */ |
247 | long gssapi_delegation; |
248 | bool ssl_allow_beast; /* allow this SSL vulnerability */ |
249 | bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy*/ |
250 | |
251 | bool ssl_no_revoke; /* disable SSL certificate revocation checks */ |
252 | /*bool proxy_ssl_no_revoke; */ |
253 | |
254 | bool use_metalink; /* process given URLs as metalink XML file */ |
255 | metalinkfile *metalinkfile_list; /* point to the first node */ |
256 | metalinkfile *metalinkfile_last; /* point to the last/current node */ |
257 | char *oauth_bearer; /* OAuth 2.0 bearer token */ |
258 | bool nonpn; /* enable/disable TLS NPN extension */ |
259 | bool noalpn; /* enable/disable TLS ALPN extension */ |
260 | char *unix_socket_path; /* path to Unix domain socket */ |
261 | bool abstract_unix_socket; /* path to an abstract Unix domain socket */ |
262 | bool falsestart; |
263 | bool path_as_is; |
264 | double expect100timeout; |
265 | bool ; /* suppress proxy CONNECT response headers |
266 | from user callbacks */ |
267 | curl_error synthetic_error; /* if non-zero, it overrides any libcurl |
268 | error */ |
269 | bool ssh_compression; /* enable/disable SSH compression */ |
270 | long happy_eyeballs_timeout_ms; /* happy eyeballs timeout in milliseconds. |
271 | 0 is valid. default: CURL_HET_DEFAULT. */ |
272 | bool haproxy_protocol; /* whether to send HAProxy protocol v1 */ |
273 | bool disallow_username_in_url; /* disallow usernames in URLs */ |
274 | struct GlobalConfig *global; |
275 | struct OperationConfig *prev; |
276 | struct OperationConfig *next; /* Always last in the struct */ |
277 | struct State state; /* for create_transfer() */ |
278 | }; |
279 | |
280 | struct GlobalConfig { |
281 | int showerror; /* -1 == unset, default => show errors |
282 | 0 => -s is used to NOT show errors |
283 | 1 => -S has been used to show errors */ |
284 | bool mute; /* don't show messages, --silent given */ |
285 | bool noprogress; /* don't show progress bar --silent given */ |
286 | bool isatty; /* Updated internally if output is a tty */ |
287 | FILE *errors; /* Error stream, defaults to stderr */ |
288 | bool errors_fopened; /* Whether error stream isn't stderr */ |
289 | char *trace_dump; /* file to dump the network trace to */ |
290 | FILE *trace_stream; |
291 | bool trace_fopened; |
292 | trace tracetype; |
293 | bool tracetime; /* include timestamp? */ |
294 | int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */ |
295 | char *libcurl; /* Output libcurl code to this file name */ |
296 | bool fail_early; /* exit on first transfer error */ |
297 | bool styled_output; /* enable fancy output style detection */ |
298 | #ifdef CURLDEBUG |
299 | bool test_event_based; |
300 | #endif |
301 | bool parallel; |
302 | long parallel_max; |
303 | bool parallel_connect; |
304 | struct OperationConfig *first; |
305 | struct OperationConfig *current; |
306 | struct OperationConfig *last; /* Always last in the struct */ |
307 | }; |
308 | |
309 | void config_init(struct OperationConfig *config); |
310 | void config_free(struct OperationConfig *config); |
311 | |
312 | #endif /* HEADER_CURL_TOOL_CFGABLE_H */ |
313 | |