quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

tool_getparam.h (8354B)


      1 #ifndef HEADER_CURL_TOOL_GETPARAM_H
      2 #define HEADER_CURL_TOOL_GETPARAM_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 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.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  * SPDX-License-Identifier: curl
     24  *
     25  ***************************************************************************/
     26 #include "tool_setup.h"
     27 
     28 /* one enum for every command line option. The name is the verbatim long
     29    option name, but in uppercase with periods and minuses replaced with
     30    underscores using a "C_" prefix. */
     31 typedef enum {
     32   C_ABSTRACT_UNIX_SOCKET,
     33   C_ALPN,
     34   C_ALT_SVC,
     35   C_ANYAUTH,
     36   C_APPEND,
     37   C_AWS_SIGV4,
     38   C_BASIC,
     39   C_BUFFER,
     40   C_CA_NATIVE,
     41   C_CACERT,
     42   C_CAPATH,
     43   C_CERT,
     44   C_CERT_STATUS,
     45   C_CERT_TYPE,
     46   C_CIPHERS,
     47   C_CLOBBER,
     48   C_COMPRESSED,
     49   C_COMPRESSED_SSH,
     50   C_CONFIG,
     51   C_CONNECT_TIMEOUT,
     52   C_CONNECT_TO,
     53   C_CONTINUE_AT,
     54   C_COOKIE,
     55   C_COOKIE_JAR,
     56   C_CREATE_DIRS,
     57   C_CREATE_FILE_MODE,
     58   C_CRLF,
     59   C_CRLFILE,
     60   C_CURVES,
     61   C_DATA,
     62   C_DATA_ASCII,
     63   C_DATA_BINARY,
     64   C_DATA_RAW,
     65   C_DATA_URLENCODE,
     66   C_DELEGATION,
     67   C_DIGEST,
     68   C_DISABLE,
     69   C_DISABLE_EPRT,
     70   C_DISABLE_EPSV,
     71   C_DISALLOW_USERNAME_IN_URL,
     72   C_DNS_INTERFACE,
     73   C_DNS_IPV4_ADDR,
     74   C_DNS_IPV6_ADDR,
     75   C_DNS_SERVERS,
     76   C_DOH_CERT_STATUS,
     77   C_DOH_INSECURE,
     78   C_DOH_URL,
     79   C_DUMP_CA_EMBED,
     80   C_DUMP_HEADER,
     81   C_ECH,
     82   C_EGD_FILE,
     83   C_ENGINE,
     84   C_EPRT,
     85   C_EPSV,
     86   C_ETAG_COMPARE,
     87   C_ETAG_SAVE,
     88   C_EXPECT100_TIMEOUT,
     89   C_FAIL,
     90   C_FAIL_EARLY,
     91   C_FAIL_WITH_BODY,
     92   C_FALSE_START,
     93   C_FORM,
     94   C_FORM_ESCAPE,
     95   C_FORM_STRING,
     96   C_FTP_ACCOUNT,
     97   C_FTP_ALTERNATIVE_TO_USER,
     98   C_FTP_CREATE_DIRS,
     99   C_FTP_METHOD,
    100   C_FTP_PASV,
    101   C_FTP_PORT,
    102   C_FTP_PRET,
    103   C_FTP_SKIP_PASV_IP,
    104   C_FTP_SSL,
    105   C_FTP_SSL_CCC,
    106   C_FTP_SSL_CCC_MODE,
    107   C_FTP_SSL_CONTROL,
    108   C_FTP_SSL_REQD,
    109   C_GET,
    110   C_GLOBOFF,
    111   C_HAPPY_EYEBALLS_TIMEOUT_MS,
    112   C_HAPROXY_CLIENTIP,
    113   C_HAPROXY_PROTOCOL,
    114   C_HEAD,
    115   C_HEADER,
    116   C_HELP,
    117   C_HOSTPUBMD5,
    118   C_HOSTPUBSHA256,
    119   C_HSTS,
    120   C_HTTP0_9,
    121   C_HTTP1_0,
    122   C_HTTP1_1,
    123   C_HTTP2,
    124   C_HTTP2_PRIOR_KNOWLEDGE,
    125   C_HTTP3,
    126   C_HTTP3_ONLY,
    127   C_IGNORE_CONTENT_LENGTH,
    128   C_INCLUDE,
    129   C_INSECURE,
    130   C_INTERFACE,
    131   C_IPFS_GATEWAY,
    132   C_IPV4,
    133   C_IPV6,
    134   C_JSON,
    135   C_JUNK_SESSION_COOKIES,
    136   C_KEEPALIVE,
    137   C_KEEPALIVE_CNT,
    138   C_KEEPALIVE_TIME,
    139   C_KEY,
    140   C_KEY_TYPE,
    141   C_KRB,
    142   C_KRB4,
    143   C_LIBCURL,
    144   C_LIMIT_RATE,
    145   C_LIST_ONLY,
    146   C_LOCAL_PORT,
    147   C_LOCATION,
    148   C_LOCATION_TRUSTED,
    149   C_LOGIN_OPTIONS,
    150   C_MAIL_AUTH,
    151   C_MAIL_FROM,
    152   C_MAIL_RCPT,
    153   C_MAIL_RCPT_ALLOWFAILS,
    154   C_MANUAL,
    155   C_MAX_FILESIZE,
    156   C_MAX_REDIRS,
    157   C_MAX_TIME,
    158   C_METALINK,
    159   C_MPTCP,
    160   C_NEGOTIATE,
    161   C_NETRC,
    162   C_NETRC_FILE,
    163   C_NETRC_OPTIONAL,
    164   C_NEXT,
    165   C_NOPROXY,
    166   C_NPN,
    167   C_NTLM,
    168   C_NTLM_WB,
    169   C_OAUTH2_BEARER,
    170   C_OUTPUT,
    171   C_OUTPUT_DIR,
    172   C_PARALLEL,
    173   C_PARALLEL_IMMEDIATE,
    174   C_PARALLEL_MAX,
    175   C_PASS,
    176   C_PATH_AS_IS,
    177   C_PINNEDPUBKEY,
    178   C_POST301,
    179   C_POST302,
    180   C_POST303,
    181   C_PREPROXY,
    182   C_PROGRESS_BAR,
    183   C_PROGRESS_METER,
    184   C_PROTO,
    185   C_PROTO_DEFAULT,
    186   C_PROTO_REDIR,
    187   C_PROXY,
    188   C_PROXY_ANYAUTH,
    189   C_PROXY_BASIC,
    190   C_PROXY_CA_NATIVE,
    191   C_PROXY_CACERT,
    192   C_PROXY_CAPATH,
    193   C_PROXY_CERT,
    194   C_PROXY_CERT_TYPE,
    195   C_PROXY_CIPHERS,
    196   C_PROXY_CRLFILE,
    197   C_PROXY_DIGEST,
    198   C_PROXY_HEADER,
    199   C_PROXY_HTTP2,
    200   C_PROXY_INSECURE,
    201   C_PROXY_KEY,
    202   C_PROXY_KEY_TYPE,
    203   C_PROXY_NEGOTIATE,
    204   C_PROXY_NTLM,
    205   C_PROXY_PASS,
    206   C_PROXY_PINNEDPUBKEY,
    207   C_PROXY_SERVICE_NAME,
    208   C_PROXY_SSL_ALLOW_BEAST,
    209   C_PROXY_SSL_AUTO_CLIENT_CERT,
    210   C_PROXY_TLS13_CIPHERS,
    211   C_PROXY_TLSAUTHTYPE,
    212   C_PROXY_TLSPASSWORD,
    213   C_PROXY_TLSUSER,
    214   C_PROXY_TLSV1,
    215   C_PROXY_USER,
    216   C_PROXY1_0,
    217   C_PROXYTUNNEL,
    218   C_PUBKEY,
    219   C_QUOTE,
    220   C_RANDOM_FILE,
    221   C_RANGE,
    222   C_RATE,
    223   C_RAW,
    224   C_REFERER,
    225   C_REMOTE_HEADER_NAME,
    226   C_REMOTE_NAME,
    227   C_REMOTE_NAME_ALL,
    228   C_REMOTE_TIME,
    229   C_REMOVE_ON_ERROR,
    230   C_REQUEST,
    231   C_REQUEST_TARGET,
    232   C_RESOLVE,
    233   C_RETRY,
    234   C_RETRY_ALL_ERRORS,
    235   C_RETRY_CONNREFUSED,
    236   C_RETRY_DELAY,
    237   C_RETRY_MAX_TIME,
    238   C_SASL_AUTHZID,
    239   C_SASL_IR,
    240   C_SERVICE_NAME,
    241   C_SESSIONID,
    242   C_SHOW_ERROR,
    243   C_SHOW_HEADERS,
    244   C_SILENT,
    245   C_SIGNATURE_ALGORITHMS,
    246   C_SKIP_EXISTING,
    247   C_SOCKS4,
    248   C_SOCKS4A,
    249   C_SOCKS5,
    250   C_SOCKS5_BASIC,
    251   C_SOCKS5_GSSAPI,
    252   C_SOCKS5_GSSAPI_NEC,
    253   C_SOCKS5_GSSAPI_SERVICE,
    254   C_SOCKS5_HOSTNAME,
    255   C_SPEED_LIMIT,
    256   C_SPEED_TIME,
    257   C_SSL,
    258   C_SSL_ALLOW_BEAST,
    259   C_SSL_AUTO_CLIENT_CERT,
    260   C_SSL_NO_REVOKE,
    261   C_SSL_REQD,
    262   C_SSL_REVOKE_BEST_EFFORT,
    263   C_SSL_SESSIONS,
    264   C_SSLV2,
    265   C_SSLV3,
    266   C_STDERR,
    267   C_STYLED_OUTPUT,
    268   C_SUPPRESS_CONNECT_HEADERS,
    269   C_TCP_FASTOPEN,
    270   C_TCP_NODELAY,
    271   C_TELNET_OPTION,
    272   C_TEST_DUPHANDLE,
    273   C_TEST_EVENT,
    274   C_TFTP_BLKSIZE,
    275   C_TFTP_NO_OPTIONS,
    276   C_TIME_COND,
    277   C_TLS_EARLYDATA,
    278   C_TLS_MAX,
    279   C_TLS13_CIPHERS,
    280   C_TLSAUTHTYPE,
    281   C_TLSPASSWORD,
    282   C_TLSUSER,
    283   C_TLSV1,
    284   C_TLSV1_0,
    285   C_TLSV1_1,
    286   C_TLSV1_2,
    287   C_TLSV1_3,
    288   C_TR_ENCODING,
    289   C_TRACE,
    290   C_TRACE_ASCII,
    291   C_TRACE_CONFIG,
    292   C_TRACE_IDS,
    293   C_TRACE_TIME,
    294   C_IP_TOS,
    295   C_UNIX_SOCKET,
    296   C_UPLOAD_FILE,
    297   C_UPLOAD_FLAGS,
    298   C_URL,
    299   C_URL_QUERY,
    300   C_USE_ASCII,
    301   C_USER,
    302   C_USER_AGENT,
    303   C_VARIABLE,
    304   C_VERBOSE,
    305   C_VERSION,
    306   C_VLAN_PRIORITY,
    307   C_WDEBUG,
    308   C_WRITE_OUT,
    309   C_XATTR
    310 } cmdline_t;
    311 
    312 #define ARG_NONE 0 /* stand-alone but not a boolean */
    313 #define ARG_BOOL 1 /* accepts a --no-[name] prefix */
    314 #define ARG_STRG 2 /* requires an argument */
    315 #define ARG_FILE 3 /* requires an argument, usually a filename */
    316 
    317 #define ARG_TYPEMASK 0x03
    318 #define ARGTYPE(x) ((x) & ARG_TYPEMASK)
    319 
    320 #define ARG_DEPR 0x10 /* deprecated option */
    321 #define ARG_CLEAR 0x20 /* clear cmdline argument */
    322 #define ARG_TLS 0x40 /* requires TLS support */
    323 #define ARG_NO 0x80 /* set if the option is documented as --no-* */
    324 
    325 struct LongShort {
    326   const char *lname;  /* long name option */
    327   unsigned char desc; /* type, see ARG_* */
    328   char letter;  /* short name option or ' ' */
    329   unsigned short cmd;
    330 };
    331 
    332 typedef enum {
    333   PARAM_OK = 0,
    334   PARAM_OPTION_AMBIGUOUS,
    335   PARAM_OPTION_UNKNOWN,
    336   PARAM_REQUIRES_PARAMETER,
    337   PARAM_BAD_USE,
    338   PARAM_HELP_REQUESTED,
    339   PARAM_MANUAL_REQUESTED,
    340   PARAM_VERSION_INFO_REQUESTED,
    341   PARAM_ENGINES_REQUESTED,
    342   PARAM_CA_EMBED_REQUESTED,
    343   PARAM_GOT_EXTRA_PARAMETER,
    344   PARAM_BAD_NUMERIC,
    345   PARAM_NEGATIVE_NUMERIC,
    346   PARAM_LIBCURL_DOESNT_SUPPORT,
    347   PARAM_LIBCURL_UNSUPPORTED_PROTOCOL,
    348   PARAM_NO_MEM,
    349   PARAM_NEXT_OPERATION,
    350   PARAM_NO_PREFIX,
    351   PARAM_NUMBER_TOO_LARGE,
    352   PARAM_CONTDISP_RESUME_FROM, /* --continue-at and --remote-header-name */
    353   PARAM_READ_ERROR,
    354   PARAM_EXPAND_ERROR, /* --expand problem */
    355   PARAM_BLANK_STRING,
    356   PARAM_VAR_SYNTAX, /* --variable syntax error */
    357   PARAM_LAST
    358 } ParameterError;
    359 
    360 struct GlobalConfig;
    361 struct OperationConfig;
    362 
    363 const struct LongShort *findlongopt(const char *opt);
    364 const struct LongShort *findshortopt(char letter);
    365 
    366 ParameterError getparameter(const char *flag, const char *nextarg,
    367                             bool *usedarg,
    368                             struct OperationConfig *config);
    369 
    370 #ifdef UNITTESTS
    371 void parse_cert_parameter(const char *cert_parameter,
    372                           char **certname,
    373                           char **passphrase);
    374 #endif
    375 
    376 ParameterError parse_args(struct GlobalConfig *global, int argc,
    377                           argv_item_t argv[]);
    378 
    379 #if defined(UNICODE) && defined(_WIN32) && !defined(UNDER_CE)
    380 
    381 #define convert_UTF8_to_tchar(ptr) curlx_convert_UTF8_to_wchar((ptr))
    382 #define convert_tchar_to_UTF8(ptr) curlx_convert_wchar_to_UTF8((ptr))
    383 #define unicodefree(ptr) curlx_unicodefree(ptr)
    384 
    385 #else
    386 
    387 #define convert_UTF8_to_tchar(ptr) (const char *)(ptr)
    388 #define convert_tchar_to_UTF8(ptr) (const char *)(ptr)
    389 #define unicodefree(ptr) do {} while(0)
    390 
    391 #endif
    392 
    393 #endif /* HEADER_CURL_TOOL_GETPARAM_H */