| #ifndef HEADER_CURL_TOOL_GETPARAM_H | |
| #define HEADER_CURL_TOOL_GETPARAM_H | |
| /*************************************************************************** | |
| * _ _ ____ _ | |
| * Project ___| | | | _ \| | | |
| * / __| | | | |_) | | | |
| * | (__| |_| | _ <| |___ | |
| * \___|\___/|_| \_\_____| | |
| * | |
| * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, 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" | |
| /* one enum for every command line option. The name is the verbatim long | |
| option name, but in uppercase with periods and minuses replaced with | |
| underscores using a "C_" prefix. */ | |
| typedef enum { | |
| C_ABSTRACT_UNIX_SOCKET, | |
| C_ALPN, | |
| C_ALT_SVC, | |
| C_ANYAUTH, | |
| C_APPEND, | |
| C_AWS_SIGV4, | |
| C_BASIC, | |
| C_BUFFER, | |
| C_CA_NATIVE, | |
| C_CACERT, | |
| C_CAPATH, | |
| C_CERT, | |
| C_CERT_STATUS, | |
| C_CERT_TYPE, | |
| C_CIPHERS, | |
| C_CLOBBER, | |
| C_COMPRESSED, | |
| C_COMPRESSED_SSH, | |
| C_CONFIG, | |
| C_CONNECT_TIMEOUT, | |
| C_CONNECT_TO, | |
| C_CONTINUE_AT, | |
| C_COOKIE, | |
| C_COOKIE_JAR, | |
| C_CREATE_DIRS, | |
| C_CREATE_FILE_MODE, | |
| C_CRLF, | |
| C_CRLFILE, | |
| C_CURVES, | |
| C_DATA, | |
| C_DATA_ASCII, | |
| C_DATA_BINARY, | |
| C_DATA_RAW, | |
| C_DATA_URLENCODE, | |
| C_DELEGATION, | |
| C_DIGEST, | |
| C_DISABLE, | |
| C_DISABLE_EPRT, | |
| C_DISABLE_EPSV, | |
| C_DISALLOW_USERNAME_IN_URL, | |
| C_DNS_INTERFACE, | |
| C_DNS_IPV4_ADDR, | |
| C_DNS_IPV6_ADDR, | |
| C_DNS_SERVERS, | |
| C_DOH_CERT_STATUS, | |
| C_DOH_INSECURE, | |
| C_DOH_URL, | |
| C_DUMP_CA_EMBED, | |
| C_DUMP_HEADER, | |
| C_ECH, | |
| C_EGD_FILE, | |
| C_ENGINE, | |
| C_EPRT, | |
| C_EPSV, | |
| C_ETAG_COMPARE, | |
| C_ETAG_SAVE, | |
| C_EXPECT100_TIMEOUT, | |
| C_FAIL, | |
| C_FAIL_EARLY, | |
| C_FAIL_WITH_BODY, | |
| C_FALSE_START, | |
| C_FORM, | |
| C_FORM_ESCAPE, | |
| C_FORM_STRING, | |
| C_FTP_ACCOUNT, | |
| C_FTP_ALTERNATIVE_TO_USER, | |
| C_FTP_CREATE_DIRS, | |
| C_FTP_METHOD, | |
| C_FTP_PASV, | |
| C_FTP_PORT, | |
| C_FTP_PRET, | |
| C_FTP_SKIP_PASV_IP, | |
| C_FTP_SSL, | |
| C_FTP_SSL_CCC, | |
| C_FTP_SSL_CCC_MODE, | |
| C_FTP_SSL_CONTROL, | |
| C_FTP_SSL_REQD, | |
| C_GET, | |
| C_GLOBOFF, | |
| C_HAPPY_EYEBALLS_TIMEOUT_MS, | |
| C_HAPROXY_CLIENTIP, | |
| C_HAPROXY_PROTOCOL, | |
| C_HEAD, | |
| C_HEADER, | |
| C_HELP, | |
| C_HOSTPUBMD5, | |
| C_HOSTPUBSHA256, | |
| C_HSTS, | |
| C_HTTP0_9, | |
| C_HTTP1_0, | |
| C_HTTP1_1, | |
| C_HTTP2, | |
| C_HTTP2_PRIOR_KNOWLEDGE, | |
| C_HTTP3, | |
| C_HTTP3_ONLY, | |
| C_IGNORE_CONTENT_LENGTH, | |
| C_INCLUDE, | |
| C_INSECURE, | |
| C_INTERFACE, | |
| C_IPFS_GATEWAY, | |
| C_IPV4, | |
| C_IPV6, | |
| C_JSON, | |
| C_JUNK_SESSION_COOKIES, | |
| C_KEEPALIVE, | |
| C_KEEPALIVE_CNT, | |
| C_KEEPALIVE_TIME, | |
| C_KEY, | |
| C_KEY_TYPE, | |
| C_KRB, | |
| C_KRB4, | |
| C_LIBCURL, | |
| C_LIMIT_RATE, | |
| C_LIST_ONLY, | |
| C_LOCAL_PORT, | |
| C_LOCATION, | |
| C_LOCATION_TRUSTED, | |
| C_LOGIN_OPTIONS, | |
| C_MAIL_AUTH, | |
| C_MAIL_FROM, | |
| C_MAIL_RCPT, | |
| C_MAIL_RCPT_ALLOWFAILS, | |
| C_MANUAL, | |
| C_MAX_FILESIZE, | |
| C_MAX_REDIRS, | |
| C_MAX_TIME, | |
| C_METALINK, | |
| C_MPTCP, | |
| C_NEGOTIATE, | |
| C_NETRC, | |
| C_NETRC_FILE, | |
| C_NETRC_OPTIONAL, | |
| C_NEXT, | |
| C_NOPROXY, | |
| C_NPN, | |
| C_NTLM, | |
| C_NTLM_WB, | |
| C_OAUTH2_BEARER, | |
| C_OUTPUT, | |
| C_OUTPUT_DIR, | |
| C_PARALLEL, | |
| C_PARALLEL_IMMEDIATE, | |
| C_PARALLEL_MAX, | |
| C_PASS, | |
| C_PATH_AS_IS, | |
| C_PINNEDPUBKEY, | |
| C_POST301, | |
| C_POST302, | |
| C_POST303, | |
| C_PREPROXY, | |
| C_PROGRESS_BAR, | |
| C_PROGRESS_METER, | |
| C_PROTO, | |
| C_PROTO_DEFAULT, | |
| C_PROTO_REDIR, | |
| C_PROXY, | |
| C_PROXY_ANYAUTH, | |
| C_PROXY_BASIC, | |
| C_PROXY_CA_NATIVE, | |
| C_PROXY_CACERT, | |
| C_PROXY_CAPATH, | |
| C_PROXY_CERT, | |
| C_PROXY_CERT_TYPE, | |
| C_PROXY_CIPHERS, | |
| C_PROXY_CRLFILE, | |
| C_PROXY_DIGEST, | |
| C_PROXY_HEADER, | |
| C_PROXY_HTTP2, | |
| C_PROXY_INSECURE, | |
| C_PROXY_KEY, | |
| C_PROXY_KEY_TYPE, | |
| C_PROXY_NEGOTIATE, | |
| C_PROXY_NTLM, | |
| C_PROXY_PASS, | |
| C_PROXY_PINNEDPUBKEY, | |
| C_PROXY_SERVICE_NAME, | |
| C_PROXY_SSL_ALLOW_BEAST, | |
| C_PROXY_SSL_AUTO_CLIENT_CERT, | |
| C_PROXY_TLS13_CIPHERS, | |
| C_PROXY_TLSAUTHTYPE, | |
| C_PROXY_TLSPASSWORD, | |
| C_PROXY_TLSUSER, | |
| C_PROXY_TLSV1, | |
| C_PROXY_USER, | |
| C_PROXY1_0, | |
| C_PROXYTUNNEL, | |
| C_PUBKEY, | |
| C_QUOTE, | |
| C_RANDOM_FILE, | |
| C_RANGE, | |
| C_RATE, | |
| C_RAW, | |
| C_REFERER, | |
| C_REMOTE_HEADER_NAME, | |
| C_REMOTE_NAME, | |
| C_REMOTE_NAME_ALL, | |
| C_REMOTE_TIME, | |
| C_REMOVE_ON_ERROR, | |
| C_REQUEST, | |
| C_REQUEST_TARGET, | |
| C_RESOLVE, | |
| C_RETRY, | |
| C_RETRY_ALL_ERRORS, | |
| C_RETRY_CONNREFUSED, | |
| C_RETRY_DELAY, | |
| C_RETRY_MAX_TIME, | |
| C_SASL_AUTHZID, | |
| C_SASL_IR, | |
| C_SERVICE_NAME, | |
| C_SESSIONID, | |
| C_SHOW_ERROR, | |
| C_SHOW_HEADERS, | |
| C_SILENT, | |
| C_SKIP_EXISTING, | |
| C_SOCKS4, | |
| C_SOCKS4A, | |
| C_SOCKS5, | |
| C_SOCKS5_BASIC, | |
| C_SOCKS5_GSSAPI, | |
| C_SOCKS5_GSSAPI_NEC, | |
| C_SOCKS5_GSSAPI_SERVICE, | |
| C_SOCKS5_HOSTNAME, | |
| C_SPEED_LIMIT, | |
| C_SPEED_TIME, | |
| C_SSL, | |
| C_SSL_ALLOW_BEAST, | |
| C_SSL_AUTO_CLIENT_CERT, | |
| C_SSL_NO_REVOKE, | |
| C_SSL_REQD, | |
| C_SSL_REVOKE_BEST_EFFORT, | |
| C_SSLV2, | |
| C_SSLV3, | |
| C_STDERR, | |
| C_STYLED_OUTPUT, | |
| C_SUPPRESS_CONNECT_HEADERS, | |
| C_TCP_FASTOPEN, | |
| C_TCP_NODELAY, | |
| C_TELNET_OPTION, | |
| C_TEST_EVENT, | |
| C_TFTP_BLKSIZE, | |
| C_TFTP_NO_OPTIONS, | |
| C_TIME_COND, | |
| C_TLS_MAX, | |
| C_TLS13_CIPHERS, | |
| C_TLSAUTHTYPE, | |
| C_TLSPASSWORD, | |
| C_TLSUSER, | |
| C_TLSV1, | |
| C_TLSV1_0, | |
| C_TLSV1_1, | |
| C_TLSV1_2, | |
| C_TLSV1_3, | |
| C_TR_ENCODING, | |
| C_TRACE, | |
| C_TRACE_ASCII, | |
| C_TRACE_CONFIG, | |
| C_TRACE_IDS, | |
| C_TRACE_TIME, | |
| C_IP_TOS, | |
| C_UNIX_SOCKET, | |
| C_UPLOAD_FILE, | |
| C_URL, | |
| C_URL_QUERY, | |
| C_USE_ASCII, | |
| C_USER, | |
| C_USER_AGENT, | |
| C_VARIABLE, | |
| C_VERBOSE, | |
| C_VERSION, | |
| C_VLAN_PRIORITY, | |
| C_WDEBUG, | |
| C_WRITE_OUT, | |
| C_XATTR | |
| } cmdline_t; | |
| #define ARG_NONE 0 /* stand-alone but not a boolean */ | |
| #define ARG_BOOL 1 /* accepts a --no-[name] prefix */ | |
| #define ARG_STRG 2 /* requires an argument */ | |
| #define ARG_FILE 3 /* requires an argument, usually a filename */ | |
| #define ARG_TYPEMASK 0x03 | |
| #define ARGTYPE(x) ((x) & ARG_TYPEMASK) | |
| #define ARG_NO 0x80 /* set if the option is documented as --no-* */ | |
| struct LongShort { | |
| const char *lname; /* long name option */ | |
| unsigned char desc; /* type, see ARG_* */ | |
| char letter; /* short name option or ' ' */ | |
| unsigned short cmd; | |
| }; | |
| typedef enum { | |
| PARAM_OK = 0, | |
| PARAM_OPTION_AMBIGUOUS, | |
| PARAM_OPTION_UNKNOWN, | |
| PARAM_REQUIRES_PARAMETER, | |
| PARAM_BAD_USE, | |
| PARAM_HELP_REQUESTED, | |
| PARAM_MANUAL_REQUESTED, | |
| PARAM_VERSION_INFO_REQUESTED, | |
| PARAM_ENGINES_REQUESTED, | |
| PARAM_CA_EMBED_REQUESTED, | |
| PARAM_GOT_EXTRA_PARAMETER, | |
| PARAM_BAD_NUMERIC, | |
| PARAM_NEGATIVE_NUMERIC, | |
| PARAM_LIBCURL_DOESNT_SUPPORT, | |
| PARAM_LIBCURL_UNSUPPORTED_PROTOCOL, | |
| PARAM_NO_MEM, | |
| PARAM_NEXT_OPERATION, | |
| PARAM_NO_PREFIX, | |
| PARAM_NUMBER_TOO_LARGE, | |
| PARAM_NO_NOT_BOOLEAN, | |
| PARAM_CONTDISP_SHOW_HEADER, /* --include and --remote-header-name */ | |
| PARAM_CONTDISP_RESUME_FROM, /* --continue-at and --remote-header-name */ | |
| PARAM_READ_ERROR, | |
| PARAM_EXPAND_ERROR, /* --expand problem */ | |
| PARAM_BLANK_STRING, | |
| PARAM_LAST | |
| } ParameterError; | |
| struct GlobalConfig; | |
| struct OperationConfig; | |
| const struct LongShort *findlongopt(const char *opt); | |
| const struct LongShort *findshortopt(char letter); | |
| ParameterError getparameter(const char *flag, char *nextarg, | |
| argv_item_t cleararg, | |
| bool *usedarg, | |
| struct GlobalConfig *global, | |
| struct OperationConfig *operation); | |
| #ifdef UNITTESTS | |
| void parse_cert_parameter(const char *cert_parameter, | |
| char **certname, | |
| char **passphrase); | |
| #endif | |
| ParameterError parse_args(struct GlobalConfig *config, int argc, | |
| argv_item_t argv[]); | |
| #endif /* HEADER_CURL_TOOL_GETPARAM_H */ |