Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/src/tool_getparam.h
2649 views
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, <[email protected]>, 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_FOLLOW,
94
C_FORM,
95
C_FORM_ESCAPE,
96
C_FORM_STRING,
97
C_FTP_ACCOUNT,
98
C_FTP_ALTERNATIVE_TO_USER,
99
C_FTP_CREATE_DIRS,
100
C_FTP_METHOD,
101
C_FTP_PASV,
102
C_FTP_PORT,
103
C_FTP_PRET,
104
C_FTP_SKIP_PASV_IP,
105
C_FTP_SSL,
106
C_FTP_SSL_CCC,
107
C_FTP_SSL_CCC_MODE,
108
C_FTP_SSL_CONTROL,
109
C_FTP_SSL_REQD,
110
C_GET,
111
C_GLOBOFF,
112
C_HAPPY_EYEBALLS_TIMEOUT_MS,
113
C_HAPROXY_CLIENTIP,
114
C_HAPROXY_PROTOCOL,
115
C_HEAD,
116
C_HEADER,
117
C_HELP,
118
C_HOSTPUBMD5,
119
C_HOSTPUBSHA256,
120
C_HSTS,
121
C_HTTP0_9,
122
C_HTTP1_0,
123
C_HTTP1_1,
124
C_HTTP2,
125
C_HTTP2_PRIOR_KNOWLEDGE,
126
C_HTTP3,
127
C_HTTP3_ONLY,
128
C_IGNORE_CONTENT_LENGTH,
129
C_INCLUDE,
130
C_INSECURE,
131
C_INTERFACE,
132
C_IPFS_GATEWAY,
133
C_IPV4,
134
C_IPV6,
135
C_JSON,
136
C_JUNK_SESSION_COOKIES,
137
C_KEEPALIVE,
138
C_KEEPALIVE_CNT,
139
C_KEEPALIVE_TIME,
140
C_KEY,
141
C_KEY_TYPE,
142
C_KNOWNHOSTS,
143
C_KRB,
144
C_KRB4,
145
C_LIBCURL,
146
C_LIMIT_RATE,
147
C_LIST_ONLY,
148
C_LOCAL_PORT,
149
C_LOCATION,
150
C_LOCATION_TRUSTED,
151
C_LOGIN_OPTIONS,
152
C_MAIL_AUTH,
153
C_MAIL_FROM,
154
C_MAIL_RCPT,
155
C_MAIL_RCPT_ALLOWFAILS,
156
C_MANUAL,
157
C_MAX_FILESIZE,
158
C_MAX_REDIRS,
159
C_MAX_TIME,
160
C_METALINK,
161
C_MPTCP,
162
C_NEGOTIATE,
163
C_NETRC,
164
C_NETRC_FILE,
165
C_NETRC_OPTIONAL,
166
C_NEXT,
167
C_NOPROXY,
168
C_NPN,
169
C_NTLM,
170
C_NTLM_WB,
171
C_OAUTH2_BEARER,
172
C_OUT_NULL,
173
C_OUTPUT,
174
C_OUTPUT_DIR,
175
C_PARALLEL,
176
C_PARALLEL_HOST,
177
C_PARALLEL_IMMEDIATE,
178
C_PARALLEL_MAX,
179
C_PASS,
180
C_PATH_AS_IS,
181
C_PINNEDPUBKEY,
182
C_POST301,
183
C_POST302,
184
C_POST303,
185
C_PREPROXY,
186
C_PROGRESS_BAR,
187
C_PROGRESS_METER,
188
C_PROTO,
189
C_PROTO_DEFAULT,
190
C_PROTO_REDIR,
191
C_PROXY,
192
C_PROXY_ANYAUTH,
193
C_PROXY_BASIC,
194
C_PROXY_CA_NATIVE,
195
C_PROXY_CACERT,
196
C_PROXY_CAPATH,
197
C_PROXY_CERT,
198
C_PROXY_CERT_TYPE,
199
C_PROXY_CIPHERS,
200
C_PROXY_CRLFILE,
201
C_PROXY_DIGEST,
202
C_PROXY_HEADER,
203
C_PROXY_HTTP2,
204
C_PROXY_INSECURE,
205
C_PROXY_KEY,
206
C_PROXY_KEY_TYPE,
207
C_PROXY_NEGOTIATE,
208
C_PROXY_NTLM,
209
C_PROXY_PASS,
210
C_PROXY_PINNEDPUBKEY,
211
C_PROXY_SERVICE_NAME,
212
C_PROXY_SSL_ALLOW_BEAST,
213
C_PROXY_SSL_AUTO_CLIENT_CERT,
214
C_PROXY_TLS13_CIPHERS,
215
C_PROXY_TLSAUTHTYPE,
216
C_PROXY_TLSPASSWORD,
217
C_PROXY_TLSUSER,
218
C_PROXY_TLSV1,
219
C_PROXY_USER,
220
C_PROXY1_0,
221
C_PROXYTUNNEL,
222
C_PUBKEY,
223
C_QUOTE,
224
C_RANDOM_FILE,
225
C_RANGE,
226
C_RATE,
227
C_RAW,
228
C_REFERER,
229
C_REMOTE_HEADER_NAME,
230
C_REMOTE_NAME,
231
C_REMOTE_NAME_ALL,
232
C_REMOTE_TIME,
233
C_REMOVE_ON_ERROR,
234
C_REQUEST,
235
C_REQUEST_TARGET,
236
C_RESOLVE,
237
C_RETRY,
238
C_RETRY_ALL_ERRORS,
239
C_RETRY_CONNREFUSED,
240
C_RETRY_DELAY,
241
C_RETRY_MAX_TIME,
242
C_SASL_AUTHZID,
243
C_SASL_IR,
244
C_SERVICE_NAME,
245
C_SESSIONID,
246
C_SHOW_ERROR,
247
C_SHOW_HEADERS,
248
C_SILENT,
249
C_SIGNATURE_ALGORITHMS,
250
C_SKIP_EXISTING,
251
C_SOCKS4,
252
C_SOCKS4A,
253
C_SOCKS5,
254
C_SOCKS5_BASIC,
255
C_SOCKS5_GSSAPI,
256
C_SOCKS5_GSSAPI_NEC,
257
C_SOCKS5_GSSAPI_SERVICE,
258
C_SOCKS5_HOSTNAME,
259
C_SPEED_LIMIT,
260
C_SPEED_TIME,
261
C_SSL,
262
C_SSL_ALLOW_BEAST,
263
C_SSL_AUTO_CLIENT_CERT,
264
C_SSL_NO_REVOKE,
265
C_SSL_REQD,
266
C_SSL_REVOKE_BEST_EFFORT,
267
C_SSL_SESSIONS,
268
C_SSLV2,
269
C_SSLV3,
270
C_STDERR,
271
C_STYLED_OUTPUT,
272
C_SUPPRESS_CONNECT_HEADERS,
273
C_TCP_FASTOPEN,
274
C_TCP_NODELAY,
275
C_TELNET_OPTION,
276
C_TEST_DUPHANDLE,
277
C_TEST_EVENT,
278
C_TFTP_BLKSIZE,
279
C_TFTP_NO_OPTIONS,
280
C_TIME_COND,
281
C_TLS_EARLYDATA,
282
C_TLS_MAX,
283
C_TLS13_CIPHERS,
284
C_TLSAUTHTYPE,
285
C_TLSPASSWORD,
286
C_TLSUSER,
287
C_TLSV1,
288
C_TLSV1_0,
289
C_TLSV1_1,
290
C_TLSV1_2,
291
C_TLSV1_3,
292
C_TR_ENCODING,
293
C_TRACE,
294
C_TRACE_ASCII,
295
C_TRACE_CONFIG,
296
C_TRACE_IDS,
297
C_TRACE_TIME,
298
C_IP_TOS,
299
C_UNIX_SOCKET,
300
C_UPLOAD_FILE,
301
C_UPLOAD_FLAGS,
302
C_URL,
303
C_URL_QUERY,
304
C_USE_ASCII,
305
C_USER,
306
C_USER_AGENT,
307
C_VARIABLE,
308
C_VERBOSE,
309
C_VERSION,
310
C_VLAN_PRIORITY,
311
C_WDEBUG,
312
C_WRITE_OUT,
313
C_XATTR
314
} cmdline_t;
315
316
#define ARG_NONE 0 /* stand-alone but not a boolean */
317
#define ARG_BOOL 1 /* accepts a --no-[name] prefix */
318
#define ARG_STRG 2 /* requires an argument */
319
#define ARG_FILE 3 /* requires an argument, usually a filename */
320
321
#define ARG_TYPEMASK 0x03
322
#define ARGTYPE(x) ((x) & ARG_TYPEMASK)
323
324
#define ARG_DEPR 0x10 /* deprecated option */
325
#define ARG_CLEAR 0x20 /* clear cmdline argument */
326
#define ARG_TLS 0x40 /* requires TLS support */
327
#define ARG_NO 0x80 /* set if the option is documented as --no-* */
328
329
struct LongShort {
330
const char *lname; /* long name option */
331
unsigned char desc; /* type, see ARG_* */
332
char letter; /* short name option or ' ' */
333
unsigned short cmd;
334
};
335
336
typedef enum {
337
PARAM_OK = 0,
338
PARAM_OPTION_UNKNOWN,
339
PARAM_REQUIRES_PARAMETER,
340
PARAM_BAD_USE,
341
PARAM_HELP_REQUESTED,
342
PARAM_MANUAL_REQUESTED,
343
PARAM_VERSION_INFO_REQUESTED,
344
PARAM_ENGINES_REQUESTED,
345
PARAM_CA_EMBED_REQUESTED,
346
PARAM_GOT_EXTRA_PARAMETER,
347
PARAM_BAD_NUMERIC,
348
PARAM_NEGATIVE_NUMERIC,
349
PARAM_LIBCURL_DOESNT_SUPPORT,
350
PARAM_LIBCURL_UNSUPPORTED_PROTOCOL,
351
PARAM_NO_MEM,
352
PARAM_NEXT_OPERATION,
353
PARAM_NO_PREFIX,
354
PARAM_NUMBER_TOO_LARGE,
355
PARAM_CONTDISP_RESUME_FROM, /* --continue-at and --remote-header-name */
356
PARAM_READ_ERROR,
357
PARAM_EXPAND_ERROR, /* --expand problem */
358
PARAM_BLANK_STRING,
359
PARAM_VAR_SYNTAX, /* --variable syntax error */
360
PARAM_RECURSION,
361
PARAM_LAST
362
} ParameterError;
363
364
struct OperationConfig;
365
366
const struct LongShort *findlongopt(const char *opt);
367
const struct LongShort *findshortopt(char letter);
368
369
ParameterError getparameter(const char *flag, const char *nextarg,
370
bool *usedarg,
371
struct OperationConfig *config,
372
int max_recursive);
373
374
#ifdef UNITTESTS
375
void parse_cert_parameter(const char *cert_parameter,
376
char **certname,
377
char **passphrase);
378
#endif
379
380
ParameterError parse_args(int argc, argv_item_t argv[]);
381
382
#if defined(UNICODE) && defined(_WIN32) && !defined(UNDER_CE)
383
384
#define convert_UTF8_to_tchar(ptr) curlx_convert_UTF8_to_wchar((ptr))
385
#define convert_tchar_to_UTF8(ptr) curlx_convert_wchar_to_UTF8((ptr))
386
#define unicodefree(ptr) curlx_unicodefree(ptr)
387
388
#else
389
390
#define convert_UTF8_to_tchar(ptr) (const char *)(ptr)
391
#define convert_tchar_to_UTF8(ptr) (const char *)(ptr)
392
#define unicodefree(ptr) do {} while(0)
393
394
#endif
395
396
#endif /* HEADER_CURL_TOOL_GETPARAM_H */
397
398