/*
* Copyright (c) 2012 Tim Ruehsen
* Copyright (c) 2015-2021 Free Software Foundation, Inc.
*
* This file is part of Wget.
*
* Wget is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Wget is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Wget. If not, see .
*
*
* Header file for option routines
*
* Changelog
* 12.06.2012 Tim Ruehsen created
*
*/
#ifndef SRC_WGET_OPTIONS_H
#define SRC_WGET_OPTIONS_H
#include
#include // needed for EXIT_SUCCESS
#ifdef WITH_LIBHSTS
#include
#endif
#include
#define INCLUDED_DIRECTORY_PREFIX '+'
#define EXCLUDED_DIRECTORY_PREFIX '-'
//types for --https-enforce
typedef enum {
HTTPS_ENFORCE_NONE,
HTTPS_ENFORCE_SOFT,
HTTPS_ENFORCE_HARD
} https_enforce_mode;
typedef enum {
GPG_VERIFY_DISABLED,
GPG_VERIFY_SIG_FAIL,
WGET_GPG_VERIFY_SIG_NO_FAIL
} gpg_verify_mode;
typedef enum {
DOWNLOAD_ATTR_NO,
DOWNLOAD_ATTR_STRIPPATH,
DOWNLOAD_ATTR_USEPATH,
} download_attr_mode;
typedef struct {
const char
*filename;
FILE
*fp;
wget_stats_format
format;
} stats_args;
struct config {
wget_iri
*base;
const char
*post_file,
*post_data,
*body_file,
*body_data,
*http_username,
*http_password,
*http_proxy_username,
*http_proxy_password,
*input_encoding, // encoding of files given with --input-file (or -i) (if not specified in the document itself)
*local_encoding, // encoding of the environment and file system
*remote_encoding, // encoding of remote files (if not specified in Content-Type HTTP header or in document itself)
*bind_address,
*bind_interface,
*input_file,
*base_url,
*default_page,
*referer,
*directory_prefix,
*http_proxy,
*https_proxy,
*no_proxy,
*cookie_suffixes,
*load_cookies,
*save_cookies,
*logfile,
*logfile_append,
*user_agent,
*output_document,
*ca_cert,
*ca_directory,
*cert_file,
*crl_file,
*egd_file,
*private_key,
*random_file,
*secure_protocol, // auto, SSLv2, SSLv3, TLSv1
*accept_regex,
*reject_regex,
*gnupg_homedir,
*stats_all,
*system_config,
*user_config,
*hsts_file,
*hsts_preload_file,
*hpkp_file,
*tls_session_file,
*ocsp_server,
*ocsp_file,
*netrc_file,
*use_askpass_bin,
*hostname,
*dns_cache_preload,
*method;
wget_vector
*compression,
*domains,
*exclude_directories,
*exclude_domains,
*accept_patterns,
*reject_patterns,
#ifdef WITH_GPGME
*sig_ext,
#endif
*follow_tags,
*ignore_tags,
*default_challenges,
*headers,
*mime_types,
*retry_on_http_error,
*save_content_on;
wget_content_encoding
compression_methods[wget_content_encoding_max + 1]; // the last one for counting
wget_hsts_db
*hsts_db; // in-memory HSTS database
#ifdef WITH_LIBHSTS
hsts_t
*hsts_preload_data; // in-memory HSTS preloaded data
#endif
wget_hpkp_db
*hpkp_db; // in-memory HPKP database
wget_tls_session_db
*tls_session_db; // in-memory TLS session database
wget_ocsp_db
*ocsp_db; // in-memory fingerprint OCSP database
wget_netrc_db
*netrc_db; // in-memory .netrc database
wget_cookie_db
*cookie_db;
stats_args
*stats_dns_args,
*stats_ocsp_args,
*stats_server_args,
*stats_site_args,
*stats_tls_args;
char
*password,
*username;
size_t
chunk_size;
long long
quota,
limit_rate, // bytes
start_pos; // bytes
int
http2_request_window,
backups,
tries,
wait,
waitretry,
restrict_file_names,
level,
preferred_family,
cut_directories,
connect_timeout, // ms
dns_timeout, // ms
read_timeout, // ms
max_redirect,
max_threads;
uint16_t
default_http_port,
default_https_port;
wget_report_speed
report_speed;
https_enforce_mode
https_enforce;
gpg_verify_mode
verify_sig;
char
cert_type, // SSL_X509_FMT_PEM or SSL_X509_FMT_DER (=ASN1)
private_key_type, // SSL_X509_FMT_PEM or SSL_X509_FMT_DER (=ASN1)
progress,
regex_type,
download_attr;
bool
tls_resume, // if TLS session resumption is enabled or not
content_on_error,
fsync_policy,
netrc,
http2,
http2_only,
ocsp_stapling,
ocsp,
mirror,
backup_converted,
convert_file_only,
convert_links,
ignore_case,
ignore_length,
hsts, // if HSTS (HTTP Strict Transport Security) is enabled or not
hsts_preload, // if loading of a HSTS Preload file is enabled of not
hpkp, // HTTP Public Key Pinning (HPKP)
random_wait,
trust_server_names,
robots,
parent,
https_only,
content_disposition,
page_requisites,
force_rss,
force_atom,
force_sitemap,
force_css,
force_html,
force_metalink,
adjust_extension,
save_headers,
clobber,
cache,
inet4_only,
inet6_only,
delete_after,
strict_comments,
protocol_directories,
host_directories,
force_directories,
directories,
timestamping,
use_server_timestamps,
continue_download,
server_response,
keep_alive,
keep_extension,
keep_session_cookies,
cookies,
spider,
dns_caching,
check_certificate,
check_hostname,
span_hosts,
verbose,
quiet,
debug,
hyperlink,
metalink,
cut_url_get_vars,
cut_file_get_vars,
proxy,
xattr,
force_progress,
local_db,
dont_write, // fuzzers and unit/fuzz tests set this to 1, so they won't write any files
filter_urls,
askpass,
verify_save_failed,
retry_connrefused,
unlink,
background,
if_modified_since,
auth_no_challenge,
no_compression,
ocsp_date,
ocsp_nonce,
recursive,
tls_false_start,
tcp_fastopen;
};
extern struct config
config;
typedef enum {
EXIT_STATUS_NO_ERROR = EXIT_SUCCESS,
EXIT_STATUS_GENERIC = 1,
EXIT_STATUS_PARSE_INIT = 2,
EXIT_STATUS_IO = 3,
EXIT_STATUS_NETWORK = 4,
EXIT_STATUS_TLS = 5,
EXIT_STATUS_AUTH = 6,
EXIT_STATUS_PROTOCOL = 7,
EXIT_STATUS_REMOTE = 8,
EXIT_STATUS_GPG_ERROR = 9
} exit_status_e;
// Needed for fuzzers that are compiled by C++
#ifdef __cplusplus
extern "C" {
#endif
int init(int argc, const char **argv) WGET_GCC_NONNULL_ALL;
int selftest_options(void);
void deinit(void);
void set_exit_status(exit_status_e status);
exit_status_e get_exit_status(void);
#ifdef __cplusplus
}
#endif
#endif /* SRC_WGET_OPTIONS_H */