1 #ifndef CURLINC_CURL_H 2 #define CURLINC_CURL_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 27 /* 28 * If you have libcurl problems, all docs and details are found here: 29 * https://curl.se/libcurl/ 30 */ 31 32 #ifdef CURL_NO_OLDIES 33 #define CURL_STRICTER 34 #endif 35 36 /* Compile-time deprecation macros. */ 37 #if (defined(__GNUC__) && \ 38 ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1))) || \ 39 (defined(__clang__) && __clang_major__ >= 3) || \ 40 defined(__IAR_SYSTEMS_ICC__)) && \ 41 !defined(__INTEL_COMPILER) && \ 42 !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) 43 #define CURL_DEPRECATED(version, message) \ 44 __attribute__((deprecated("since " # version ". " message))) 45 #if defined(__IAR_SYSTEMS_ICC__) 46 #define CURL_IGNORE_DEPRECATION(statements) \ 47 _Pragma("diag_suppress=Pe1444") \ 48 statements \ 49 _Pragma("diag_default=Pe1444") 50 #else 51 #define CURL_IGNORE_DEPRECATION(statements) \ 52 _Pragma("GCC diagnostic push") \ 53 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ 54 statements \ 55 _Pragma("GCC diagnostic pop") 56 #endif 57 #else 58 #define CURL_DEPRECATED(version, message) 59 #define CURL_IGNORE_DEPRECATION(statements) statements 60 #endif 61 62 #include "curlver.h" /* libcurl version defines */ 63 #include "system.h" /* determine things runtime */ 64 65 #include <stdio.h> 66 #include <limits.h> 67 68 #if defined(__FreeBSD__) || defined(__MidnightBSD__) 69 /* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ 70 #include <sys/param.h> 71 #endif 72 73 /* The include stuff here below is mainly for time_t! */ 74 #include <sys/types.h> 75 #include <time.h> 76 77 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) 78 #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ 79 defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) 80 /* The check above prevents the winsock2.h inclusion if winsock.h already was 81 included, since they cannot co-exist without problems */ 82 #include <winsock2.h> 83 #include <ws2tcpip.h> 84 #endif 85 #endif 86 87 /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish 88 libc5-based Linux systems. Only include it on systems that are known to 89 require it! */ 90 #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ 91 defined(__minix) || defined(__INTEGRITY) || \ 92 defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ 93 defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ 94 (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ 95 (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ 96 defined(__sun__) || defined(__serenity__) || defined(__vxworks__) 97 #include <sys/select.h> 98 #endif 99 100 #if !defined(_WIN32) && !defined(_WIN32_WCE) 101 #include <sys/socket.h> 102 #endif 103 104 #if !defined(_WIN32) 105 #include <sys/time.h> 106 #endif 107 108 /* Compatibility for non-Clang compilers */ 109 #ifndef __has_declspec_attribute 110 # define __has_declspec_attribute(x) 0 111 #endif 112 113 #ifdef __cplusplus 114 extern "C" { 115 #endif 116 117 #if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) 118 typedef struct Curl_easy CURL; 119 typedef struct Curl_share CURLSH; 120 #else 121 typedef void CURL; 122 typedef void CURLSH; 123 #endif 124 125 /* 126 * libcurl external API function linkage decorations. 127 */ 128 129 #ifdef CURL_STATICLIB 130 # define CURL_EXTERN 131 #elif defined(_WIN32) || \ 132 (__has_declspec_attribute(dllexport) && \ 133 __has_declspec_attribute(dllimport)) 134 # if defined(BUILDING_LIBCURL) 135 # define CURL_EXTERN __declspec(dllexport) 136 # else 137 # define CURL_EXTERN __declspec(dllimport) 138 # endif 139 #elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) 140 # define CURL_EXTERN CURL_EXTERN_SYMBOL 141 #else 142 # define CURL_EXTERN 143 #endif 144 145 #ifndef curl_socket_typedef 146 /* socket typedef */ 147 #if defined(_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) 148 typedef SOCKET curl_socket_t; 149 #define CURL_SOCKET_BAD INVALID_SOCKET 150 #else 151 typedef int curl_socket_t; 152 #define CURL_SOCKET_BAD -1 153 #endif 154 #define curl_socket_typedef 155 #endif /* curl_socket_typedef */ 156 157 /* enum for the different supported SSL backends */ 158 typedef enum { 159 CURLSSLBACKEND_NONE = 0, 160 CURLSSLBACKEND_OPENSSL = 1, 161 CURLSSLBACKEND_GNUTLS = 2, 162 CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, 163 CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ 164 CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, 165 CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, 166 CURLSSLBACKEND_WOLFSSL = 7, 167 CURLSSLBACKEND_SCHANNEL = 8, 168 CURLSSLBACKEND_SECURETRANSPORT = 9, 169 CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, 170 CURLSSLBACKEND_MBEDTLS = 11, 171 CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, 172 CURLSSLBACKEND_BEARSSL = 13, 173 CURLSSLBACKEND_RUSTLS = 14 174 } curl_sslbackend; 175 176 /* aliases for library clones and renames */ 177 #define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL 178 #define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL 179 #define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL 180 181 /* deprecated names: */ 182 #define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL 183 #define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT 184 185 struct curl_httppost { 186 struct curl_httppost *next; /* next entry in the list */ 187 char *name; /* pointer to allocated name */ 188 long namelength; /* length of name length */ 189 char *contents; /* pointer to allocated data contents */ 190 long contentslength; /* length of contents field, see also 191 CURL_HTTPPOST_LARGE */ 192 char *buffer; /* pointer to allocated buffer contents */ 193 long bufferlength; /* length of buffer field */ 194 char *contenttype; /* Content-Type */ 195 struct curl_slist *contentheader; /* list of extra headers for this form */ 196 struct curl_httppost *more; /* if one field name has more than one 197 file, this link should link to following 198 files */ 199 long flags; /* as defined below */ 200 201 /* specified content is a filename */ 202 #define CURL_HTTPPOST_FILENAME (1<<0) 203 /* specified content is a filename */ 204 #define CURL_HTTPPOST_READFILE (1<<1) 205 /* name is only stored pointer do not free in formfree */ 206 #define CURL_HTTPPOST_PTRNAME (1<<2) 207 /* contents is only stored pointer do not free in formfree */ 208 #define CURL_HTTPPOST_PTRCONTENTS (1<<3) 209 /* upload file from buffer */ 210 #define CURL_HTTPPOST_BUFFER (1<<4) 211 /* upload file from pointer contents */ 212 #define CURL_HTTPPOST_PTRBUFFER (1<<5) 213 /* upload file contents by using the regular read callback to get the data and 214 pass the given pointer as custom pointer */ 215 #define CURL_HTTPPOST_CALLBACK (1<<6) 216 /* use size in 'contentlen', added in 7.46.0 */ 217 #define CURL_HTTPPOST_LARGE (1<<7) 218 219 char *showfilename; /* The filename to show. If not set, the 220 actual filename will be used (if this 221 is a file part) */ 222 void *userp; /* custom pointer used for 223 HTTPPOST_CALLBACK posts */ 224 curl_off_t contentlen; /* alternative length of contents 225 field. Used if CURL_HTTPPOST_LARGE is 226 set. Added in 7.46.0 */ 227 }; 228 229 230 /* This is a return code for the progress callback that, when returned, will 231 signal libcurl to continue executing the default progress function */ 232 #define CURL_PROGRESSFUNC_CONTINUE 0x10000001 233 234 /* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now 235 considered deprecated but was the only choice up until 7.31.0 */ 236 typedef int (*curl_progress_callback)(void *clientp, 237 double dltotal, 238 double dlnow, 239 double ultotal, 240 double ulnow); 241 242 /* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced 243 in 7.32.0, avoids the use of floating point numbers and provides more 244 detailed information. */ 245 typedef int (*curl_xferinfo_callback)(void *clientp, 246 curl_off_t dltotal, 247 curl_off_t dlnow, 248 curl_off_t ultotal, 249 curl_off_t ulnow); 250 251 #ifndef CURL_MAX_READ_SIZE 252 /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ 253 #define CURL_MAX_READ_SIZE (10*1024*1024) 254 #endif 255 256 #ifndef CURL_MAX_WRITE_SIZE 257 /* Tests have proven that 20K is a very bad buffer size for uploads on 258 Windows, while 16K for some odd reason performed a lot better. 259 We do the ifndef check to allow this value to easier be changed at build 260 time for those who feel adventurous. The practical minimum is about 261 400 bytes since libcurl uses a buffer of this size as a scratch area 262 (unrelated to network send operations). */ 263 #define CURL_MAX_WRITE_SIZE 16384 264 #endif 265 266 #ifndef CURL_MAX_HTTP_HEADER 267 /* The only reason to have a max limit for this is to avoid the risk of a bad 268 server feeding libcurl with a never-ending header that will cause reallocs 269 infinitely */ 270 #define CURL_MAX_HTTP_HEADER (100*1024) 271 #endif 272 273 /* This is a magic return code for the write callback that, when returned, 274 will signal libcurl to pause receiving on the current transfer. */ 275 #define CURL_WRITEFUNC_PAUSE 0x10000001 276 277 /* This is a magic return code for the write callback that, when returned, 278 will signal an error from the callback. */ 279 #define CURL_WRITEFUNC_ERROR 0xFFFFFFFF 280 281 typedef size_t (*curl_write_callback)(char *buffer, 282 size_t size, 283 size_t nitems, 284 void *outstream); 285 286 /* This callback will be called when a new resolver request is made */ 287 typedef int (*curl_resolver_start_callback)(void *resolver_state, 288 void *reserved, void *userdata); 289 290 /* enumeration of file types */ 291 typedef enum { 292 CURLFILETYPE_FILE = 0, 293 CURLFILETYPE_DIRECTORY, 294 CURLFILETYPE_SYMLINK, 295 CURLFILETYPE_DEVICE_BLOCK, 296 CURLFILETYPE_DEVICE_CHAR, 297 CURLFILETYPE_NAMEDPIPE, 298 CURLFILETYPE_SOCKET, 299 CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ 300 301 CURLFILETYPE_UNKNOWN /* should never occur */ 302 } curlfiletype; 303 304 #define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) 305 #define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) 306 #define CURLFINFOFLAG_KNOWN_TIME (1<<2) 307 #define CURLFINFOFLAG_KNOWN_PERM (1<<3) 308 #define CURLFINFOFLAG_KNOWN_UID (1<<4) 309 #define CURLFINFOFLAG_KNOWN_GID (1<<5) 310 #define CURLFINFOFLAG_KNOWN_SIZE (1<<6) 311 #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) 312 313 /* Information about a single file, used when doing FTP wildcard matching */ 314 struct curl_fileinfo { 315 char *filename; 316 curlfiletype filetype; 317 time_t time; /* always zero! */ 318 unsigned int perm; 319 int uid; 320 int gid; 321 curl_off_t size; 322 long int hardlinks; 323 324 struct { 325 /* If some of these fields is not NULL, it is a pointer to b_data. */ 326 char *time; 327 char *perm; 328 char *user; 329 char *group; 330 char *target; /* pointer to the target filename of a symlink */ 331 } strings; 332 333 unsigned int flags; 334 335 /* These are libcurl private struct fields. Previously used by libcurl, so 336 they must never be interfered with. */ 337 char *b_data; 338 size_t b_size; 339 size_t b_used; 340 }; 341 342 /* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ 343 #define CURL_CHUNK_BGN_FUNC_OK 0 344 #define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ 345 #define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ 346 347 /* if splitting of data transfer is enabled, this callback is called before 348 download of an individual chunk started. Note that parameter "remains" works 349 only for FTP wildcard downloading (for now), otherwise is not used */ 350 typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, 351 void *ptr, 352 int remains); 353 354 /* return codes for CURLOPT_CHUNK_END_FUNCTION */ 355 #define CURL_CHUNK_END_FUNC_OK 0 356 #define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ 357 358 /* If splitting of data transfer is enabled this callback is called after 359 download of an individual chunk finished. 360 Note! After this callback was set then it have to be called FOR ALL chunks. 361 Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. 362 This is the reason why we do not need "transfer_info" parameter in this 363 callback and we are not interested in "remains" parameter too. */ 364 typedef long (*curl_chunk_end_callback)(void *ptr); 365 366 /* return codes for FNMATCHFUNCTION */ 367 #define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ 368 #define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern does not match the string */ 369 #define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ 370 371 /* callback type for wildcard downloading pattern matching. If the 372 string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ 373 typedef int (*curl_fnmatch_callback)(void *ptr, 374 const char *pattern, 375 const char *string); 376 377 /* These are the return codes for the seek callbacks */ 378 #define CURL_SEEKFUNC_OK 0 379 #define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ 380 #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking cannot be done, so 381 libcurl might try other means instead */ 382 typedef int (*curl_seek_callback)(void *instream, 383 curl_off_t offset, 384 int origin); /* 'whence' */ 385 386 /* This is a return code for the read callback that, when returned, will 387 signal libcurl to immediately abort the current transfer. */ 388 #define CURL_READFUNC_ABORT 0x10000000 389 /* This is a return code for the read callback that, when returned, will 390 signal libcurl to pause sending data on the current transfer. */ 391 #define CURL_READFUNC_PAUSE 0x10000001 392 393 /* Return code for when the trailing headers' callback has terminated 394 without any errors */ 395 #define CURL_TRAILERFUNC_OK 0 396 /* Return code for when was an error in the trailing header's list and we 397 want to abort the request */ 398 #define CURL_TRAILERFUNC_ABORT 1 399 400 typedef size_t (*curl_read_callback)(char *buffer, 401 size_t size, 402 size_t nitems, 403 void *instream); 404 405 typedef int (*curl_trailer_callback)(struct curl_slist **list, 406 void *userdata); 407 408 typedef enum { 409 CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ 410 CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ 411 CURLSOCKTYPE_LAST /* never use */ 412 } curlsocktype; 413 414 /* The return code from the sockopt_callback can signal information back 415 to libcurl: */ 416 #define CURL_SOCKOPT_OK 0 417 #define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return 418 CURLE_ABORTED_BY_CALLBACK */ 419 #define CURL_SOCKOPT_ALREADY_CONNECTED 2 420 421 typedef int (*curl_sockopt_callback)(void *clientp, 422 curl_socket_t curlfd, 423 curlsocktype purpose); 424 425 struct curl_sockaddr { 426 int family; 427 int socktype; 428 int protocol; 429 unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it 430 turned really ugly and painful on the systems that 431 lack this type */ 432 struct sockaddr addr; 433 }; 434 435 typedef curl_socket_t 436 (*curl_opensocket_callback)(void *clientp, 437 curlsocktype purpose, 438 struct curl_sockaddr *address); 439 440 typedef int 441 (*curl_closesocket_callback)(void *clientp, curl_socket_t item); 442 443 typedef enum { 444 CURLIOE_OK, /* I/O operation successful */ 445 CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ 446 CURLIOE_FAILRESTART, /* failed to restart the read */ 447 CURLIOE_LAST /* never use */ 448 } curlioerr; 449 450 typedef enum { 451 CURLIOCMD_NOP, /* no operation */ 452 CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ 453 CURLIOCMD_LAST /* never use */ 454 } curliocmd; 455 456 typedef curlioerr (*curl_ioctl_callback)(CURL *handle, 457 int cmd, 458 void *clientp); 459 460 #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS 461 /* 462 * The following typedef's are signatures of malloc, free, realloc, strdup and 463 * calloc respectively. Function pointers of these types can be passed to the 464 * curl_global_init_mem() function to set user defined memory management 465 * callback routines. 466 */ 467 typedef void *(*curl_malloc_callback)(size_t size); 468 typedef void (*curl_free_callback)(void *ptr); 469 typedef void *(*curl_realloc_callback)(void *ptr, size_t size); 470 typedef char *(*curl_strdup_callback)(const char *str); 471 typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); 472 473 #define CURL_DID_MEMORY_FUNC_TYPEDEFS 474 #endif 475 476 /* the kind of data that is passed to information_callback */ 477 typedef enum { 478 CURLINFO_TEXT = 0, 479 CURLINFO_HEADER_IN, /* 1 */ 480 CURLINFO_HEADER_OUT, /* 2 */ 481 CURLINFO_DATA_IN, /* 3 */ 482 CURLINFO_DATA_OUT, /* 4 */ 483 CURLINFO_SSL_DATA_IN, /* 5 */ 484 CURLINFO_SSL_DATA_OUT, /* 6 */ 485 CURLINFO_END 486 } curl_infotype; 487 488 typedef int (*curl_debug_callback) 489 (CURL *handle, /* the handle/transfer this concerns */ 490 curl_infotype type, /* what kind of data */ 491 char *data, /* points to the data */ 492 size_t size, /* size of the data pointed to */ 493 void *userptr); /* whatever the user please */ 494 495 /* This is the CURLOPT_PREREQFUNCTION callback prototype. */ 496 typedef int (*curl_prereq_callback)(void *clientp, 497 char *conn_primary_ip, 498 char *conn_local_ip, 499 int conn_primary_port, 500 int conn_local_port); 501 502 /* Return code for when the pre-request callback has terminated without 503 any errors */ 504 #define CURL_PREREQFUNC_OK 0 505 /* Return code for when the pre-request callback wants to abort the 506 request */ 507 #define CURL_PREREQFUNC_ABORT 1 508 509 /* All possible error codes from all sorts of curl functions. Future versions 510 may return other values, stay prepared. 511 512 Always add new return codes last. Never *EVER* remove any. The return 513 codes must remain the same! 514 */ 515 516 typedef enum { 517 CURLE_OK = 0, 518 CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ 519 CURLE_FAILED_INIT, /* 2 */ 520 CURLE_URL_MALFORMAT, /* 3 */ 521 CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for 522 7.17.0, reused in April 2011 for 7.21.5] */ 523 CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ 524 CURLE_COULDNT_RESOLVE_HOST, /* 6 */ 525 CURLE_COULDNT_CONNECT, /* 7 */ 526 CURLE_WEIRD_SERVER_REPLY, /* 8 */ 527 CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server 528 due to lack of access - when login fails 529 this is not returned. */ 530 CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for 531 7.15.4, reused in Dec 2011 for 7.24.0]*/ 532 CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ 533 CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server 534 [was obsoleted in August 2007 for 7.17.0, 535 reused in Dec 2011 for 7.24.0]*/ 536 CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ 537 CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ 538 CURLE_FTP_CANT_GET_HOST, /* 15 */ 539 CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. 540 [was obsoleted in August 2007 for 7.17.0, 541 reused in July 2014 for 7.38.0] */ 542 CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ 543 CURLE_PARTIAL_FILE, /* 18 */ 544 CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ 545 CURLE_OBSOLETE20, /* 20 - NOT USED */ 546 CURLE_QUOTE_ERROR, /* 21 - quote command failure */ 547 CURLE_HTTP_RETURNED_ERROR, /* 22 */ 548 CURLE_WRITE_ERROR, /* 23 */ 549 CURLE_OBSOLETE24, /* 24 - NOT USED */ 550 CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ 551 CURLE_READ_ERROR, /* 26 - could not open/read from file */ 552 CURLE_OUT_OF_MEMORY, /* 27 */ 553 CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ 554 CURLE_OBSOLETE29, /* 29 - NOT USED */ 555 CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ 556 CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ 557 CURLE_OBSOLETE32, /* 32 - NOT USED */ 558 CURLE_RANGE_ERROR, /* 33 - RANGE "command" did not work */ 559 CURLE_HTTP_POST_ERROR, /* 34 */ 560 CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ 561 CURLE_BAD_DOWNLOAD_RESUME, /* 36 - could not resume download */ 562 CURLE_FILE_COULDNT_READ_FILE, /* 37 */ 563 CURLE_LDAP_CANNOT_BIND, /* 38 */ 564 CURLE_LDAP_SEARCH_FAILED, /* 39 */ 565 CURLE_OBSOLETE40, /* 40 - NOT USED */ 566 CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ 567 CURLE_ABORTED_BY_CALLBACK, /* 42 */ 568 CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ 569 CURLE_OBSOLETE44, /* 44 - NOT USED */ 570 CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ 571 CURLE_OBSOLETE46, /* 46 - NOT USED */ 572 CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ 573 CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ 574 CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ 575 CURLE_OBSOLETE50, /* 50 - NOT USED */ 576 CURLE_OBSOLETE51, /* 51 - NOT USED */ 577 CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ 578 CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ 579 CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as 580 default */ 581 CURLE_SEND_ERROR, /* 55 - failed sending network data */ 582 CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ 583 CURLE_OBSOLETE57, /* 57 - NOT IN USE */ 584 CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ 585 CURLE_SSL_CIPHER, /* 59 - could not use specified cipher */ 586 CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint 587 was not verified fine */ 588 CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ 589 CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ 590 CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ 591 CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ 592 CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind 593 that failed */ 594 CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ 595 CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not 596 accepted and we failed to login */ 597 CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ 598 CURLE_TFTP_PERM, /* 69 - permission problem on server */ 599 CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ 600 CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ 601 CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ 602 CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ 603 CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ 604 CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ 605 CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ 606 CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing 607 or wrong format */ 608 CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ 609 CURLE_SSH, /* 79 - error from the SSH layer, somewhat 610 generic so the error message will be of 611 interest when this has happened */ 612 613 CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL 614 connection */ 615 CURLE_AGAIN, /* 81 - socket is not ready for send/recv, 616 wait till it is ready and try again (Added 617 in 7.18.2) */ 618 CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or 619 wrong format (Added in 7.19.0) */ 620 CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in 621 7.19.0) */ 622 CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ 623 CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ 624 CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ 625 CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ 626 CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ 627 CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the 628 session will be queued */ 629 CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not 630 match */ 631 CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ 632 CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer 633 */ 634 CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from 635 inside a callback */ 636 CURLE_AUTH_ERROR, /* 94 - an authentication function returned an 637 error */ 638 CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ 639 CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ 640 CURLE_PROXY, /* 97 - proxy handshake error */ 641 CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ 642 CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ 643 CURLE_TOO_LARGE, /* 100 - a value/data met its maximum */ 644 CURLE_ECH_REQUIRED, /* 101 - ECH tried but failed */ 645 CURL_LAST /* never use! */ 646 } CURLcode; 647 648 #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all 649 the obsolete stuff removed! */ 650 651 /* Previously obsolete error code reused in 7.38.0 */ 652 #define CURLE_OBSOLETE16 CURLE_HTTP2 653 654 /* Previously obsolete error codes reused in 7.24.0 */ 655 #define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED 656 #define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT 657 658 /* compatibility with older names */ 659 #define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING 660 #define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY 661 662 /* The following were added in 7.62.0 */ 663 #define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION 664 665 /* The following were added in 7.21.5, April 2011 */ 666 #define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION 667 668 /* Added for 7.78.0 */ 669 #define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX 670 671 /* The following were added in 7.17.1 */ 672 /* These are scheduled to disappear by 2009 */ 673 #define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION 674 675 /* The following were added in 7.17.0 */ 676 /* These are scheduled to disappear by 2009 */ 677 #define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ 678 #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 679 #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 680 #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 681 #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 682 #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 683 #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 684 #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 685 #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 686 #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 687 #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 688 #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 689 #define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN 690 691 #define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED 692 #define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE 693 #define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR 694 #define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL 695 #define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS 696 #define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR 697 #define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED 698 699 /* The following were added earlier */ 700 701 #define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT 702 #define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR 703 #define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED 704 #define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED 705 #define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE 706 #define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME 707 #define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 708 #define CURLE_CONV_REQD CURLE_OBSOLETE76 709 #define CURLE_CONV_FAILED CURLE_OBSOLETE75 710 711 /* This was the error code 50 in 7.7.3 and a few earlier versions, this 712 is no longer used by libcurl but is instead #defined here only to not 713 make programs break */ 714 #define CURLE_ALREADY_COMPLETE 99999 715 716 /* Provide defines for really old option names */ 717 #define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ 718 #define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ 719 #define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA 720 721 /* Since long deprecated options with no code in the lib that does anything 722 with them. */ 723 #define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 724 #define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 725 #define CURLOPT_OBSOLETE72 9999 726 #define CURLOPT_OBSOLETE40 9999 727 728 #endif /* !CURL_NO_OLDIES */ 729 730 /* 731 * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was 732 * return for the transfers. 733 */ 734 typedef enum { 735 CURLPX_OK, 736 CURLPX_BAD_ADDRESS_TYPE, 737 CURLPX_BAD_VERSION, 738 CURLPX_CLOSED, 739 CURLPX_GSSAPI, 740 CURLPX_GSSAPI_PERMSG, 741 CURLPX_GSSAPI_PROTECTION, 742 CURLPX_IDENTD, 743 CURLPX_IDENTD_DIFFER, 744 CURLPX_LONG_HOSTNAME, 745 CURLPX_LONG_PASSWD, 746 CURLPX_LONG_USER, 747 CURLPX_NO_AUTH, 748 CURLPX_RECV_ADDRESS, 749 CURLPX_RECV_AUTH, 750 CURLPX_RECV_CONNECT, 751 CURLPX_RECV_REQACK, 752 CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, 753 CURLPX_REPLY_COMMAND_NOT_SUPPORTED, 754 CURLPX_REPLY_CONNECTION_REFUSED, 755 CURLPX_REPLY_GENERAL_SERVER_FAILURE, 756 CURLPX_REPLY_HOST_UNREACHABLE, 757 CURLPX_REPLY_NETWORK_UNREACHABLE, 758 CURLPX_REPLY_NOT_ALLOWED, 759 CURLPX_REPLY_TTL_EXPIRED, 760 CURLPX_REPLY_UNASSIGNED, 761 CURLPX_REQUEST_FAILED, 762 CURLPX_RESOLVE_HOST, 763 CURLPX_SEND_AUTH, 764 CURLPX_SEND_CONNECT, 765 CURLPX_SEND_REQUEST, 766 CURLPX_UNKNOWN_FAIL, 767 CURLPX_UNKNOWN_MODE, 768 CURLPX_USER_REJECTED, 769 CURLPX_LAST /* never use */ 770 } CURLproxycode; 771 772 /* This prototype applies to all conversion callbacks */ 773 typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); 774 775 typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ 776 void *ssl_ctx, /* actually an OpenSSL 777 or wolfSSL SSL_CTX, 778 or an mbedTLS 779 mbedtls_ssl_config */ 780 void *userptr); 781 782 typedef enum { 783 CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use 784 CONNECT HTTP/1.1 */ 785 CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT 786 HTTP/1.0 */ 787 CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ 788 CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ 789 CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already 790 in 7.10 */ 791 CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ 792 CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ 793 CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the 794 hostname rather than the IP address. added 795 in 7.18.0 */ 796 } curl_proxytype; /* this enum was added in 7.10 */ 797 798 /* 799 * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: 800 * 801 * CURLAUTH_NONE - No HTTP authentication 802 * CURLAUTH_BASIC - HTTP Basic authentication (default) 803 * CURLAUTH_DIGEST - HTTP Digest authentication 804 * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication 805 * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) 806 * CURLAUTH_NTLM - HTTP NTLM authentication 807 * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour 808 * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper 809 * CURLAUTH_BEARER - HTTP Bearer token authentication 810 * CURLAUTH_ONLY - Use together with a single other type to force no 811 * authentication or just that single type 812 * CURLAUTH_ANY - All fine types set 813 * CURLAUTH_ANYSAFE - All fine types except Basic 814 */ 815 816 #define CURLAUTH_NONE ((unsigned long)0) 817 #define CURLAUTH_BASIC (((unsigned long)1)<<0) 818 #define CURLAUTH_DIGEST (((unsigned long)1)<<1) 819 #define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) 820 /* Deprecated since the advent of CURLAUTH_NEGOTIATE */ 821 #define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE 822 /* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ 823 #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE 824 #define CURLAUTH_NTLM (((unsigned long)1)<<3) 825 #define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) 826 #ifndef CURL_NO_OLDIES 827 /* functionality removed since 8.8.0 */ 828 #define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) 829 #endif 830 #define CURLAUTH_BEARER (((unsigned long)1)<<6) 831 #define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) 832 #define CURLAUTH_ONLY (((unsigned long)1)<<31) 833 #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) 834 #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) 835 836 #define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ 837 #define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ 838 #define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ 839 #define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ 840 #define CURLSSH_AUTH_HOST (1<<2) /* host key files */ 841 #define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ 842 #define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ 843 #define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ 844 #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY 845 846 #define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ 847 #define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ 848 #define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ 849 850 #define CURL_ERROR_SIZE 256 851 852 enum curl_khtype { 853 CURLKHTYPE_UNKNOWN, 854 CURLKHTYPE_RSA1, 855 CURLKHTYPE_RSA, 856 CURLKHTYPE_DSS, 857 CURLKHTYPE_ECDSA, 858 CURLKHTYPE_ED25519 859 }; 860 861 struct curl_khkey { 862 const char *key; /* points to a null-terminated string encoded with base64 863 if len is zero, otherwise to the "raw" data */ 864 size_t len; 865 enum curl_khtype keytype; 866 }; 867 868 /* this is the set of return values expected from the curl_sshkeycallback 869 callback */ 870 enum curl_khstat { 871 CURLKHSTAT_FINE_ADD_TO_FILE, 872 CURLKHSTAT_FINE, 873 CURLKHSTAT_REJECT, /* reject the connection, return an error */ 874 CURLKHSTAT_DEFER, /* do not accept it, but we cannot answer right now. 875 Causes a CURLE_PEER_FAILED_VERIFICATION error but the 876 connection will be left intact etc */ 877 CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ 878 CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ 879 }; 880 881 /* this is the set of status codes pass in to the callback */ 882 enum curl_khmatch { 883 CURLKHMATCH_OK, /* match */ 884 CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ 885 CURLKHMATCH_MISSING, /* no matching host/key found */ 886 CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ 887 }; 888 889 typedef int 890 (*curl_sshkeycallback) (CURL *easy, /* easy handle */ 891 const struct curl_khkey *knownkey, /* known */ 892 const struct curl_khkey *foundkey, /* found */ 893 enum curl_khmatch, /* libcurl's view on the keys */ 894 void *clientp); /* custom pointer passed with */ 895 /* CURLOPT_SSH_KEYDATA */ 896 897 typedef int 898 (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ 899 /* with CURLOPT_SSH_HOSTKEYDATA */ 900 int keytype, /* CURLKHTYPE */ 901 const char *key, /* hostkey to check */ 902 size_t keylen); /* length of the key */ 903 /* return CURLE_OK to accept */ 904 /* or something else to refuse */ 905 906 907 /* parameter for the CURLOPT_USE_SSL option */ 908 typedef enum { 909 CURLUSESSL_NONE, /* do not attempt to use SSL */ 910 CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ 911 CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ 912 CURLUSESSL_ALL, /* SSL for all communication or fail */ 913 CURLUSESSL_LAST /* not an option, never use */ 914 } curl_usessl; 915 916 /* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ 917 918 /* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the 919 name of improving interoperability with older servers. Some SSL libraries 920 have introduced work-arounds for this flaw but those work-arounds sometimes 921 make the SSL communication fail. To regain functionality with those broken 922 servers, a user can this way allow the vulnerability back. */ 923 #define CURLSSLOPT_ALLOW_BEAST (1<<0) 924 925 /* - NO_REVOKE tells libcurl to disable certificate revocation checks for those 926 SSL backends where such behavior is present. */ 927 #define CURLSSLOPT_NO_REVOKE (1<<1) 928 929 /* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain 930 if possible. The OpenSSL backend has this ability. */ 931 #define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) 932 933 /* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline 934 checks and ignore missing revocation list for those SSL backends where such 935 behavior is present. */ 936 #define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) 937 938 /* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of 939 operating system. Currently implemented under MS-Windows. */ 940 #define CURLSSLOPT_NATIVE_CA (1<<4) 941 942 /* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use 943 a client certificate for authentication. (Schannel) */ 944 #define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) 945 946 /* The default connection attempt delay in milliseconds for happy eyeballs. 947 CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document 948 this value, keep them in sync. */ 949 #define CURL_HET_DEFAULT 200L 950 951 /* The default connection upkeep interval in milliseconds. */ 952 #define CURL_UPKEEP_INTERVAL_DEFAULT 60000L 953 954 #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all 955 the obsolete stuff removed! */ 956 957 /* Backwards compatibility with older names */ 958 /* These are scheduled to disappear by 2009 */ 959 960 #define CURLFTPSSL_NONE CURLUSESSL_NONE 961 #define CURLFTPSSL_TRY CURLUSESSL_TRY 962 #define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL 963 #define CURLFTPSSL_ALL CURLUSESSL_ALL 964 #define CURLFTPSSL_LAST CURLUSESSL_LAST 965 #define curl_ftpssl curl_usessl 966 #endif /* !CURL_NO_OLDIES */ 967 968 /* parameter for the CURLOPT_FTP_SSL_CCC option */ 969 typedef enum { 970 CURLFTPSSL_CCC_NONE, /* do not send CCC */ 971 CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ 972 CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ 973 CURLFTPSSL_CCC_LAST /* not an option, never use */ 974 } curl_ftpccc; 975 976 /* parameter for the CURLOPT_FTPSSLAUTH option */ 977 typedef enum { 978 CURLFTPAUTH_DEFAULT, /* let libcurl decide */ 979 CURLFTPAUTH_SSL, /* use "AUTH SSL" */ 980 CURLFTPAUTH_TLS, /* use "AUTH TLS" */ 981 CURLFTPAUTH_LAST /* not an option, never use */ 982 } curl_ftpauth; 983 984 /* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ 985 typedef enum { 986 CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ 987 CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD 988 again if MKD succeeded, for SFTP this does 989 similar magic */ 990 CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD 991 again even if MKD failed! */ 992 CURLFTP_CREATE_DIR_LAST /* not an option, never use */ 993 } curl_ftpcreatedir; 994 995 /* parameter for the CURLOPT_FTP_FILEMETHOD option */ 996 typedef enum { 997 CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ 998 CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ 999 CURLFTPMETHOD_NOCWD, /* no CWD at all */ 1000 CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ 1001 CURLFTPMETHOD_LAST /* not an option, never use */ 1002 } curl_ftpmethod; 1003 1004 /* bitmask defines for CURLOPT_HEADEROPT */ 1005 #define CURLHEADER_UNIFIED 0 1006 #define CURLHEADER_SEPARATE (1<<0) 1007 1008 /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ 1009 #define CURLALTSVC_READONLYFILE (1<<2) 1010 #define CURLALTSVC_H1 (1<<3) 1011 #define CURLALTSVC_H2 (1<<4) 1012 #define CURLALTSVC_H3 (1<<5) 1013 1014 1015 struct curl_hstsentry { 1016 char *name; 1017 size_t namelen; 1018 unsigned int includeSubDomains:1; 1019 char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ 1020 }; 1021 1022 struct curl_index { 1023 size_t index; /* the provided entry's "index" or count */ 1024 size_t total; /* total number of entries to save */ 1025 }; 1026 1027 typedef enum { 1028 CURLSTS_OK, 1029 CURLSTS_DONE, 1030 CURLSTS_FAIL 1031 } CURLSTScode; 1032 1033 typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, 1034 struct curl_hstsentry *e, 1035 void *userp); 1036 typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, 1037 struct curl_hstsentry *e, 1038 struct curl_index *i, 1039 void *userp); 1040 1041 /* CURLHSTS_* are bits for the CURLOPT_HSTS option */ 1042 #define CURLHSTS_ENABLE (long)(1<<0) 1043 #define CURLHSTS_READONLYFILE (long)(1<<1) 1044 1045 /* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS 1046 options. Do not use. */ 1047 #define CURLPROTO_HTTP (1<<0) 1048 #define CURLPROTO_HTTPS (1<<1) 1049 #define CURLPROTO_FTP (1<<2) 1050 #define CURLPROTO_FTPS (1<<3) 1051 #define CURLPROTO_SCP (1<<4) 1052 #define CURLPROTO_SFTP (1<<5) 1053 #define CURLPROTO_TELNET (1<<6) 1054 #define CURLPROTO_LDAP (1<<7) 1055 #define CURLPROTO_LDAPS (1<<8) 1056 #define CURLPROTO_DICT (1<<9) 1057 #define CURLPROTO_FILE (1<<10) 1058 #define CURLPROTO_TFTP (1<<11) 1059 #define CURLPROTO_IMAP (1<<12) 1060 #define CURLPROTO_IMAPS (1<<13) 1061 #define CURLPROTO_POP3 (1<<14) 1062 #define CURLPROTO_POP3S (1<<15) 1063 #define CURLPROTO_SMTP (1<<16) 1064 #define CURLPROTO_SMTPS (1<<17) 1065 #define CURLPROTO_RTSP (1<<18) 1066 #define CURLPROTO_RTMP (1<<19) 1067 #define CURLPROTO_RTMPT (1<<20) 1068 #define CURLPROTO_RTMPE (1<<21) 1069 #define CURLPROTO_RTMPTE (1<<22) 1070 #define CURLPROTO_RTMPS (1<<23) 1071 #define CURLPROTO_RTMPTS (1<<24) 1072 #define CURLPROTO_GOPHER (1<<25) 1073 #define CURLPROTO_SMB (1<<26) 1074 #define CURLPROTO_SMBS (1<<27) 1075 #define CURLPROTO_MQTT (1<<28) 1076 #define CURLPROTO_GOPHERS (1<<29) 1077 #define CURLPROTO_ALL (~0) /* enable everything */ 1078 1079 /* long may be 32 or 64 bits, but we should never depend on anything else 1080 but 32 */ 1081 #define CURLOPTTYPE_LONG 0 1082 #define CURLOPTTYPE_OBJECTPOINT 10000 1083 #define CURLOPTTYPE_FUNCTIONPOINT 20000 1084 #define CURLOPTTYPE_OFF_T 30000 1085 #define CURLOPTTYPE_BLOB 40000 1086 1087 /* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the 1088 string options from the header file */ 1089 1090 1091 #define CURLOPT(na,t,nu) na = t + nu 1092 #define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu 1093 1094 /* CURLOPT aliases that make no runtime difference */ 1095 1096 /* 'char *' argument to a string with a trailing zero */ 1097 #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT 1098 1099 /* 'struct curl_slist *' argument */ 1100 #define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT 1101 1102 /* 'void *' argument passed untouched to callback */ 1103 #define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT 1104 1105 /* 'long' argument with a set of values/bitmask */ 1106 #define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG 1107 1108 /* 1109 * All CURLOPT_* values. 1110 */ 1111 1112 typedef enum { 1113 /* This is the FILE * or void * the regular output should be written to. */ 1114 CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), 1115 1116 /* The full URL to get/put */ 1117 CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), 1118 1119 /* Port number to connect to, if other than default. */ 1120 CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), 1121 1122 /* Name of proxy to use. */ 1123 CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), 1124 1125 /* "user:password;options" to use when fetching. */ 1126 CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), 1127 1128 /* "user:password" to use with proxy. */ 1129 CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), 1130 1131 /* Range to get, specified as an ASCII string. */ 1132 CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), 1133 1134 /* not used */ 1135 1136 /* Specified file stream to upload from (use as input): */ 1137 CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), 1138 1139 /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE 1140 * bytes big. */ 1141 CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), 1142 1143 /* Function that will be called to store the output (instead of fwrite). The 1144 * parameters will use fwrite() syntax, make sure to follow them. */ 1145 CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), 1146 1147 /* Function that will be called to read the input (instead of fread). The 1148 * parameters will use fread() syntax, make sure to follow them. */ 1149 CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), 1150 1151 /* Time-out the read operation after this amount of seconds */ 1152 CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), 1153 1154 /* If CURLOPT_READDATA is used, this can be used to inform libcurl about 1155 * how large the file being sent really is. That allows better error 1156 * checking and better verifies that the upload was successful. -1 means 1157 * unknown size. 1158 * 1159 * For large file support, there is also a _LARGE version of the key 1160 * which takes an off_t type, allowing platforms with larger off_t 1161 * sizes to handle larger files. See below for INFILESIZE_LARGE. 1162 */ 1163 CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), 1164 1165 /* POST static input fields. */ 1166 CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), 1167 1168 /* Set the referrer page (needed by some CGIs) */ 1169 CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), 1170 1171 /* Set the FTP PORT string (interface name, named or numerical IP address) 1172 Use i.e '-' to use default address. */ 1173 CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), 1174 1175 /* Set the User-Agent string (examined by some CGIs) */ 1176 CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), 1177 1178 /* If the download receives less than "low speed limit" bytes/second 1179 * during "low speed time" seconds, the operations is aborted. 1180 * You could i.e if you have a pretty high speed connection, abort if 1181 * it is less than 2000 bytes/sec during 20 seconds. 1182 */ 1183 1184 /* Set the "low speed limit" */ 1185 CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), 1186 1187 /* Set the "low speed time" */ 1188 CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), 1189 1190 /* Set the continuation offset. 1191 * 1192 * Note there is also a _LARGE version of this key which uses 1193 * off_t types, allowing for large file offsets on platforms which 1194 * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. 1195 */ 1196 CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), 1197 1198 /* Set cookie in request: */ 1199 CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), 1200 1201 /* This points to a linked list of headers, struct curl_slist kind. This 1202 list is also used for RTSP (in spite of its name) */ 1203 CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), 1204 1205 /* This points to a linked list of post entries, struct curl_httppost */ 1206 CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, 1207 7.56.0, "Use CURLOPT_MIMEPOST"), 1208 1209 /* name of the file keeping your private SSL-certificate */ 1210 CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), 1211 1212 /* password for the SSL or SSH private key */ 1213 CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), 1214 1215 /* send TYPE parameter? */ 1216 CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), 1217 1218 /* send linked-list of QUOTE commands */ 1219 CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), 1220 1221 /* send FILE * or void * to store headers to, if you use a callback it 1222 is simply passed to the callback unmodified */ 1223 CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), 1224 1225 /* point to a file to read the initial cookies from, also enables 1226 "cookie awareness" */ 1227 CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), 1228 1229 /* What version to specifically try to use. 1230 See CURL_SSLVERSION defines below. */ 1231 CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), 1232 1233 /* What kind of HTTP time condition to use, see defines */ 1234 CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), 1235 1236 /* Time to use with the above condition. Specified in number of seconds 1237 since 1 Jan 1970 */ 1238 CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), 1239 1240 /* 35 = OBSOLETE */ 1241 1242 /* Custom request, for customizing the get command like 1243 HTTP: DELETE, TRACE and others 1244 FTP: to use a different list command 1245 */ 1246 CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), 1247 1248 /* FILE handle to use instead of stderr */ 1249 CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), 1250 1251 /* 38 is not used */ 1252 1253 /* send linked-list of post-transfer QUOTE commands */ 1254 CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), 1255 1256 /* 40 is not used */ 1257 1258 /* talk a lot */ 1259 CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), 1260 1261 /* throw the header out too */ 1262 CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), 1263 1264 /* shut off the progress meter */ 1265 CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), 1266 1267 /* use HEAD to get http document */ 1268 CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), 1269 1270 /* no output on http error codes >= 400 */ 1271 CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), 1272 1273 /* this is an upload */ 1274 CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), 1275 1276 /* HTTP POST method */ 1277 CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), 1278 1279 /* bare names when listing directories */ 1280 CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), 1281 1282 /* Append instead of overwrite on upload! */ 1283 CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), 1284 1285 /* Specify whether to read the user+password from the .netrc or the URL. 1286 * This must be one of the CURL_NETRC_* enums below. */ 1287 CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), 1288 1289 /* use Location: Luke! */ 1290 CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), 1291 1292 /* transfer data in text/ASCII format */ 1293 CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), 1294 1295 /* HTTP PUT */ 1296 CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, 1297 7.12.1, "Use CURLOPT_UPLOAD"), 1298 1299 /* 55 = OBSOLETE */ 1300 1301 /* DEPRECATED 1302 * Function that will be called instead of the internal progress display 1303 * function. This function should be defined as the curl_progress_callback 1304 * prototype defines. */ 1305 CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, 1306 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), 1307 1308 /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION 1309 callbacks */ 1310 CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), 1311 #define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA 1312 1313 /* We want the referrer field set automatically when following locations */ 1314 CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), 1315 1316 /* Port of the proxy, can be set in the proxy string as well with: 1317 "[host]:[port]" */ 1318 CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), 1319 1320 /* size of the POST input data, if strlen() is not good to use */ 1321 CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), 1322 1323 /* tunnel non-http operations through an HTTP proxy */ 1324 CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), 1325 1326 /* Set the interface string to use as outgoing network interface */ 1327 CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), 1328 1329 /* Set the krb4/5 security level, this also enables krb4/5 awareness. This 1330 * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string 1331 * is set but does not match one of these, 'private' will be used. */ 1332 CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), 1333 1334 /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ 1335 CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), 1336 1337 /* The CApath or CAfile used to validate the peer certificate 1338 this option is used only if SSL_VERIFYPEER is true */ 1339 CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), 1340 1341 /* 66 = OBSOLETE */ 1342 /* 67 = OBSOLETE */ 1343 1344 /* Maximum number of http redirects to follow */ 1345 CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), 1346 1347 /* Pass a long set to 1 to get the date of the requested document (if 1348 possible)! Pass a zero to shut it off. */ 1349 CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), 1350 1351 /* This points to a linked list of telnet options */ 1352 CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), 1353 1354 /* Max amount of cached alive connections */ 1355 CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), 1356 1357 /* 72 = OBSOLETE */ 1358 /* 73 = OBSOLETE */ 1359 1360 /* Set to explicitly use a new connection for the upcoming transfer. 1361 Do not use this unless you are absolutely sure of this, as it makes the 1362 operation slower and is less friendly for the network. */ 1363 CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), 1364 1365 /* Set to explicitly forbid the upcoming transfer's connection to be reused 1366 when done. Do not use this unless you are absolutely sure of this, as it 1367 makes the operation slower and is less friendly for the network. */ 1368 CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), 1369 1370 /* Set to a filename that contains random data for libcurl to use to 1371 seed the random engine when doing SSL connects. */ 1372 CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, 1373 7.84.0, "Serves no purpose anymore"), 1374 1375 /* Set to the Entropy Gathering Daemon socket pathname */ 1376 CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, 1377 7.84.0, "Serves no purpose anymore"), 1378 1379 /* Time-out connect operations after this amount of seconds, if connects are 1380 OK within this time, then fine... This only aborts the connect phase. */ 1381 CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), 1382 1383 /* Function that will be called to store headers (instead of fwrite). The 1384 * parameters will use fwrite() syntax, make sure to follow them. */ 1385 CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), 1386 1387 /* Set this to force the HTTP request to get back to GET. Only really usable 1388 if POST, PUT or a custom request have been used first. 1389 */ 1390 CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), 1391 1392 /* Set if we should verify the Common name from the peer certificate in ssl 1393 * handshake, set 1 to check existence, 2 to ensure that it matches the 1394 * provided hostname. */ 1395 CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), 1396 1397 /* Specify which filename to write all known cookies in after completed 1398 operation. Set filename to "-" (dash) to make it go to stdout. */ 1399 CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), 1400 1401 /* Specify which TLS 1.2 (1.1, 1.0) ciphers to use */ 1402 CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), 1403 1404 /* Specify which HTTP version to use! This must be set to one of the 1405 CURL_HTTP_VERSION* enums set below. */ 1406 CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), 1407 1408 /* Specifically switch on or off the FTP engine's use of the EPSV command. By 1409 default, that one will always be attempted before the more traditional 1410 PASV command. */ 1411 CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), 1412 1413 /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ 1414 CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), 1415 1416 /* name of the file keeping your private SSL-key */ 1417 CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), 1418 1419 /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ 1420 CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), 1421 1422 /* crypto engine for the SSL-sub system */ 1423 CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), 1424 1425 /* set the crypto engine for the SSL-sub system as default 1426 the param has no meaning... 1427 */ 1428 CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), 1429 1430 /* Non-zero value means to use the global dns cache */ 1431 /* DEPRECATED, do not use! */ 1432 CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, 1433 7.11.1, "Use CURLOPT_SHARE"), 1434 1435 /* DNS cache timeout */ 1436 CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), 1437 1438 /* send linked-list of pre-transfer QUOTE commands */ 1439 CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), 1440 1441 /* set the debug function */ 1442 CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), 1443 1444 /* set the data for the debug function */ 1445 CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), 1446 1447 /* mark this as start of a cookie session */ 1448 CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), 1449 1450 /* The CApath directory used to validate the peer certificate 1451 this option is used only if SSL_VERIFYPEER is true */ 1452 CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), 1453 1454 /* Instruct libcurl to use a smaller receive buffer */ 1455 CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), 1456 1457 /* Instruct libcurl to not use any signal/alarm handlers, even when using 1458 timeouts. This option is useful for multi-threaded applications. 1459 See libcurl-the-guide for more background information. */ 1460 CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), 1461 1462 /* Provide a CURLShare for mutexing non-ts data */ 1463 CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), 1464 1465 /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), 1466 CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and 1467 CURLPROXY_SOCKS5. */ 1468 CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), 1469 1470 /* Set the Accept-Encoding string. Use this to tell a server you would like 1471 the response to be compressed. Before 7.21.6, this was known as 1472 CURLOPT_ENCODING */ 1473 CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), 1474 1475 /* Set pointer to private data */ 1476 CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), 1477 1478 /* Set aliases for HTTP 200 in the HTTP Response header */ 1479 CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), 1480 1481 /* Continue to send authentication (user+password) when following locations, 1482 even when hostname changed. This can potentially send off the name 1483 and password to whatever host the server decides. */ 1484 CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), 1485 1486 /* Specifically switch on or off the FTP engine's use of the EPRT command ( 1487 it also disables the LPRT attempt). By default, those ones will always be 1488 attempted before the good old traditional PORT command. */ 1489 CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), 1490 1491 /* Set this to a bitmask value to enable the particular authentications 1492 methods you like. Use this in combination with CURLOPT_USERPWD. 1493 Note that setting multiple bits may cause extra network round-trips. */ 1494 CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), 1495 1496 /* Set the ssl context callback function, currently only for OpenSSL or 1497 wolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. 1498 The function must match the curl_ssl_ctx_callback prototype. */ 1499 CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), 1500 1501 /* Set the userdata for the ssl context callback function's third 1502 argument */ 1503 CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), 1504 1505 /* FTP Option that causes missing dirs to be created on the remote server. 1506 In 7.19.4 we introduced the convenience enums for this option using the 1507 CURLFTP_CREATE_DIR prefix. 1508 */ 1509 CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), 1510 1511 /* Set this to a bitmask value to enable the particular authentications 1512 methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. 1513 Note that setting multiple bits may cause extra network round-trips. */ 1514 CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), 1515 1516 /* Option that changes the timeout, in seconds, associated with getting a 1517 response. This is different from transfer timeout time and essentially 1518 places a demand on the server to acknowledge commands in a timely 1519 manner. For FTP, SMTP, IMAP and POP3. */ 1520 CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), 1521 1522 /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to 1523 tell libcurl to use those IP versions only. This only has effect on 1524 systems with support for more than one, i.e IPv4 _and_ IPv6. */ 1525 CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), 1526 1527 /* Set this option to limit the size of a file that will be downloaded from 1528 an HTTP or FTP server. 1529 1530 Note there is also _LARGE version which adds large file support for 1531 platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ 1532 CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), 1533 1534 /* See the comment for INFILESIZE above, but in short, specifies 1535 * the size of the file being uploaded. -1 means unknown. 1536 */ 1537 CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), 1538 1539 /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version 1540 * of this; look above for RESUME_FROM. 1541 */ 1542 CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), 1543 1544 /* Sets the maximum size of data that will be downloaded from 1545 * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. 1546 */ 1547 CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), 1548 1549 /* Set this option to the filename of your .netrc file you want libcurl 1550 to parse (using the CURLOPT_NETRC option). If not set, libcurl will do 1551 a poor attempt to find the user's home directory and check for a .netrc 1552 file in there. */ 1553 CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), 1554 1555 /* Enable SSL/TLS for FTP, pick one of: 1556 CURLUSESSL_TRY - try using SSL, proceed anyway otherwise 1557 CURLUSESSL_CONTROL - SSL for the control connection or fail 1558 CURLUSESSL_ALL - SSL for all communication or fail 1559 */ 1560 CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), 1561 1562 /* The _LARGE version of the standard POSTFIELDSIZE option */ 1563 CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), 1564 1565 /* Enable/disable the TCP Nagle algorithm */ 1566 CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), 1567 1568 /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ 1569 /* 123 OBSOLETE. Gone in 7.16.0 */ 1570 /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ 1571 /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ 1572 /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ 1573 /* 127 OBSOLETE. Gone in 7.16.0 */ 1574 /* 128 OBSOLETE. Gone in 7.16.0 */ 1575 1576 /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option 1577 can be used to change libcurl's default action which is to first try 1578 "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK 1579 response has been received. 1580 1581 Available parameters are: 1582 CURLFTPAUTH_DEFAULT - let libcurl decide 1583 CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS 1584 CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL 1585 */ 1586 CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), 1587 1588 CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, 1589 7.18.0, "Use CURLOPT_SEEKFUNCTION"), 1590 CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, 1591 7.18.0, "Use CURLOPT_SEEKDATA"), 1592 1593 /* 132 OBSOLETE. Gone in 7.16.0 */ 1594 /* 133 OBSOLETE. Gone in 7.16.0 */ 1595 1596 /* null-terminated string for pass on to the FTP server when asked for 1597 "account" info */ 1598 CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), 1599 1600 /* feed cookie into cookie engine */ 1601 CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), 1602 1603 /* ignore Content-Length */ 1604 CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), 1605 1606 /* Set to non-zero to skip the IP address received in a 227 PASV FTP server 1607 response. Typically used for FTP-SSL purposes but is not restricted to 1608 that. libcurl will then instead use the same IP address it used for the 1609 control connection. */ 1610 CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), 1611 1612 /* Select "file method" to use when doing FTP, see the curl_ftpmethod 1613 above. */ 1614 CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), 1615 1616 /* Local port number to bind the socket to */ 1617 CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), 1618 1619 /* Number of ports to try, including the first one set with LOCALPORT. 1620 Thus, setting it to 1 will make no additional attempts but the first. 1621 */ 1622 CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), 1623 1624 /* no transfer, set up connection and let application use the socket by 1625 extracting it with CURLINFO_LASTSOCKET */ 1626 CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), 1627 1628 /* Function that will be called to convert from the 1629 network encoding (instead of using the iconv calls in libcurl) */ 1630 CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, 1631 CURLOPTTYPE_FUNCTIONPOINT, 142, 1632 7.82.0, "Serves no purpose anymore"), 1633 1634 /* Function that will be called to convert to the 1635 network encoding (instead of using the iconv calls in libcurl) */ 1636 CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, 1637 CURLOPTTYPE_FUNCTIONPOINT, 143, 1638 7.82.0, "Serves no purpose anymore"), 1639 1640 /* Function that will be called to convert from UTF8 1641 (instead of using the iconv calls in libcurl) 1642 Note that this is used only for SSL certificate processing */ 1643 CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, 1644 CURLOPTTYPE_FUNCTIONPOINT, 144, 1645 7.82.0, "Serves no purpose anymore"), 1646 1647 /* if the connection proceeds too quickly then need to slow it down */ 1648 /* limit-rate: maximum number of bytes per second to send or receive */ 1649 CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), 1650 CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), 1651 1652 /* Pointer to command string to send if USER/PASS fails. */ 1653 CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), 1654 1655 /* callback function for setting socket options */ 1656 CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), 1657 CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), 1658 1659 /* set to 0 to disable session ID reuse for this transfer, default is 1660 enabled (== 1) */ 1661 CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), 1662 1663 /* allowed SSH authentication methods */ 1664 CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), 1665 1666 /* Used by scp/sftp to do public/private key authentication */ 1667 CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), 1668 CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), 1669 1670 /* Send CCC (Clear Command Channel) after authentication */ 1671 CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), 1672 1673 /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ 1674 CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), 1675 CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), 1676 1677 /* set to zero to disable the libcurl's decoding and thus pass the raw body 1678 data to the application even when it is encoded/compressed */ 1679 CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), 1680 CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), 1681 1682 /* Permission used when creating new files and directories on the remote 1683 server for protocols that support it, SFTP/SCP/FILE */ 1684 CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), 1685 CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), 1686 1687 /* Set the behavior of POST when redirecting. Values must be set to one 1688 of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ 1689 CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), 1690 1691 /* used by scp/sftp to verify the host's public key */ 1692 CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), 1693 1694 /* Callback function for opening socket (instead of socket(2)). Optionally, 1695 callback is able change the address or refuse to connect returning 1696 CURL_SOCKET_BAD. The callback should have type 1697 curl_opensocket_callback */ 1698 CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), 1699 CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), 1700 1701 /* POST volatile input fields. */ 1702 CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), 1703 1704 /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */ 1705 CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), 1706 1707 /* Callback function for seeking in the input stream */ 1708 CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), 1709 CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), 1710 1711 /* CRL file */ 1712 CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), 1713 1714 /* Issuer certificate */ 1715 CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), 1716 1717 /* (IPv6) Address scope */ 1718 CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), 1719 1720 /* Collect certificate chain info and allow it to get retrievable with 1721 CURLINFO_CERTINFO after the transfer is complete. */ 1722 CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), 1723 1724 /* "name" and "pwd" to use when fetching. */ 1725 CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), 1726 CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), 1727 1728 /* "name" and "pwd" to use with Proxy when fetching. */ 1729 CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), 1730 CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), 1731 1732 /* Comma separated list of hostnames defining no-proxy zones. These should 1733 match both hostnames directly, and hostnames within a domain. For 1734 example, local.com will match local.com and www.local.com, but NOT 1735 notlocal.com or www.notlocal.com. For compatibility with other 1736 implementations of this, .local.com will be considered to be the same as 1737 local.com. A single * is the only valid wildcard, and effectively 1738 disables the use of proxy. */ 1739 CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), 1740 1741 /* block size for TFTP transfers */ 1742 CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), 1743 1744 /* Socks Service */ 1745 /* DEPRECATED, do not use! */ 1746 CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, 1747 CURLOPTTYPE_STRINGPOINT, 179, 1748 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), 1749 1750 /* Socks Service */ 1751 CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), 1752 1753 /* set the bitmask for the protocols that are allowed to be used for the 1754 transfer, which thus helps the app which takes URLs from users or other 1755 external inputs and want to restrict what protocol(s) to deal 1756 with. Defaults to CURLPROTO_ALL. */ 1757 CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, 1758 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), 1759 1760 /* set the bitmask for the protocols that libcurl is allowed to follow to, 1761 as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs 1762 to be set in both bitmasks to be allowed to get redirected to. */ 1763 CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, 1764 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), 1765 1766 /* set the SSH knownhost filename to use */ 1767 CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), 1768 1769 /* set the SSH host key callback, must point to a curl_sshkeycallback 1770 function */ 1771 CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), 1772 1773 /* set the SSH host key callback custom pointer */ 1774 CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), 1775 1776 /* set the SMTP mail originator */ 1777 CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), 1778 1779 /* set the list of SMTP mail receiver(s) */ 1780 CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), 1781 1782 /* FTP: send PRET before PASV */ 1783 CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), 1784 1785 /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ 1786 CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), 1787 1788 /* The RTSP session identifier */ 1789 CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), 1790 1791 /* The RTSP stream URI */ 1792 CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), 1793 1794 /* The Transport: header to use in RTSP requests */ 1795 CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), 1796 1797 /* Manually initialize the client RTSP CSeq for this handle */ 1798 CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), 1799 1800 /* Manually initialize the server RTSP CSeq for this handle */ 1801 CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), 1802 1803 /* The stream to pass to INTERLEAVEFUNCTION. */ 1804 CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), 1805 1806 /* Let the application define a custom write method for RTP data */ 1807 CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), 1808 1809 /* Turn on wildcard matching */ 1810 CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), 1811 1812 /* Directory matching callback called before downloading of an 1813 individual file (chunk) started */ 1814 CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), 1815 1816 /* Directory matching callback called after the file (chunk) 1817 was downloaded, or skipped */ 1818 CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), 1819 1820 /* Change match (fnmatch-like) callback for wildcard matching */ 1821 CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), 1822 1823 /* Let the application define custom chunk data pointer */ 1824 CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), 1825 1826 /* FNMATCH_FUNCTION user pointer */ 1827 CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), 1828 1829 /* send linked-list of name:port:address sets */ 1830 CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), 1831 1832 /* Set a username for authenticated TLS */ 1833 CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), 1834 1835 /* Set a password for authenticated TLS */ 1836 CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), 1837 1838 /* Set authentication type for authenticated TLS */ 1839 CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), 1840 1841 /* Set to 1 to enable the "TE:" header in HTTP requests to ask for 1842 compressed transfer-encoded responses. Set to 0 to disable the use of TE: 1843 in outgoing requests. The current default is 0, but it might change in a 1844 future libcurl release. 1845 1846 libcurl will ask for the compressed methods it knows of, and if that 1847 is not any, it will not ask for transfer-encoding at all even if this 1848 option is set to 1. 1849 1850 */ 1851 CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), 1852 1853 /* Callback function for closing socket (instead of close(2)). The callback 1854 should have type curl_closesocket_callback */ 1855 CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), 1856 CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), 1857 1858 /* allow GSSAPI credential delegation */ 1859 CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), 1860 1861 /* Set the name servers to use for DNS resolution. 1862 * Only supported by the c-ares DNS backend */ 1863 CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), 1864 1865 /* Time-out accept operations (currently for FTP only) after this amount 1866 of milliseconds. */ 1867 CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), 1868 1869 /* Set TCP keepalive */ 1870 CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), 1871 1872 /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ 1873 CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), 1874 CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), 1875 1876 /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ 1877 CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), 1878 1879 /* Set the SMTP auth originator */ 1880 CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), 1881 1882 /* Enable/disable SASL initial response */ 1883 CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), 1884 1885 /* Function that will be called instead of the internal progress display 1886 * function. This function should be defined as the curl_xferinfo_callback 1887 * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ 1888 CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), 1889 1890 /* The XOAUTH2 bearer token */ 1891 CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), 1892 1893 /* Set the interface string to use as outgoing network 1894 * interface for DNS requests. 1895 * Only supported by the c-ares DNS backend */ 1896 CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), 1897 1898 /* Set the local IPv4 address to use for outgoing DNS requests. 1899 * Only supported by the c-ares DNS backend */ 1900 CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), 1901 1902 /* Set the local IPv6 address to use for outgoing DNS requests. 1903 * Only supported by the c-ares DNS backend */ 1904 CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), 1905 1906 /* Set authentication options directly */ 1907 CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), 1908 1909 /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ 1910 CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, 1911 7.86.0, "Has no function"), 1912 1913 /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ 1914 CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), 1915 1916 /* Time to wait for a response to an HTTP request containing an 1917 * Expect: 100-continue header before sending the data anyway. */ 1918 CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), 1919 1920 /* This points to a linked list of headers used for proxy requests only, 1921 struct curl_slist kind */ 1922 CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), 1923 1924 /* Pass in a bitmask of "header options" */ 1925 CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), 1926 1927 /* The public key in DER form used to validate the peer public key 1928 this option is used only if SSL_VERIFYPEER is true */ 1929 CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), 1930 1931 /* Path to Unix domain socket */ 1932 CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), 1933 1934 /* Set if we should verify the certificate status. */ 1935 CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), 1936 1937 /* Set if we should enable TLS false start. */ 1938 CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), 1939 1940 /* Do not squash dot-dot sequences */ 1941 CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), 1942 1943 /* Proxy Service Name */ 1944 CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), 1945 1946 /* Service Name */ 1947 CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), 1948 1949 /* Wait/do not wait for pipe/mutex to clarify */ 1950 CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), 1951 1952 /* Set the protocol used when curl is given a URL without a protocol */ 1953 CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), 1954 1955 /* Set stream weight, 1 - 256 (default is 16) */ 1956 CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), 1957 1958 /* Set stream dependency on another CURL handle */ 1959 CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), 1960 1961 /* Set E-xclusive stream dependency on another CURL handle */ 1962 CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), 1963 1964 /* Do not send any tftp option requests to the server */ 1965 CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), 1966 1967 /* Linked-list of host:port:connect-to-host:connect-to-port, 1968 overrides the URL's host:port (only for the network layer) */ 1969 CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), 1970 1971 /* Set TCP Fast Open */ 1972 CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), 1973 1974 /* Continue to send data if the server responds early with an 1975 * HTTP status code >= 300 */ 1976 CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), 1977 1978 /* The CApath or CAfile used to validate the proxy certificate 1979 this option is used only if PROXY_SSL_VERIFYPEER is true */ 1980 CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), 1981 1982 /* The CApath directory used to validate the proxy certificate 1983 this option is used only if PROXY_SSL_VERIFYPEER is true */ 1984 CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), 1985 1986 /* Set if we should verify the proxy in ssl handshake, 1987 set 1 to verify. */ 1988 CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), 1989 1990 /* Set if we should verify the Common name from the proxy certificate in ssl 1991 * handshake, set 1 to check existence, 2 to ensure that it matches 1992 * the provided hostname. */ 1993 CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), 1994 1995 /* What version to specifically try to use for proxy. 1996 See CURL_SSLVERSION defines below. */ 1997 CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), 1998 1999 /* Set a username for authenticated TLS for proxy */ 2000 CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), 2001 2002 /* Set a password for authenticated TLS for proxy */ 2003 CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), 2004 2005 /* Set authentication type for authenticated TLS for proxy */ 2006 CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), 2007 2008 /* name of the file keeping your private SSL-certificate for proxy */ 2009 CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), 2010 2011 /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for 2012 proxy */ 2013 CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), 2014 2015 /* name of the file keeping your private SSL-key for proxy */ 2016 CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), 2017 2018 /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for 2019 proxy */ 2020 CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), 2021 2022 /* password for the SSL private key for proxy */ 2023 CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), 2024 2025 /* Specify which TLS 1.2 (1.1, 1.0) ciphers to use for proxy */ 2026 CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), 2027 2028 /* CRL file for proxy */ 2029 CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), 2030 2031 /* Enable/disable specific SSL features with a bitmask for proxy, see 2032 CURLSSLOPT_* */ 2033 CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), 2034 2035 /* Name of pre proxy to use. */ 2036 CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), 2037 2038 /* The public key in DER form used to validate the proxy public key 2039 this option is used only if PROXY_SSL_VERIFYPEER is true */ 2040 CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), 2041 2042 /* Path to an abstract Unix domain socket */ 2043 CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), 2044 2045 /* Suppress proxy CONNECT response headers from user callbacks */ 2046 CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), 2047 2048 /* The request target, instead of extracted from the URL */ 2049 CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), 2050 2051 /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ 2052 CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), 2053 2054 /* Enable/disable SSH compression */ 2055 CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), 2056 2057 /* Post MIME data. */ 2058 CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), 2059 2060 /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of 2061 seconds since 1 Jan 1970. */ 2062 CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), 2063 2064 /* Head start in milliseconds to give happy eyeballs. */ 2065 CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), 2066 2067 /* Function that will be called before a resolver request is made */ 2068 CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), 2069 2070 /* User data to pass to the resolver start callback. */ 2071 CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), 2072 2073 /* send HAProxy PROXY protocol header? */ 2074 CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), 2075 2076 /* shuffle addresses before use when DNS returns multiple */ 2077 CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), 2078 2079 /* Specify which TLS 1.3 ciphers suites to use */ 2080 CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), 2081 CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), 2082 2083 /* Disallow specifying username/login in URL. */ 2084 CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), 2085 2086 /* DNS-over-HTTPS URL */ 2087 CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), 2088 2089 /* Preferred buffer size to use for uploads */ 2090 CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), 2091 2092 /* Time in ms between connection upkeep calls for long-lived connections. */ 2093 CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), 2094 2095 /* Specify URL using CURL URL API. */ 2096 CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), 2097 2098 /* add trailing data just after no more data is available */ 2099 CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), 2100 2101 /* pointer to be passed to HTTP_TRAILER_FUNCTION */ 2102 CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), 2103 2104 /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ 2105 CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), 2106 2107 /* alt-svc control bitmask */ 2108 CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), 2109 2110 /* alt-svc cache filename to possibly read from/write to */ 2111 CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), 2112 2113 /* maximum age (idle time) of a connection to consider it for reuse 2114 * (in seconds) */ 2115 CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), 2116 2117 /* SASL authorization identity */ 2118 CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), 2119 2120 /* allow RCPT TO command to fail for some recipients */ 2121 CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), 2122 2123 /* the private SSL-certificate as a "blob" */ 2124 CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), 2125 CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), 2126 CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), 2127 CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), 2128 CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), 2129 2130 /* Issuer certificate for proxy */ 2131 CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), 2132 CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), 2133 2134 /* the EC curves requested by the TLS client (RFC 8422, 5.1); 2135 * OpenSSL support via 'set_groups'/'set_curves': 2136 * https://docs.openssl.org/master/man3/SSL_CTX_set1_curves/ 2137 */ 2138 CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), 2139 2140 /* HSTS bitmask */ 2141 CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), 2142 /* HSTS filename */ 2143 CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), 2144 2145 /* HSTS read callback */ 2146 CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), 2147 CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), 2148 2149 /* HSTS write callback */ 2150 CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), 2151 CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), 2152 2153 /* Parameters for V4 signature */ 2154 CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), 2155 2156 /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ 2157 CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), 2158 2159 /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ 2160 CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), 2161 2162 /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ 2163 CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), 2164 2165 /* The CA certificates as "blob" used to validate the peer certificate 2166 this option is used only if SSL_VERIFYPEER is true */ 2167 CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), 2168 2169 /* The CA certificates as "blob" used to validate the proxy certificate 2170 this option is used only if PROXY_SSL_VERIFYPEER is true */ 2171 CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), 2172 2173 /* used by scp/sftp to verify the host's public key */ 2174 CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), 2175 2176 /* Function that will be called immediately before the initial request 2177 is made on a connection (after any protocol negotiation step). */ 2178 CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), 2179 2180 /* Data passed to the CURLOPT_PREREQFUNCTION callback */ 2181 CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), 2182 2183 /* maximum age (since creation) of a connection to consider it for reuse 2184 * (in seconds) */ 2185 CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), 2186 2187 /* Set MIME option flags. */ 2188 CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), 2189 2190 /* set the SSH host key callback, must point to a curl_sshkeycallback 2191 function */ 2192 CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), 2193 2194 /* set the SSH host key callback custom pointer */ 2195 CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), 2196 2197 /* specify which protocols that are allowed to be used for the transfer, 2198 which thus helps the app which takes URLs from users or other external 2199 inputs and want to restrict what protocol(s) to deal with. Defaults to 2200 all built-in protocols. */ 2201 CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), 2202 2203 /* specify which protocols that libcurl is allowed to follow directs to */ 2204 CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), 2205 2206 /* WebSockets options */ 2207 CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), 2208 2209 /* CA cache timeout */ 2210 CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), 2211 2212 /* Can leak things, gonna exit() soon */ 2213 CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), 2214 2215 /* set a specific client IP for HAProxy PROXY protocol header? */ 2216 CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), 2217 2218 /* millisecond version */ 2219 CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT_MS, CURLOPTTYPE_LONG, 324), 2220 2221 /* set ECH configuration */ 2222 CURLOPT(CURLOPT_ECH, CURLOPTTYPE_STRINGPOINT, 325), 2223 2224 /* maximum number of keepalive probes (Linux, *BSD, macOS, etc.) */ 2225 CURLOPT(CURLOPT_TCP_KEEPCNT, CURLOPTTYPE_LONG, 326), 2226 2227 CURLOPT_LASTENTRY /* the last unused */ 2228 } CURLoption; 2229 2230 #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all 2231 the obsolete stuff removed! */ 2232 2233 /* Backwards compatibility with older names */ 2234 /* These are scheduled to disappear by 2011 */ 2235 2236 /* This was added in version 7.19.1 */ 2237 #define CURLOPT_POST301 CURLOPT_POSTREDIR 2238 2239 /* These are scheduled to disappear by 2009 */ 2240 2241 /* The following were added in 7.17.0 */ 2242 #define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD 2243 #define CURLOPT_FTPAPPEND CURLOPT_APPEND 2244 #define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY 2245 #define CURLOPT_FTP_SSL CURLOPT_USE_SSL 2246 2247 /* The following were added earlier */ 2248 2249 #define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD 2250 #define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL 2251 2252 /* */ 2253 #define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT 2254 2255 /* Added in 8.2.0 */ 2256 #define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS 2257 2258 #else 2259 /* This is set if CURL_NO_OLDIES is defined at compile-time */ 2260 #undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ 2261 #endif 2262 2263 2264 /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host 2265 name resolves addresses using more than one IP protocol version, this 2266 option might be handy to force libcurl to use a specific IP version. */ 2267 #define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP 2268 versions that your system allows */ 2269 #define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ 2270 #define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ 2271 2272 /* Convenient "aliases" */ 2273 #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER 2274 2275 /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ 2276 enum { 2277 CURL_HTTP_VERSION_NONE, /* setting this means we do not care, and that we 2278 would like the library to choose the best 2279 possible for us! */ 2280 CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ 2281 CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ 2282 CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ 2283 CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ 2284 CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 2285 Upgrade */ 2286 CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if 2287 needed. For HTTPS only. For HTTP, this option 2288 makes libcurl return error. */ 2289 CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS 2290 only. For HTTP, this makes libcurl 2291 return error. */ 2292 2293 CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ 2294 }; 2295 2296 /* Convenience definition simple because the name of the version is HTTP/2 and 2297 not 2.0. The 2_0 version of the enum name was set while the version was 2298 still planned to be 2.0 and we stick to it for compatibility. */ 2299 #define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 2300 2301 /* 2302 * Public API enums for RTSP requests 2303 */ 2304 enum { 2305 CURL_RTSPREQ_NONE, /* first in list */ 2306 CURL_RTSPREQ_OPTIONS, 2307 CURL_RTSPREQ_DESCRIBE, 2308 CURL_RTSPREQ_ANNOUNCE, 2309 CURL_RTSPREQ_SETUP, 2310 CURL_RTSPREQ_PLAY, 2311 CURL_RTSPREQ_PAUSE, 2312 CURL_RTSPREQ_TEARDOWN, 2313 CURL_RTSPREQ_GET_PARAMETER, 2314 CURL_RTSPREQ_SET_PARAMETER, 2315 CURL_RTSPREQ_RECORD, 2316 CURL_RTSPREQ_RECEIVE, 2317 CURL_RTSPREQ_LAST /* last in list */ 2318 }; 2319 2320 /* These enums are for use with the CURLOPT_NETRC option. */ 2321 enum CURL_NETRC_OPTION { 2322 CURL_NETRC_IGNORED, /* The .netrc will never be read. 2323 * This is the default. */ 2324 CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred 2325 * to one in the .netrc. */ 2326 CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. 2327 * Unless one is set programmatically, the .netrc 2328 * will be queried. */ 2329 CURL_NETRC_LAST 2330 }; 2331 2332 #define CURL_SSLVERSION_DEFAULT 0 2333 #define CURL_SSLVERSION_TLSv1 1 /* TLS 1.x */ 2334 #define CURL_SSLVERSION_SSLv2 2 2335 #define CURL_SSLVERSION_SSLv3 3 2336 #define CURL_SSLVERSION_TLSv1_0 4 2337 #define CURL_SSLVERSION_TLSv1_1 5 2338 #define CURL_SSLVERSION_TLSv1_2 6 2339 #define CURL_SSLVERSION_TLSv1_3 7 2340 2341 #define CURL_SSLVERSION_LAST 8 /* never use, keep last */ 2342 2343 #define CURL_SSLVERSION_MAX_NONE 0 2344 #define CURL_SSLVERSION_MAX_DEFAULT (CURL_SSLVERSION_TLSv1 << 16) 2345 #define CURL_SSLVERSION_MAX_TLSv1_0 (CURL_SSLVERSION_TLSv1_0 << 16) 2346 #define CURL_SSLVERSION_MAX_TLSv1_1 (CURL_SSLVERSION_TLSv1_1 << 16) 2347 #define CURL_SSLVERSION_MAX_TLSv1_2 (CURL_SSLVERSION_TLSv1_2 << 16) 2348 #define CURL_SSLVERSION_MAX_TLSv1_3 (CURL_SSLVERSION_TLSv1_3 << 16) 2349 2350 /* never use, keep last */ 2351 #define CURL_SSLVERSION_MAX_LAST (CURL_SSLVERSION_LAST << 16) 2352 2353 enum CURL_TLSAUTH { 2354 CURL_TLSAUTH_NONE, 2355 CURL_TLSAUTH_SRP, 2356 CURL_TLSAUTH_LAST /* never use, keep last */ 2357 }; 2358 2359 /* symbols to use with CURLOPT_POSTREDIR. 2360 CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 2361 can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 2362 | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ 2363 2364 #define CURL_REDIR_GET_ALL 0 2365 #define CURL_REDIR_POST_301 1 2366 #define CURL_REDIR_POST_302 2 2367 #define CURL_REDIR_POST_303 4 2368 #define CURL_REDIR_POST_ALL \ 2369 (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) 2370 2371 typedef enum { 2372 CURL_TIMECOND_NONE, 2373 2374 CURL_TIMECOND_IFMODSINCE, 2375 CURL_TIMECOND_IFUNMODSINCE, 2376 CURL_TIMECOND_LASTMOD, 2377 2378 CURL_TIMECOND_LAST 2379 } curl_TimeCond; 2380 2381 /* Special size_t value signaling a null-terminated string. */ 2382 #define CURL_ZERO_TERMINATED ((size_t) -1) 2383 2384 /* curl_strequal() and curl_strnequal() are subject for removal in a future 2385 release */ 2386 CURL_EXTERN int curl_strequal(const char *s1, const char *s2); 2387 CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); 2388 2389 /* Mime/form handling support. */ 2390 typedef struct curl_mime curl_mime; /* Mime context. */ 2391 typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ 2392 2393 /* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ 2394 #define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ 2395 2396 /* 2397 * NAME curl_mime_init() 2398 * 2399 * DESCRIPTION 2400 * 2401 * Create a mime context and return its handle. The easy parameter is the 2402 * target handle. 2403 */ 2404 CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); 2405 2406 /* 2407 * NAME curl_mime_free() 2408 * 2409 * DESCRIPTION 2410 * 2411 * release a mime handle and its substructures. 2412 */ 2413 CURL_EXTERN void curl_mime_free(curl_mime *mime); 2414 2415 /* 2416 * NAME curl_mime_addpart() 2417 * 2418 * DESCRIPTION 2419 * 2420 * Append a new empty part to the given mime context and return a handle to 2421 * the created part. 2422 */ 2423 CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); 2424 2425 /* 2426 * NAME curl_mime_name() 2427 * 2428 * DESCRIPTION 2429 * 2430 * Set mime/form part name. 2431 */ 2432 CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); 2433 2434 /* 2435 * NAME curl_mime_filename() 2436 * 2437 * DESCRIPTION 2438 * 2439 * Set mime part remote filename. 2440 */ 2441 CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, 2442 const char *filename); 2443 2444 /* 2445 * NAME curl_mime_type() 2446 * 2447 * DESCRIPTION 2448 * 2449 * Set mime part type. 2450 */ 2451 CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); 2452 2453 /* 2454 * NAME curl_mime_encoder() 2455 * 2456 * DESCRIPTION 2457 * 2458 * Set mime data transfer encoder. 2459 */ 2460 CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, 2461 const char *encoding); 2462 2463 /* 2464 * NAME curl_mime_data() 2465 * 2466 * DESCRIPTION 2467 * 2468 * Set mime part data source from memory data, 2469 */ 2470 CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, 2471 const char *data, size_t datasize); 2472 2473 /* 2474 * NAME curl_mime_filedata() 2475 * 2476 * DESCRIPTION 2477 * 2478 * Set mime part data source from named file. 2479 */ 2480 CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, 2481 const char *filename); 2482 2483 /* 2484 * NAME curl_mime_data_cb() 2485 * 2486 * DESCRIPTION 2487 * 2488 * Set mime part data source from callback function. 2489 */ 2490 CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, 2491 curl_off_t datasize, 2492 curl_read_callback readfunc, 2493 curl_seek_callback seekfunc, 2494 curl_free_callback freefunc, 2495 void *arg); 2496 2497 /* 2498 * NAME curl_mime_subparts() 2499 * 2500 * DESCRIPTION 2501 * 2502 * Set mime part data source from subparts. 2503 */ 2504 CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, 2505 curl_mime *subparts); 2506 /* 2507 * NAME curl_mime_headers() 2508 * 2509 * DESCRIPTION 2510 * 2511 * Set mime part headers. 2512 */ 2513 CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, 2514 struct curl_slist *headers, 2515 int take_ownership); 2516 2517 typedef enum { 2518 /********* the first one is unused ************/ 2519 CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), 2520 CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), 2521 CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), 2522 CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), 2523 CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2524 CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2525 CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2526 CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), 2527 CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), 2528 CURLFORM_OBSOLETE, 2529 CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), 2530 2531 CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), 2532 CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2533 CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2534 2535 CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), 2536 CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), 2537 CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), 2538 CURLFORM_END, 2539 CURLFORM_OBSOLETE2, 2540 2541 CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), 2542 CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ 2543 CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), 2544 2545 CURLFORM_LASTENTRY /* the last unused */ 2546 } CURLformoption; 2547 2548 /* structure to be used as parameter for CURLFORM_ARRAY */ 2549 struct curl_forms { 2550 CURLformoption option; 2551 const char *value; 2552 }; 2553 2554 /* use this for multipart formpost building */ 2555 /* Returns code for curl_formadd() 2556 * 2557 * Returns: 2558 * CURL_FORMADD_OK on success 2559 * CURL_FORMADD_MEMORY if the FormInfo allocation fails 2560 * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form 2561 * CURL_FORMADD_NULL if a null pointer was given for a char 2562 * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed 2563 * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used 2564 * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) 2565 * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated 2566 * CURL_FORMADD_MEMORY if some allocation for string copying failed. 2567 * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array 2568 * 2569 ***************************************************************************/ 2570 typedef enum { 2571 CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ 2572 2573 CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), 2574 CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), 2575 CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), 2576 CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), 2577 CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), 2578 CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), 2579 /* libcurl was built with form api disabled */ 2580 CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), 2581 2582 CURL_FORMADD_LAST /* last */ 2583 } CURLFORMcode; 2584 2585 /* 2586 * NAME curl_formadd() 2587 * 2588 * DESCRIPTION 2589 * 2590 * Pretty advanced function for building multi-part formposts. Each invoke 2591 * adds one part that together construct a full post. Then use 2592 * CURLOPT_HTTPPOST to send it off to libcurl. 2593 */ 2594 CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") 2595 curl_formadd(struct curl_httppost **httppost, 2596 struct curl_httppost **last_post, 2597 ...); 2598 2599 /* 2600 * callback function for curl_formget() 2601 * The void *arg pointer will be the one passed as second argument to 2602 * curl_formget(). 2603 * The character buffer passed to it must not be freed. 2604 * Should return the buffer length passed to it as the argument "len" on 2605 * success. 2606 */ 2607 typedef size_t (*curl_formget_callback)(void *arg, const char *buf, 2608 size_t len); 2609 2610 /* 2611 * NAME curl_formget() 2612 * 2613 * DESCRIPTION 2614 * 2615 * Serialize a curl_httppost struct built with curl_formadd(). 2616 * Accepts a void pointer as second argument which will be passed to 2617 * the curl_formget_callback function. 2618 * Returns 0 on success. 2619 */ 2620 CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") 2621 curl_formget(struct curl_httppost *form, void *arg, 2622 curl_formget_callback append); 2623 /* 2624 * NAME curl_formfree() 2625 * 2626 * DESCRIPTION 2627 * 2628 * Free a multipart formpost previously built with curl_formadd(). 2629 */ 2630 CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") 2631 curl_formfree(struct curl_httppost *form); 2632 2633 /* 2634 * NAME curl_getenv() 2635 * 2636 * DESCRIPTION 2637 * 2638 * Returns a malloc()'ed string that MUST be curl_free()ed after usage is 2639 * complete. DEPRECATED - see lib/README.curlx 2640 */ 2641 CURL_EXTERN char *curl_getenv(const char *variable); 2642 2643 /* 2644 * NAME curl_version() 2645 * 2646 * DESCRIPTION 2647 * 2648 * Returns a static ASCII string of the libcurl version. 2649 */ 2650 CURL_EXTERN char *curl_version(void); 2651 2652 /* 2653 * NAME curl_easy_escape() 2654 * 2655 * DESCRIPTION 2656 * 2657 * Escapes URL strings (converts all letters consider illegal in URLs to their 2658 * %XX versions). This function returns a new allocated string or NULL if an 2659 * error occurred. 2660 */ 2661 CURL_EXTERN char *curl_easy_escape(CURL *handle, 2662 const char *string, 2663 int length); 2664 2665 /* the previous version: */ 2666 CURL_EXTERN char *curl_escape(const char *string, 2667 int length); 2668 2669 2670 /* 2671 * NAME curl_easy_unescape() 2672 * 2673 * DESCRIPTION 2674 * 2675 * Unescapes URL encoding in strings (converts all %XX codes to their 8bit 2676 * versions). This function returns a new allocated string or NULL if an error 2677 * occurred. 2678 * Conversion Note: On non-ASCII platforms the ASCII %XX codes are 2679 * converted into the host encoding. 2680 */ 2681 CURL_EXTERN char *curl_easy_unescape(CURL *handle, 2682 const char *string, 2683 int length, 2684 int *outlength); 2685 2686 /* the previous version */ 2687 CURL_EXTERN char *curl_unescape(const char *string, 2688 int length); 2689 2690 /* 2691 * NAME curl_free() 2692 * 2693 * DESCRIPTION 2694 * 2695 * Provided for de-allocation in the same translation unit that did the 2696 * allocation. Added in libcurl 7.10 2697 */ 2698 CURL_EXTERN void curl_free(void *p); 2699 2700 /* 2701 * NAME curl_global_init() 2702 * 2703 * DESCRIPTION 2704 * 2705 * curl_global_init() should be invoked exactly once for each application that 2706 * uses libcurl and before any call of other libcurl functions. 2707 2708 * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the 2709 * curl_version_info_data.features flag (fetch by curl_version_info()). 2710 2711 */ 2712 CURL_EXTERN CURLcode curl_global_init(long flags); 2713 2714 /* 2715 * NAME curl_global_init_mem() 2716 * 2717 * DESCRIPTION 2718 * 2719 * curl_global_init() or curl_global_init_mem() should be invoked exactly once 2720 * for each application that uses libcurl. This function can be used to 2721 * initialize libcurl and set user defined memory management callback 2722 * functions. Users can implement memory management routines to check for 2723 * memory leaks, check for mis-use of the curl library etc. User registered 2724 * callback routines will be invoked by this library instead of the system 2725 * memory management routines like malloc, free etc. 2726 */ 2727 CURL_EXTERN CURLcode curl_global_init_mem(long flags, 2728 curl_malloc_callback m, 2729 curl_free_callback f, 2730 curl_realloc_callback r, 2731 curl_strdup_callback s, 2732 curl_calloc_callback c); 2733 2734 /* 2735 * NAME curl_global_cleanup() 2736 * 2737 * DESCRIPTION 2738 * 2739 * curl_global_cleanup() should be invoked exactly once for each application 2740 * that uses libcurl 2741 */ 2742 CURL_EXTERN void curl_global_cleanup(void); 2743 2744 /* 2745 * NAME curl_global_trace() 2746 * 2747 * DESCRIPTION 2748 * 2749 * curl_global_trace() can be invoked at application start to 2750 * configure which components in curl should participate in tracing. 2751 2752 * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the 2753 * curl_version_info_data.features flag (fetch by curl_version_info()). 2754 2755 */ 2756 CURL_EXTERN CURLcode curl_global_trace(const char *config); 2757 2758 /* linked-list structure for the CURLOPT_QUOTE option (and other) */ 2759 struct curl_slist { 2760 char *data; 2761 struct curl_slist *next; 2762 }; 2763 2764 /* 2765 * NAME curl_global_sslset() 2766 * 2767 * DESCRIPTION 2768 * 2769 * When built with multiple SSL backends, curl_global_sslset() allows to 2770 * choose one. This function can only be called once, and it must be called 2771 * *before* curl_global_init(). 2772 * 2773 * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The 2774 * backend can also be specified via the name parameter (passing -1 as id). 2775 * If both id and name are specified, the name will be ignored. If neither id 2776 * nor name are specified, the function will fail with 2777 * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the 2778 * NULL-terminated list of available backends. 2779 * 2780 * Upon success, the function returns CURLSSLSET_OK. 2781 * 2782 * If the specified SSL backend is not available, the function returns 2783 * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated 2784 * list of available SSL backends. 2785 * 2786 * The SSL backend can be set only once. If it has already been set, a 2787 * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. 2788 */ 2789 2790 struct curl_ssl_backend { 2791 curl_sslbackend id; 2792 const char *name; 2793 }; 2794 typedef struct curl_ssl_backend curl_ssl_backend; 2795 2796 typedef enum { 2797 CURLSSLSET_OK = 0, 2798 CURLSSLSET_UNKNOWN_BACKEND, 2799 CURLSSLSET_TOO_LATE, 2800 CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ 2801 } CURLsslset; 2802 2803 CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, 2804 const curl_ssl_backend ***avail); 2805 2806 /* 2807 * NAME curl_slist_append() 2808 * 2809 * DESCRIPTION 2810 * 2811 * Appends a string to a linked list. If no list exists, it will be created 2812 * first. Returns the new list, after appending. 2813 */ 2814 CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, 2815 const char *data); 2816 2817 /* 2818 * NAME curl_slist_free_all() 2819 * 2820 * DESCRIPTION 2821 * 2822 * free a previously built curl_slist. 2823 */ 2824 CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); 2825 2826 /* 2827 * NAME curl_getdate() 2828 * 2829 * DESCRIPTION 2830 * 2831 * Returns the time, in seconds since 1 Jan 1970 of the time string given in 2832 * the first argument. The time argument in the second parameter is unused 2833 * and should be set to NULL. 2834 */ 2835 CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); 2836 2837 /* info about the certificate chain, for SSL backends that support it. Asked 2838 for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ 2839 struct curl_certinfo { 2840 int num_of_certs; /* number of certificates with information */ 2841 struct curl_slist **certinfo; /* for each index in this array, there is a 2842 linked list with textual information for a 2843 certificate in the format "name:content". 2844 eg "Subject:foo", "Issuer:bar", etc. */ 2845 }; 2846 2847 /* Information about the SSL library used and the respective internal SSL 2848 handle, which can be used to obtain further information regarding the 2849 connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ 2850 struct curl_tlssessioninfo { 2851 curl_sslbackend backend; 2852 void *internals; 2853 }; 2854 2855 #define CURLINFO_STRING 0x100000 2856 #define CURLINFO_LONG 0x200000 2857 #define CURLINFO_DOUBLE 0x300000 2858 #define CURLINFO_SLIST 0x400000 2859 #define CURLINFO_PTR 0x400000 /* same as SLIST */ 2860 #define CURLINFO_SOCKET 0x500000 2861 #define CURLINFO_OFF_T 0x600000 2862 #define CURLINFO_MASK 0x0fffff 2863 #define CURLINFO_TYPEMASK 0xf00000 2864 2865 typedef enum { 2866 CURLINFO_NONE, /* first, never use this */ 2867 CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, 2868 CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, 2869 CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, 2870 CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, 2871 CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, 2872 CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, 2873 CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") 2874 = CURLINFO_DOUBLE + 7, 2875 CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, 2876 CURLINFO_SIZE_DOWNLOAD 2877 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") 2878 = CURLINFO_DOUBLE + 8, 2879 CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, 2880 CURLINFO_SPEED_DOWNLOAD 2881 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") 2882 = CURLINFO_DOUBLE + 9, 2883 CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, 2884 CURLINFO_SPEED_UPLOAD 2885 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") 2886 = CURLINFO_DOUBLE + 10, 2887 CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, 2888 CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, 2889 CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, 2890 CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, 2891 CURLINFO_FILETIME = CURLINFO_LONG + 14, 2892 CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, 2893 CURLINFO_CONTENT_LENGTH_DOWNLOAD 2894 CURL_DEPRECATED(7.55.0, 2895 "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") 2896 = CURLINFO_DOUBLE + 15, 2897 CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, 2898 CURLINFO_CONTENT_LENGTH_UPLOAD 2899 CURL_DEPRECATED(7.55.0, 2900 "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") 2901 = CURLINFO_DOUBLE + 16, 2902 CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, 2903 CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, 2904 CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, 2905 CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, 2906 CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, 2907 CURLINFO_PRIVATE = CURLINFO_STRING + 21, 2908 CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, 2909 CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, 2910 CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, 2911 CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, 2912 CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, 2913 CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, 2914 CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, 2915 CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") 2916 = CURLINFO_LONG + 29, 2917 CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, 2918 CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, 2919 CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, 2920 CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, 2921 CURLINFO_CERTINFO = CURLINFO_PTR + 34, 2922 CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, 2923 CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, 2924 CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, 2925 CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, 2926 CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, 2927 CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, 2928 CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, 2929 CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, 2930 CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") 2931 = CURLINFO_PTR + 43, 2932 CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, 2933 CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, 2934 CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, 2935 CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, 2936 CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") 2937 = CURLINFO_LONG + 48, 2938 CURLINFO_SCHEME = CURLINFO_STRING + 49, 2939 CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, 2940 CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, 2941 CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, 2942 CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, 2943 CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, 2944 CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, 2945 CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, 2946 CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, 2947 CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, 2948 CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, 2949 CURLINFO_REFERER = CURLINFO_STRING + 60, 2950 CURLINFO_CAINFO = CURLINFO_STRING + 61, 2951 CURLINFO_CAPATH = CURLINFO_STRING + 62, 2952 CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, 2953 CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, 2954 CURLINFO_QUEUE_TIME_T = CURLINFO_OFF_T + 65, 2955 CURLINFO_USED_PROXY = CURLINFO_LONG + 66, 2956 CURLINFO_POSTTRANSFER_TIME_T = CURLINFO_OFF_T + 67, 2957 CURLINFO_LASTONE = 67 2958 } CURLINFO; 2959 2960 /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as 2961 CURLINFO_HTTP_CODE */ 2962 #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE 2963 2964 typedef enum { 2965 CURLCLOSEPOLICY_NONE, /* first, never use this */ 2966 2967 CURLCLOSEPOLICY_OLDEST, 2968 CURLCLOSEPOLICY_LEAST_RECENTLY_USED, 2969 CURLCLOSEPOLICY_LEAST_TRAFFIC, 2970 CURLCLOSEPOLICY_SLOWEST, 2971 CURLCLOSEPOLICY_CALLBACK, 2972 2973 CURLCLOSEPOLICY_LAST /* last, never use this */ 2974 } curl_closepolicy; 2975 2976 #define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ 2977 #define CURL_GLOBAL_WIN32 (1<<1) 2978 #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) 2979 #define CURL_GLOBAL_NOTHING 0 2980 #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL 2981 #define CURL_GLOBAL_ACK_EINTR (1<<2) 2982 2983 2984 /***************************************************************************** 2985 * Setup defines, protos etc for the sharing stuff. 2986 */ 2987 2988 /* Different data locks for a single share */ 2989 typedef enum { 2990 CURL_LOCK_DATA_NONE = 0, 2991 /* CURL_LOCK_DATA_SHARE is used internally to say that 2992 * the locking is just made to change the internal state of the share 2993 * itself. 2994 */ 2995 CURL_LOCK_DATA_SHARE, 2996 CURL_LOCK_DATA_COOKIE, 2997 CURL_LOCK_DATA_DNS, 2998 CURL_LOCK_DATA_SSL_SESSION, 2999 CURL_LOCK_DATA_CONNECT, 3000 CURL_LOCK_DATA_PSL, 3001 CURL_LOCK_DATA_HSTS, 3002 CURL_LOCK_DATA_LAST 3003 } curl_lock_data; 3004 3005 /* Different lock access types */ 3006 typedef enum { 3007 CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ 3008 CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ 3009 CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ 3010 CURL_LOCK_ACCESS_LAST /* never use */ 3011 } curl_lock_access; 3012 3013 typedef void (*curl_lock_function)(CURL *handle, 3014 curl_lock_data data, 3015 curl_lock_access locktype, 3016 void *userptr); 3017 typedef void (*curl_unlock_function)(CURL *handle, 3018 curl_lock_data data, 3019 void *userptr); 3020 3021 3022 typedef enum { 3023 CURLSHE_OK, /* all is fine */ 3024 CURLSHE_BAD_OPTION, /* 1 */ 3025 CURLSHE_IN_USE, /* 2 */ 3026 CURLSHE_INVALID, /* 3 */ 3027 CURLSHE_NOMEM, /* 4 out of memory */ 3028 CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ 3029 CURLSHE_LAST /* never use */ 3030 } CURLSHcode; 3031 3032 typedef enum { 3033 CURLSHOPT_NONE, /* do not use */ 3034 CURLSHOPT_SHARE, /* specify a data type to share */ 3035 CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ 3036 CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ 3037 CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ 3038 CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock 3039 callback functions */ 3040 CURLSHOPT_LAST /* never use */ 3041 } CURLSHoption; 3042 3043 CURL_EXTERN CURLSH *curl_share_init(void); 3044 CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, 3045 ...); 3046 CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); 3047 3048 /**************************************************************************** 3049 * Structures for querying information about the curl library at runtime. 3050 */ 3051 3052 typedef enum { 3053 CURLVERSION_FIRST, /* 7.10 */ 3054 CURLVERSION_SECOND, /* 7.11.1 */ 3055 CURLVERSION_THIRD, /* 7.12.0 */ 3056 CURLVERSION_FOURTH, /* 7.16.1 */ 3057 CURLVERSION_FIFTH, /* 7.57.0 */ 3058 CURLVERSION_SIXTH, /* 7.66.0 */ 3059 CURLVERSION_SEVENTH, /* 7.70.0 */ 3060 CURLVERSION_EIGHTH, /* 7.72.0 */ 3061 CURLVERSION_NINTH, /* 7.75.0 */ 3062 CURLVERSION_TENTH, /* 7.77.0 */ 3063 CURLVERSION_ELEVENTH, /* 7.87.0 */ 3064 CURLVERSION_TWELFTH, /* 8.8.0 */ 3065 CURLVERSION_LAST /* never actually use this */ 3066 } CURLversion; 3067 3068 /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by 3069 basically all programs ever that want to get version information. It is 3070 meant to be a built-in version number for what kind of struct the caller 3071 expects. If the struct ever changes, we redefine the NOW to another enum 3072 from above. */ 3073 #define CURLVERSION_NOW CURLVERSION_TWELFTH 3074 3075 struct curl_version_info_data { 3076 CURLversion age; /* age of the returned struct */ 3077 const char *version; /* LIBCURL_VERSION */ 3078 unsigned int version_num; /* LIBCURL_VERSION_NUM */ 3079 const char *host; /* OS/host/cpu/machine when configured */ 3080 int features; /* bitmask, see defines below */ 3081 const char *ssl_version; /* human readable string */ 3082 long ssl_version_num; /* not used anymore, always 0 */ 3083 const char *libz_version; /* human readable string */ 3084 /* protocols is terminated by an entry with a NULL protoname */ 3085 const char * const *protocols; 3086 3087 /* The fields below this were added in CURLVERSION_SECOND */ 3088 const char *ares; 3089 int ares_num; 3090 3091 /* This field was added in CURLVERSION_THIRD */ 3092 const char *libidn; 3093 3094 /* These field were added in CURLVERSION_FOURTH */ 3095 3096 /* Same as '_libiconv_version' if built with HAVE_ICONV */ 3097 int iconv_ver_num; 3098 3099 const char *libssh_version; /* human readable string */ 3100 3101 /* These fields were added in CURLVERSION_FIFTH */ 3102 unsigned int brotli_ver_num; /* Numeric Brotli version 3103 (MAJOR << 24) | (MINOR << 12) | PATCH */ 3104 const char *brotli_version; /* human readable string. */ 3105 3106 /* These fields were added in CURLVERSION_SIXTH */ 3107 unsigned int nghttp2_ver_num; /* Numeric nghttp2 version 3108 (MAJOR << 16) | (MINOR << 8) | PATCH */ 3109 const char *nghttp2_version; /* human readable string. */ 3110 const char *quic_version; /* human readable quic (+ HTTP/3) library + 3111 version or NULL */ 3112 3113 /* These fields were added in CURLVERSION_SEVENTH */ 3114 const char *cainfo; /* the built-in default CURLOPT_CAINFO, might 3115 be NULL */ 3116 const char *capath; /* the built-in default CURLOPT_CAPATH, might 3117 be NULL */ 3118 3119 /* These fields were added in CURLVERSION_EIGHTH */ 3120 unsigned int zstd_ver_num; /* Numeric Zstd version 3121 (MAJOR << 24) | (MINOR << 12) | PATCH */ 3122 const char *zstd_version; /* human readable string. */ 3123 3124 /* These fields were added in CURLVERSION_NINTH */ 3125 const char *hyper_version; /* human readable string. */ 3126 3127 /* These fields were added in CURLVERSION_TENTH */ 3128 const char *gsasl_version; /* human readable string. */ 3129 3130 /* These fields were added in CURLVERSION_ELEVENTH */ 3131 /* feature_names is terminated by an entry with a NULL feature name */ 3132 const char * const *feature_names; 3133 3134 /* These fields were added in CURLVERSION_TWELFTH */ 3135 const char *rtmp_version; /* human readable string. */ 3136 }; 3137 typedef struct curl_version_info_data curl_version_info_data; 3138 3139 #define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ 3140 #define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported 3141 (deprecated) */ 3142 #define CURL_VERSION_SSL (1<<2) /* SSL options are present */ 3143 #define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ 3144 #define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ 3145 #define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported 3146 (deprecated) */ 3147 #define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ 3148 #define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ 3149 #define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ 3150 #define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ 3151 #define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are 3152 supported */ 3153 #define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ 3154 #define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ 3155 #define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ 3156 #define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ 3157 #define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper 3158 is supported */ 3159 #define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ 3160 #define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ 3161 #define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ 3162 #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ 3163 #define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used 3164 for cookie domain verification */ 3165 #define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ 3166 #define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ 3167 #define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ 3168 #define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ 3169 #define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ 3170 #define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ 3171 #define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ 3172 #define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ 3173 #define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ 3174 #define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ 3175 3176 /* 3177 * NAME curl_version_info() 3178 * 3179 * DESCRIPTION 3180 * 3181 * This function returns a pointer to a static copy of the version info 3182 * struct. See above. 3183 */ 3184 CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); 3185 3186 /* 3187 * NAME curl_easy_strerror() 3188 * 3189 * DESCRIPTION 3190 * 3191 * The curl_easy_strerror function may be used to turn a CURLcode value 3192 * into the equivalent human readable error string. This is useful 3193 * for printing meaningful error messages. 3194 */ 3195 CURL_EXTERN const char *curl_easy_strerror(CURLcode); 3196 3197 /* 3198 * NAME curl_share_strerror() 3199 * 3200 * DESCRIPTION 3201 * 3202 * The curl_share_strerror function may be used to turn a CURLSHcode value 3203 * into the equivalent human readable error string. This is useful 3204 * for printing meaningful error messages. 3205 */ 3206 CURL_EXTERN const char *curl_share_strerror(CURLSHcode); 3207 3208 /* 3209 * NAME curl_easy_pause() 3210 * 3211 * DESCRIPTION 3212 * 3213 * The curl_easy_pause function pauses or unpauses transfers. Select the new 3214 * state by setting the bitmask, use the convenience defines below. 3215 * 3216 */ 3217 CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); 3218 3219 #define CURLPAUSE_RECV (1<<0) 3220 #define CURLPAUSE_RECV_CONT (0) 3221 3222 #define CURLPAUSE_SEND (1<<2) 3223 #define CURLPAUSE_SEND_CONT (0) 3224 3225 #define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) 3226 #define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) 3227 3228 #ifdef __cplusplus 3229 } /* end of extern "C" */ 3230 #endif 3231 3232 /* unfortunately, the easy.h and multi.h include files need options and info 3233 stuff before they can be included! */ 3234 #include "easy.h" /* nothing in curl is fun without the easy stuff */ 3235 #include "multi.h" 3236 #include "urlapi.h" 3237 #include "options.h" 3238 #include "header.h" 3239 #include "websockets.h" 3240 #ifndef CURL_SKIP_INCLUDE_MPRINTF 3241 #include "mprintf.h" 3242 #endif 3243 3244 /* the typechecker does not work in C++ (yet) */ 3245 #if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ 3246 ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ 3247 !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) 3248 #include "typecheck-gcc.h" 3249 #else 3250 #if defined(__STDC__) && (__STDC__ >= 1) 3251 /* This preprocessor magic that replaces a call with the exact same call is 3252 only done to make sure application authors pass exactly three arguments 3253 to these functions. */ 3254 #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) 3255 #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) 3256 #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) 3257 #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) 3258 #endif /* __STDC__ >= 1 */ 3259 #endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ 3260 3261 #endif /* CURLINC_CURL_H */ 3262