| #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_EARLYDATA, |
| 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_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 */ |