Annotation of embedaddon/curl/src/tool_cfgable.h, revision 1.1.1.1

1.1       misho       1: #ifndef HEADER_CURL_TOOL_CFGABLE_H
                      2: #define HEADER_CURL_TOOL_CFGABLE_H
                      3: /***************************************************************************
                      4:  *                                  _   _ ____  _
                      5:  *  Project                     ___| | | |  _ \| |
                      6:  *                             / __| | | | |_) | |
                      7:  *                            | (__| |_| |  _ <| |___
                      8:  *                             \___|\___/|_| \_\_____|
                      9:  *
                     10:  * Copyright (C) 1998 - 2020, 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 *headerfile;
                     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:   bool mail_rcpt_allowfails; /* --mail-rcpt-allowfails */
                    112:   char *sasl_authzid;       /* Authorisation identity (identity to use) */
                    113:   bool sasl_ir;             /* Enable/disable SASL initial response */
                    114:   bool proxytunnel;
                    115:   bool ftp_append;          /* APPE on ftp */
                    116:   bool use_ascii;           /* select ascii or text transfer */
                    117:   bool autoreferer;         /* automatically set referer */
                    118:   bool failonerror;         /* fail on (HTTP) errors */
                    119:   bool show_headers;        /* show headers to data output */
                    120:   bool no_body;             /* don't get the body */
                    121:   bool dirlistonly;         /* only get the FTP dir list */
                    122:   bool followlocation;      /* follow http redirects */
                    123:   bool unrestricted_auth;   /* Continue to send authentication (user+password)
                    124:                                when following ocations, even when hostname
                    125:                                changed */
                    126:   bool netrc_opt;
                    127:   bool netrc;
                    128:   char *netrc_file;
                    129:   struct getout *url_list;  /* point to the first node */
                    130:   struct getout *url_last;  /* point to the last/current node */
                    131:   struct getout *url_get;   /* point to the node to fill in URL */
                    132:   struct getout *url_out;   /* point to the node to fill in outfile */
                    133:   struct getout *url_ul;    /* point to the node to fill in upload */
                    134:   char *doh_url;
                    135:   char *cipher_list;
                    136:   char *proxy_cipher_list;
                    137:   char *cipher13_list;
                    138:   char *proxy_cipher13_list;
                    139:   char *cert;
                    140:   char *proxy_cert;
                    141:   char *cert_type;
                    142:   char *proxy_cert_type;
                    143:   char *cacert;
                    144:   char *proxy_cacert;
                    145:   char *capath;
                    146:   char *proxy_capath;
                    147:   char *crlfile;
                    148:   char *proxy_crlfile;
                    149:   char *pinnedpubkey;
                    150:   char *proxy_pinnedpubkey;
                    151:   char *key;
                    152:   char *proxy_key;
                    153:   char *key_type;
                    154:   char *proxy_key_type;
                    155:   char *key_passwd;
                    156:   char *proxy_key_passwd;
                    157:   char *pubkey;
                    158:   char *hostpubmd5;
                    159:   char *engine;
                    160:   char *etag_save_file;
                    161:   char *etag_compare_file;
                    162:   bool crlf;
                    163:   char *customrequest;
                    164:   char *krblevel;
                    165:   char *request_target;
                    166:   long httpversion;
                    167:   bool http09_allowed;
                    168:   bool nobuffer;
                    169:   bool readbusy;            /* set when reading input returns EAGAIN */
                    170:   bool globoff;
                    171:   bool use_httpget;
                    172:   bool insecure_ok;         /* set TRUE to allow insecure SSL connects */
                    173:   bool proxy_insecure_ok;   /* set TRUE to allow insecure SSL connects
                    174:                                for proxy */
                    175:   bool terminal_binary_ok;
                    176:   bool verifystatus;
                    177:   bool create_dirs;
                    178:   bool ftp_create_dirs;
                    179:   bool ftp_skip_ip;
                    180:   bool proxynegotiate;
                    181:   bool proxyntlm;
                    182:   bool proxydigest;
                    183:   bool proxybasic;
                    184:   bool proxyanyauth;
                    185:   char *writeout;           /* %-styled format string to output */
                    186:   struct curl_slist *quote;
                    187:   struct curl_slist *postquote;
                    188:   struct curl_slist *prequote;
                    189:   long ssl_version;
                    190:   long ssl_version_max;
                    191:   long proxy_ssl_version;
                    192:   long ip_version;
                    193:   curl_TimeCond timecond;
                    194:   curl_off_t condtime;
                    195:   struct curl_slist *headers;
                    196:   struct curl_slist *proxyheaders;
                    197:   tool_mime *mimeroot;
                    198:   tool_mime *mimecurrent;
                    199:   curl_mime *mimepost;
                    200:   struct curl_slist *telnet_options;
                    201:   struct curl_slist *resolve;
                    202:   struct curl_slist *connect_to;
                    203:   HttpReq httpreq;
                    204: 
                    205:   /* for bandwidth limiting features: */
                    206:   curl_off_t sendpersecond; /* send to peer */
                    207:   curl_off_t recvpersecond; /* receive from peer */
                    208: 
                    209:   bool ftp_ssl;
                    210:   bool ftp_ssl_reqd;
                    211:   bool ftp_ssl_control;
                    212:   bool ftp_ssl_ccc;
                    213:   int ftp_ssl_ccc_mode;
                    214:   char *preproxy;
                    215:   int socks5_gssapi_nec;    /* The NEC reference server does not protect the
                    216:                                encryption type exchange */
                    217:   unsigned long socks5_auth;/* auth bitmask for socks5 proxies */
                    218:   char *proxy_service_name; /* set authentication service name for HTTP and
                    219:                                SOCKS5 proxies */
                    220:   char *service_name;       /* set authentication service name for DIGEST-MD5,
                    221:                                Kerberos 5 and SPNEGO */
                    222: 
                    223:   bool tcp_nodelay;
                    224:   bool tcp_fastopen;
                    225:   long req_retry;           /* number of retries */
                    226:   bool retry_connrefused;   /* set connection refused as a transient error */
                    227:   long retry_delay;         /* delay between retries (in seconds) */
                    228:   long retry_maxtime;       /* maximum time to keep retrying */
                    229: 
                    230:   char *ftp_account;        /* for ACCT */
                    231:   char *ftp_alternative_to_user;  /* send command if USER/PASS fails */
                    232:   int ftp_filemethod;
                    233:   long tftp_blksize;        /* TFTP BLKSIZE option */
                    234:   bool tftp_no_options;     /* do not send TFTP options requests */
                    235:   bool ignorecl;            /* --ignore-content-length */
                    236:   bool disable_sessionid;
                    237: 
                    238:   bool raw;
                    239:   bool post301;
                    240:   bool post302;
                    241:   bool post303;
                    242:   bool nokeepalive;         /* for keepalive needs */
                    243:   long alivetime;
                    244:   bool content_disposition; /* use Content-disposition filename */
                    245: 
                    246:   int default_node_flags;   /* default flags to search for each 'node', which
                    247:                                is basically each given URL to transfer */
                    248: 
                    249:   bool xattr;               /* store metadata in extended attributes */
                    250:   long gssapi_delegation;
                    251:   bool ssl_allow_beast;     /* allow this SSL vulnerability */
                    252:   bool proxy_ssl_allow_beast; /* allow this SSL vulnerability for proxy*/
                    253: 
                    254:   bool ssl_no_revoke;       /* disable SSL certificate revocation checks */
                    255:   /*bool proxy_ssl_no_revoke; */
                    256: 
                    257:   bool ssl_revoke_best_effort; /* ignore SSL revocation offline/missing
                    258:                                   revocation list errors */
                    259: 
                    260:   bool use_metalink;        /* process given URLs as metalink XML file */
                    261:   metalinkfile *metalinkfile_list; /* point to the first node */
                    262:   metalinkfile *metalinkfile_last; /* point to the last/current node */
                    263:   char *oauth_bearer;             /* OAuth 2.0 bearer token */
                    264:   bool nonpn;                     /* enable/disable TLS NPN extension */
                    265:   bool noalpn;                    /* enable/disable TLS ALPN extension */
                    266:   char *unix_socket_path;         /* path to Unix domain socket */
                    267:   bool abstract_unix_socket;      /* path to an abstract Unix domain socket */
                    268:   bool falsestart;
                    269:   bool path_as_is;
                    270:   double expect100timeout;
                    271:   bool suppress_connect_headers;  /* suppress proxy CONNECT response headers
                    272:                                      from user callbacks */
                    273:   curl_error synthetic_error;     /* if non-zero, it overrides any libcurl
                    274:                                      error */
                    275:   bool ssh_compression;           /* enable/disable SSH compression */
                    276:   long happy_eyeballs_timeout_ms; /* happy eyeballs timeout in milliseconds.
                    277:                                      0 is valid. default: CURL_HET_DEFAULT. */
                    278:   bool haproxy_protocol;          /* whether to send HAProxy protocol v1 */
                    279:   bool disallow_username_in_url;  /* disallow usernames in URLs */
                    280:   struct GlobalConfig *global;
                    281:   struct OperationConfig *prev;
                    282:   struct OperationConfig *next;   /* Always last in the struct */
                    283:   struct State state;             /* for create_transfer() */
                    284: };
                    285: 
                    286: struct GlobalConfig {
                    287:   int showerror;                  /* -1 == unset, default => show errors
                    288:                                       0 => -s is used to NOT show errors
                    289:                                       1 => -S has been used to show errors */
                    290:   bool mute;                      /* don't show messages, --silent given */
                    291:   bool noprogress;                /* don't show progress bar --silent given */
                    292:   bool isatty;                    /* Updated internally if output is a tty */
                    293:   FILE *errors;                   /* Error stream, defaults to stderr */
                    294:   bool errors_fopened;            /* Whether error stream isn't stderr */
                    295:   char *trace_dump;               /* file to dump the network trace to */
                    296:   FILE *trace_stream;
                    297:   bool trace_fopened;
                    298:   trace tracetype;
                    299:   bool tracetime;                 /* include timestamp? */
                    300:   int progressmode;               /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */
                    301:   char *libcurl;                  /* Output libcurl code to this file name */
                    302:   bool fail_early;                /* exit on first transfer error */
                    303:   bool styled_output;             /* enable fancy output style detection */
                    304: #ifdef CURLDEBUG
                    305:   bool test_event_based;
                    306: #endif
                    307:   bool parallel;
                    308:   long parallel_max;
                    309:   bool parallel_connect;
                    310:   struct OperationConfig *first;
                    311:   struct OperationConfig *current;
                    312:   struct OperationConfig *last;   /* Always last in the struct */
                    313: };
                    314: 
                    315: void config_init(struct OperationConfig *config);
                    316: void config_free(struct OperationConfig *config);
                    317: 
                    318: #endif /* HEADER_CURL_TOOL_CFGABLE_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>