Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/pkg
Path: blob/main/external/curl/src/tool_getparam.h
2065 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_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 GlobalConfig *global,
369
struct OperationConfig *operation);
370
371
#ifdef UNITTESTS
372
void parse_cert_parameter(const char *cert_parameter,
373
char **certname,
374
char **passphrase);
375
#endif
376
377
ParameterError parse_args(struct GlobalConfig *config, int argc,
378
argv_item_t argv[]);
379
380
#if defined(UNICODE) && defined(_WIN32) && !defined(UNDER_CE)
381
382
#define convert_UTF8_to_tchar(ptr) curlx_convert_UTF8_to_wchar((ptr))
383
#define convert_tchar_to_UTF8(ptr) curlx_convert_wchar_to_UTF8((ptr))
384
#define unicodefree(ptr) curlx_unicodefree(ptr)
385
386
#else
387
388
#define convert_UTF8_to_tchar(ptr) (const char *)(ptr)
389
#define convert_tchar_to_UTF8(ptr) (const char *)(ptr)
390
#define unicodefree(ptr) do {} while(0)
391
392
#endif
393
394
#endif /* HEADER_CURL_TOOL_GETPARAM_H */
395
396