File indexing completed on 2026-05-07 08:36:25
0001 #ifndef CURLINC_CURL_H
0002 #define CURLINC_CURL_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifdef CURL_NO_OLDIES
0033 #define CURL_STRICTER
0034 #endif
0035
0036
0037 #if (defined(__GNUC__) && \
0038 ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1))) || \
0039 (defined(__clang__) && __clang_major__ >= 3) || \
0040 defined(__IAR_SYSTEMS_ICC__)) && \
0041 !defined(__INTEL_COMPILER) && \
0042 !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL)
0043 #define CURL_DEPRECATED(version, message) \
0044 __attribute__((deprecated("since " # version ". " message)))
0045 #ifdef __IAR_SYSTEMS_ICC__
0046 #define CURL_IGNORE_DEPRECATION(statements) \
0047 _Pragma("diag_suppress=Pe1444") \
0048 statements \
0049 _Pragma("diag_default=Pe1444")
0050 #else
0051 #define CURL_IGNORE_DEPRECATION(statements) \
0052 _Pragma("GCC diagnostic push") \
0053 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
0054 statements \
0055 _Pragma("GCC diagnostic pop")
0056 #endif
0057 #else
0058 #define CURL_DEPRECATED(version, message)
0059 #define CURL_IGNORE_DEPRECATION(statements) statements
0060 #endif
0061
0062 #include "curlver.h" /* libcurl version defines */
0063 #include "system.h" /* determine things runtime */
0064
0065 #include <stdio.h>
0066 #include <limits.h>
0067
0068 #if defined(__FreeBSD__) || defined(__MidnightBSD__)
0069
0070 #include <sys/param.h>
0071 #endif
0072
0073
0074 #include <sys/types.h>
0075 #include <time.h>
0076
0077 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
0078 #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
0079 defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
0080
0081
0082 #include <winsock2.h>
0083 #include <ws2tcpip.h>
0084 #endif
0085 #endif
0086
0087
0088
0089
0090 #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
0091 defined(__minix) || defined(__INTEGRITY) || \
0092 defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
0093 defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \
0094 (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \
0095 (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \
0096 defined(__sun__) || defined(__serenity__) || defined(__vxworks__)
0097 #include <sys/select.h>
0098 #endif
0099
0100 #ifndef _WIN32
0101 #include <sys/socket.h>
0102 #include <sys/time.h>
0103 #endif
0104
0105 #ifdef __cplusplus
0106 extern "C" {
0107 #endif
0108
0109 typedef void CURL;
0110 typedef void CURLSH;
0111
0112
0113
0114
0115
0116 #ifdef __has_declspec_attribute
0117 #define CURL_HAS_DECLSPEC_ATTRIBUTE(x) __has_declspec_attribute(x)
0118 #else
0119 #define CURL_HAS_DECLSPEC_ATTRIBUTE(x) 0
0120 #endif
0121
0122 #ifdef CURL_STATICLIB
0123 # define CURL_EXTERN
0124 #elif defined(_WIN32) || \
0125 (CURL_HAS_DECLSPEC_ATTRIBUTE(dllexport) && \
0126 CURL_HAS_DECLSPEC_ATTRIBUTE(dllimport))
0127 # ifdef BUILDING_LIBCURL
0128 # define CURL_EXTERN __declspec(dllexport)
0129 # else
0130 # define CURL_EXTERN __declspec(dllimport)
0131 # endif
0132 #elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
0133 # define CURL_EXTERN CURL_EXTERN_SYMBOL
0134 #else
0135 # define CURL_EXTERN
0136 #endif
0137
0138 #ifndef curl_socket_typedef
0139
0140 #if defined(_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
0141 typedef SOCKET curl_socket_t;
0142 #define CURL_SOCKET_BAD INVALID_SOCKET
0143 #else
0144 typedef int curl_socket_t;
0145 #define CURL_SOCKET_BAD -1
0146 #endif
0147 #define curl_socket_typedef
0148 #endif
0149
0150
0151 typedef enum {
0152 CURLSSLBACKEND_NONE = 0,
0153 CURLSSLBACKEND_OPENSSL = 1,
0154 CURLSSLBACKEND_GNUTLS = 2,
0155 CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3,
0156 CURLSSLBACKEND_OBSOLETE4 = 4,
0157 CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5,
0158 CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6,
0159 CURLSSLBACKEND_WOLFSSL = 7,
0160 CURLSSLBACKEND_SCHANNEL = 8,
0161 CURLSSLBACKEND_SECURETRANSPORT CURL_DEPRECATED(8.15.0, "") = 9,
0162 CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10,
0163 CURLSSLBACKEND_MBEDTLS = 11,
0164 CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12,
0165 CURLSSLBACKEND_BEARSSL CURL_DEPRECATED(8.15.0, "") = 13,
0166 CURLSSLBACKEND_RUSTLS = 14
0167 } curl_sslbackend;
0168
0169
0170 #define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL
0171 #define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL
0172 #define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL
0173
0174
0175 #define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL
0176 #define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT
0177
0178
0179 #define CURLFOLLOW_ALL 1L
0180
0181
0182
0183 #define CURLFOLLOW_OBEYCODE 2L
0184
0185
0186 #define CURLFOLLOW_FIRSTONLY 3L
0187
0188 struct curl_httppost {
0189 struct curl_httppost *next;
0190 char *name;
0191 long namelength;
0192 char *contents;
0193 long contentslength;
0194
0195 char *buffer;
0196 long bufferlength;
0197 char *contenttype;
0198 struct curl_slist *contentheader;
0199 struct curl_httppost *more;
0200
0201
0202 long flags;
0203
0204
0205 #define CURL_HTTPPOST_FILENAME (1 << 0)
0206
0207 #define CURL_HTTPPOST_READFILE (1 << 1)
0208
0209 #define CURL_HTTPPOST_PTRNAME (1 << 2)
0210
0211 #define CURL_HTTPPOST_PTRCONTENTS (1 << 3)
0212
0213 #define CURL_HTTPPOST_BUFFER (1 << 4)
0214
0215 #define CURL_HTTPPOST_PTRBUFFER (1 << 5)
0216
0217
0218 #define CURL_HTTPPOST_CALLBACK (1 << 6)
0219
0220 #define CURL_HTTPPOST_LARGE (1 << 7)
0221
0222 char *showfilename;
0223
0224
0225 void *userp;
0226
0227 curl_off_t contentlen;
0228
0229
0230 };
0231
0232
0233
0234 #define CURL_PROGRESSFUNC_CONTINUE 0x10000001
0235
0236
0237
0238 typedef int (*curl_progress_callback)(void *clientp,
0239 double dltotal,
0240 double dlnow,
0241 double ultotal,
0242 double ulnow);
0243
0244
0245
0246
0247 typedef int (*curl_xferinfo_callback)(void *clientp,
0248 curl_off_t dltotal,
0249 curl_off_t dlnow,
0250 curl_off_t ultotal,
0251 curl_off_t ulnow);
0252
0253 #ifndef CURL_MAX_READ_SIZE
0254
0255 #define CURL_MAX_READ_SIZE (10*1024*1024)
0256 #endif
0257
0258 #ifndef CURL_MAX_WRITE_SIZE
0259
0260
0261
0262
0263
0264
0265 #define CURL_MAX_WRITE_SIZE 16384
0266 #endif
0267
0268 #ifndef CURL_MAX_HTTP_HEADER
0269
0270
0271
0272 #define CURL_MAX_HTTP_HEADER (100*1024)
0273 #endif
0274
0275
0276
0277 #define CURL_WRITEFUNC_PAUSE 0x10000001
0278
0279
0280
0281 #define CURL_WRITEFUNC_ERROR 0xFFFFFFFF
0282
0283 typedef size_t (*curl_write_callback)(char *buffer,
0284 size_t size,
0285 size_t nitems,
0286 void *outstream);
0287
0288
0289 typedef int (*curl_resolver_start_callback)(void *resolver_state,
0290 void *reserved, void *userdata);
0291
0292
0293 typedef enum {
0294 CURLFILETYPE_FILE = 0,
0295 CURLFILETYPE_DIRECTORY,
0296 CURLFILETYPE_SYMLINK,
0297 CURLFILETYPE_DEVICE_BLOCK,
0298 CURLFILETYPE_DEVICE_CHAR,
0299 CURLFILETYPE_NAMEDPIPE,
0300 CURLFILETYPE_SOCKET,
0301 CURLFILETYPE_DOOR,
0302
0303 CURLFILETYPE_UNKNOWN
0304 } curlfiletype;
0305
0306 #define CURLFINFOFLAG_KNOWN_FILENAME (1 << 0)
0307 #define CURLFINFOFLAG_KNOWN_FILETYPE (1 << 1)
0308 #define CURLFINFOFLAG_KNOWN_TIME (1 << 2)
0309 #define CURLFINFOFLAG_KNOWN_PERM (1 << 3)
0310 #define CURLFINFOFLAG_KNOWN_UID (1 << 4)
0311 #define CURLFINFOFLAG_KNOWN_GID (1 << 5)
0312 #define CURLFINFOFLAG_KNOWN_SIZE (1 << 6)
0313 #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1 << 7)
0314
0315
0316 struct curl_fileinfo {
0317 char *filename;
0318 curlfiletype filetype;
0319 time_t time;
0320 unsigned int perm;
0321 int uid;
0322 int gid;
0323 curl_off_t size;
0324 long int hardlinks;
0325
0326 struct {
0327
0328 char *time;
0329 char *perm;
0330 char *user;
0331 char *group;
0332 char *target;
0333 } strings;
0334
0335 unsigned int flags;
0336
0337
0338
0339 char *b_data;
0340 size_t b_size;
0341 size_t b_used;
0342 };
0343
0344
0345 #define CURL_CHUNK_BGN_FUNC_OK 0
0346 #define CURL_CHUNK_BGN_FUNC_FAIL 1
0347 #define CURL_CHUNK_BGN_FUNC_SKIP 2
0348
0349
0350
0351
0352 typedef long (*curl_chunk_bgn_callback)(const void *transfer_info,
0353 void *ptr,
0354 int remains);
0355
0356
0357 #define CURL_CHUNK_END_FUNC_OK 0
0358 #define CURL_CHUNK_END_FUNC_FAIL 1
0359
0360
0361
0362
0363
0364
0365
0366 typedef long (*curl_chunk_end_callback)(void *ptr);
0367
0368
0369 #define CURL_FNMATCHFUNC_MATCH 0
0370 #define CURL_FNMATCHFUNC_NOMATCH 1
0371 #define CURL_FNMATCHFUNC_FAIL 2
0372
0373
0374
0375 typedef int (*curl_fnmatch_callback)(void *ptr,
0376 const char *pattern,
0377 const char *string);
0378
0379
0380 #define CURL_SEEKFUNC_OK 0
0381 #define CURL_SEEKFUNC_FAIL 1
0382 #define CURL_SEEKFUNC_CANTSEEK 2
0383
0384 typedef int (*curl_seek_callback)(void *instream,
0385 curl_off_t offset,
0386 int origin);
0387
0388
0389
0390 #define CURL_READFUNC_ABORT 0x10000000
0391
0392
0393 #define CURL_READFUNC_PAUSE 0x10000001
0394
0395
0396
0397 #define CURL_TRAILERFUNC_OK 0
0398
0399
0400 #define CURL_TRAILERFUNC_ABORT 1
0401
0402 typedef size_t (*curl_read_callback)(char *buffer,
0403 size_t size,
0404 size_t nitems,
0405 void *instream);
0406
0407 typedef int (*curl_trailer_callback)(struct curl_slist **list,
0408 void *userdata);
0409
0410 typedef enum {
0411 CURLSOCKTYPE_IPCXN,
0412 CURLSOCKTYPE_ACCEPT,
0413 CURLSOCKTYPE_LAST
0414 } curlsocktype;
0415
0416
0417
0418 #define CURL_SOCKOPT_OK 0
0419 #define CURL_SOCKOPT_ERROR 1
0420
0421 #define CURL_SOCKOPT_ALREADY_CONNECTED 2
0422
0423 typedef int (*curl_sockopt_callback)(void *clientp,
0424 curl_socket_t curlfd,
0425 curlsocktype purpose);
0426
0427 struct curl_sockaddr {
0428 int family;
0429 int socktype;
0430 int protocol;
0431 unsigned int addrlen;
0432
0433
0434 struct sockaddr addr;
0435 };
0436
0437 typedef curl_socket_t
0438 (*curl_opensocket_callback)(void *clientp,
0439 curlsocktype purpose,
0440 struct curl_sockaddr *address);
0441
0442 typedef int
0443 (*curl_closesocket_callback)(void *clientp, curl_socket_t item);
0444
0445 typedef enum {
0446 CURLIOE_OK,
0447 CURLIOE_UNKNOWNCMD,
0448 CURLIOE_FAILRESTART,
0449 CURLIOE_LAST
0450 } curlioerr;
0451
0452 typedef enum {
0453 CURLIOCMD_NOP,
0454 CURLIOCMD_RESTARTREAD,
0455 CURLIOCMD_LAST
0456 } curliocmd;
0457
0458 typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
0459 int cmd,
0460 void *clientp);
0461
0462 #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS
0463
0464
0465
0466
0467
0468
0469 typedef void *(*curl_malloc_callback)(size_t size);
0470 typedef void (*curl_free_callback)(void *ptr);
0471 typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
0472 typedef char *(*curl_strdup_callback)(const char *str);
0473 typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
0474
0475 #define CURL_DID_MEMORY_FUNC_TYPEDEFS
0476 #endif
0477
0478
0479 typedef enum {
0480 CURLINFO_TEXT = 0,
0481 CURLINFO_HEADER_IN,
0482 CURLINFO_HEADER_OUT,
0483 CURLINFO_DATA_IN,
0484 CURLINFO_DATA_OUT,
0485 CURLINFO_SSL_DATA_IN,
0486 CURLINFO_SSL_DATA_OUT,
0487 CURLINFO_END
0488 } curl_infotype;
0489
0490 typedef int (*curl_debug_callback)
0491 (CURL *handle,
0492 curl_infotype type,
0493 char *data,
0494 size_t size,
0495 void *userptr);
0496
0497
0498 typedef int (*curl_prereq_callback)(void *clientp,
0499 char *conn_primary_ip,
0500 char *conn_local_ip,
0501 int conn_primary_port,
0502 int conn_local_port);
0503
0504
0505
0506 #define CURL_PREREQFUNC_OK 0
0507
0508
0509 #define CURL_PREREQFUNC_ABORT 1
0510
0511
0512
0513
0514
0515
0516
0517
0518 typedef enum {
0519 CURLE_OK = 0,
0520 CURLE_UNSUPPORTED_PROTOCOL,
0521 CURLE_FAILED_INIT,
0522 CURLE_URL_MALFORMAT,
0523 CURLE_NOT_BUILT_IN,
0524
0525 CURLE_COULDNT_RESOLVE_PROXY,
0526 CURLE_COULDNT_RESOLVE_HOST,
0527 CURLE_COULDNT_CONNECT,
0528 CURLE_WEIRD_SERVER_REPLY,
0529 CURLE_REMOTE_ACCESS_DENIED,
0530
0531
0532 CURLE_FTP_ACCEPT_FAILED,
0533
0534 CURLE_FTP_WEIRD_PASS_REPLY,
0535 CURLE_FTP_ACCEPT_TIMEOUT,
0536
0537
0538 CURLE_FTP_WEIRD_PASV_REPLY,
0539 CURLE_FTP_WEIRD_227_FORMAT,
0540 CURLE_FTP_CANT_GET_HOST,
0541 CURLE_HTTP2,
0542
0543
0544 CURLE_FTP_COULDNT_SET_TYPE,
0545 CURLE_PARTIAL_FILE,
0546 CURLE_FTP_COULDNT_RETR_FILE,
0547 CURLE_OBSOLETE20,
0548 CURLE_QUOTE_ERROR,
0549 CURLE_HTTP_RETURNED_ERROR,
0550 CURLE_WRITE_ERROR,
0551 CURLE_OBSOLETE24,
0552 CURLE_UPLOAD_FAILED,
0553 CURLE_READ_ERROR,
0554 CURLE_OUT_OF_MEMORY,
0555 CURLE_OPERATION_TIMEDOUT,
0556 CURLE_OBSOLETE29,
0557 CURLE_FTP_PORT_FAILED,
0558 CURLE_FTP_COULDNT_USE_REST,
0559 CURLE_OBSOLETE32,
0560 CURLE_RANGE_ERROR,
0561 CURLE_OBSOLETE34,
0562 CURLE_SSL_CONNECT_ERROR,
0563 CURLE_BAD_DOWNLOAD_RESUME,
0564 CURLE_FILE_COULDNT_READ_FILE,
0565 CURLE_LDAP_CANNOT_BIND,
0566 CURLE_LDAP_SEARCH_FAILED,
0567 CURLE_OBSOLETE40,
0568 CURLE_OBSOLETE41,
0569 CURLE_ABORTED_BY_CALLBACK,
0570 CURLE_BAD_FUNCTION_ARGUMENT,
0571 CURLE_OBSOLETE44,
0572 CURLE_INTERFACE_FAILED,
0573 CURLE_OBSOLETE46,
0574 CURLE_TOO_MANY_REDIRECTS,
0575 CURLE_UNKNOWN_OPTION,
0576 CURLE_SETOPT_OPTION_SYNTAX,
0577 CURLE_OBSOLETE50,
0578 CURLE_OBSOLETE51,
0579 CURLE_GOT_NOTHING,
0580 CURLE_SSL_ENGINE_NOTFOUND,
0581 CURLE_SSL_ENGINE_SETFAILED,
0582
0583 CURLE_SEND_ERROR,
0584 CURLE_RECV_ERROR,
0585 CURLE_OBSOLETE57,
0586 CURLE_SSL_CERTPROBLEM,
0587 CURLE_SSL_CIPHER,
0588 CURLE_PEER_FAILED_VERIFICATION,
0589
0590 CURLE_BAD_CONTENT_ENCODING,
0591 CURLE_OBSOLETE62,
0592 CURLE_FILESIZE_EXCEEDED,
0593 CURLE_USE_SSL_FAILED,
0594 CURLE_SEND_FAIL_REWIND,
0595
0596 CURLE_SSL_ENGINE_INITFAILED,
0597 CURLE_LOGIN_DENIED,
0598
0599 CURLE_TFTP_NOTFOUND,
0600 CURLE_TFTP_PERM,
0601 CURLE_REMOTE_DISK_FULL,
0602 CURLE_TFTP_ILLEGAL,
0603 CURLE_TFTP_UNKNOWNID,
0604 CURLE_REMOTE_FILE_EXISTS,
0605 CURLE_TFTP_NOSUCHUSER,
0606 CURLE_OBSOLETE75,
0607 CURLE_OBSOLETE76,
0608 CURLE_SSL_CACERT_BADFILE,
0609
0610 CURLE_REMOTE_FILE_NOT_FOUND,
0611 CURLE_SSH,
0612
0613
0614
0615 CURLE_SSL_SHUTDOWN_FAILED,
0616
0617 CURLE_AGAIN,
0618
0619
0620 CURLE_SSL_CRL_BADFILE,
0621
0622 CURLE_SSL_ISSUER_ERROR,
0623
0624 CURLE_FTP_PRET_FAILED,
0625 CURLE_RTSP_CSEQ_ERROR,
0626 CURLE_RTSP_SESSION_ERROR,
0627 CURLE_FTP_BAD_FILE_LIST,
0628 CURLE_CHUNK_FAILED,
0629 CURLE_NO_CONNECTION_AVAILABLE,
0630
0631 CURLE_SSL_PINNEDPUBKEYNOTMATCH,
0632
0633 CURLE_SSL_INVALIDCERTSTATUS,
0634 CURLE_HTTP2_STREAM,
0635
0636 CURLE_RECURSIVE_API_CALL,
0637
0638 CURLE_AUTH_ERROR,
0639
0640 CURLE_HTTP3,
0641 CURLE_QUIC_CONNECT_ERROR,
0642 CURLE_PROXY,
0643 CURLE_SSL_CLIENTCERT,
0644 CURLE_UNRECOVERABLE_POLL,
0645 CURLE_TOO_LARGE,
0646 CURLE_ECH_REQUIRED,
0647 CURL_LAST
0648 } CURLcode;
0649
0650 #ifndef CURL_NO_OLDIES
0651
0652
0653
0654 #define CURLE_FUNCTION_NOT_FOUND CURLE_OBSOLETE41
0655
0656
0657 #define CURLE_HTTP_POST_ERROR CURLE_OBSOLETE34
0658
0659
0660 #define CURLE_OBSOLETE16 CURLE_HTTP2
0661
0662
0663 #define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED
0664 #define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT
0665
0666
0667 #define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING
0668 #define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY
0669
0670
0671 #define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION
0672
0673
0674 #define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION
0675
0676
0677 #define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX
0678
0679
0680
0681 #define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION
0682
0683
0684
0685 #define CURLE_OBSOLETE CURLE_OBSOLETE50
0686 #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46
0687 #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44
0688 #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10
0689 #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16
0690 #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32
0691 #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29
0692 #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12
0693 #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20
0694 #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40
0695 #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24
0696 #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57
0697 #define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN
0698
0699 #define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED
0700 #define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE
0701 #define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR
0702 #define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL
0703 #define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS
0704 #define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR
0705 #define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED
0706
0707
0708
0709 #define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT
0710 #define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
0711 #define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
0712 #define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED
0713 #define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
0714 #define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
0715 #define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62
0716 #define CURLE_CONV_REQD CURLE_OBSOLETE76
0717 #define CURLE_CONV_FAILED CURLE_OBSOLETE75
0718
0719
0720
0721
0722 #define CURLE_ALREADY_COMPLETE 99999
0723
0724
0725 #define CURLOPT_FILE CURLOPT_WRITEDATA
0726 #define CURLOPT_INFILE CURLOPT_READDATA
0727 #define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA
0728
0729
0730
0731 #define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40
0732 #define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72
0733 #define CURLOPT_OBSOLETE72 9999
0734 #define CURLOPT_OBSOLETE40 9999
0735
0736 #endif
0737
0738
0739
0740
0741
0742 typedef enum {
0743 CURLPX_OK,
0744 CURLPX_BAD_ADDRESS_TYPE,
0745 CURLPX_BAD_VERSION,
0746 CURLPX_CLOSED,
0747 CURLPX_GSSAPI,
0748 CURLPX_GSSAPI_PERMSG,
0749 CURLPX_GSSAPI_PROTECTION,
0750 CURLPX_IDENTD,
0751 CURLPX_IDENTD_DIFFER,
0752 CURLPX_LONG_HOSTNAME,
0753 CURLPX_LONG_PASSWD,
0754 CURLPX_LONG_USER,
0755 CURLPX_NO_AUTH,
0756 CURLPX_RECV_ADDRESS,
0757 CURLPX_RECV_AUTH,
0758 CURLPX_RECV_CONNECT,
0759 CURLPX_RECV_REQACK,
0760 CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED,
0761 CURLPX_REPLY_COMMAND_NOT_SUPPORTED,
0762 CURLPX_REPLY_CONNECTION_REFUSED,
0763 CURLPX_REPLY_GENERAL_SERVER_FAILURE,
0764 CURLPX_REPLY_HOST_UNREACHABLE,
0765 CURLPX_REPLY_NETWORK_UNREACHABLE,
0766 CURLPX_REPLY_NOT_ALLOWED,
0767 CURLPX_REPLY_TTL_EXPIRED,
0768 CURLPX_REPLY_UNASSIGNED,
0769 CURLPX_REQUEST_FAILED,
0770 CURLPX_RESOLVE_HOST,
0771 CURLPX_SEND_AUTH,
0772 CURLPX_SEND_CONNECT,
0773 CURLPX_SEND_REQUEST,
0774 CURLPX_UNKNOWN_FAIL,
0775 CURLPX_UNKNOWN_MODE,
0776 CURLPX_USER_REJECTED,
0777 CURLPX_LAST
0778 } CURLproxycode;
0779
0780
0781 typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
0782
0783 typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl,
0784 void *ssl_ctx,
0785
0786
0787
0788 void *userptr);
0789
0790 #define CURLPROXY_HTTP 0L
0791
0792 #define CURLPROXY_HTTP_1_0 1L
0793
0794 #define CURLPROXY_HTTPS 2L
0795
0796 #define CURLPROXY_HTTPS2 3L
0797
0798 #define CURLPROXY_SOCKS4 4L
0799
0800 #define CURLPROXY_SOCKS5 5L
0801 #define CURLPROXY_SOCKS4A 6L
0802 #define CURLPROXY_SOCKS5_HOSTNAME 7L
0803
0804
0805
0806 typedef enum {
0807 CURLPROXY_LAST = 8
0808 } curl_proxytype;
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823
0824
0825
0826
0827
0828 #define CURLAUTH_NONE ((unsigned long)0)
0829 #define CURLAUTH_BASIC (((unsigned long)1) << 0)
0830 #define CURLAUTH_DIGEST (((unsigned long)1) << 1)
0831 #define CURLAUTH_NEGOTIATE (((unsigned long)1) << 2)
0832
0833 #define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE
0834
0835 #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE
0836 #define CURLAUTH_NTLM (((unsigned long)1) << 3)
0837 #define CURLAUTH_DIGEST_IE (((unsigned long)1) << 4)
0838 #ifndef CURL_NO_OLDIES
0839
0840 #define CURLAUTH_NTLM_WB (((unsigned long)1) << 5)
0841 #endif
0842 #define CURLAUTH_BEARER (((unsigned long)1) << 6)
0843 #define CURLAUTH_AWS_SIGV4 (((unsigned long)1) << 7)
0844 #define CURLAUTH_ONLY (((unsigned long)1) << 31)
0845 #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)
0846 #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC | CURLAUTH_DIGEST_IE))
0847
0848 #define CURLSSH_AUTH_ANY ~0L
0849 #define CURLSSH_AUTH_NONE 0L
0850 #define CURLSSH_AUTH_PUBLICKEY (1L << 0)
0851 #define CURLSSH_AUTH_PASSWORD (1L << 1)
0852 #define CURLSSH_AUTH_HOST (1L << 2)
0853 #define CURLSSH_AUTH_KEYBOARD (1L << 3)
0854 #define CURLSSH_AUTH_AGENT (1L << 4)
0855 #define CURLSSH_AUTH_GSSAPI (1L << 5)
0856 #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY
0857
0858 #define CURLGSSAPI_DELEGATION_NONE 0L
0859 #define CURLGSSAPI_DELEGATION_POLICY_FLAG (1L<<0)
0860 #define CURLGSSAPI_DELEGATION_FLAG (1L<<1)
0861
0862 #define CURL_ERROR_SIZE 256
0863
0864 enum curl_khtype {
0865 CURLKHTYPE_UNKNOWN,
0866 CURLKHTYPE_RSA1,
0867 CURLKHTYPE_RSA,
0868 CURLKHTYPE_DSS,
0869 CURLKHTYPE_ECDSA,
0870 CURLKHTYPE_ED25519
0871 };
0872
0873 struct curl_khkey {
0874 const char *key;
0875
0876 size_t len;
0877 enum curl_khtype keytype;
0878 };
0879
0880
0881
0882 enum curl_khstat {
0883 CURLKHSTAT_FINE_ADD_TO_FILE,
0884 CURLKHSTAT_FINE,
0885 CURLKHSTAT_REJECT,
0886 CURLKHSTAT_DEFER,
0887
0888
0889 CURLKHSTAT_FINE_REPLACE,
0890 CURLKHSTAT_LAST
0891 };
0892
0893
0894 enum curl_khmatch {
0895 CURLKHMATCH_OK,
0896 CURLKHMATCH_MISMATCH,
0897 CURLKHMATCH_MISSING,
0898 CURLKHMATCH_LAST
0899 };
0900
0901 typedef int
0902 (*curl_sshkeycallback) (CURL *easy,
0903 const struct curl_khkey *knownkey,
0904 const struct curl_khkey *foundkey,
0905 enum curl_khmatch,
0906 void *clientp);
0907
0908
0909 typedef int
0910 (*curl_sshhostkeycallback) (void *clientp,
0911
0912 int keytype,
0913 const char *key,
0914 size_t keylen);
0915
0916
0917
0918
0919 #define CURLUSESSL_NONE 0L
0920 #define CURLUSESSL_TRY 1L
0921 #define CURLUSESSL_CONTROL 2L
0922 #define CURLUSESSL_ALL 3L
0923
0924 typedef enum {
0925 CURLUSESSL_LAST = 4
0926 } curl_usessl;
0927
0928
0929
0930
0931
0932
0933
0934
0935 #define CURLSSLOPT_ALLOW_BEAST (1L << 0)
0936
0937
0938
0939 #define CURLSSLOPT_NO_REVOKE (1L << 1)
0940
0941
0942
0943 #define CURLSSLOPT_NO_PARTIALCHAIN (1L << 2)
0944
0945
0946
0947
0948 #define CURLSSLOPT_REVOKE_BEST_EFFORT (1L << 3)
0949
0950
0951
0952 #define CURLSSLOPT_NATIVE_CA (1L << 4)
0953
0954
0955
0956 #define CURLSSLOPT_AUTO_CLIENT_CERT (1L << 5)
0957
0958
0959 #define CURLSSLOPT_EARLYDATA (1L << 6)
0960
0961
0962
0963
0964 #define CURL_HET_DEFAULT 200L
0965
0966
0967 #define CURL_UPKEEP_INTERVAL_DEFAULT 60000L
0968
0969 #ifndef CURL_NO_OLDIES
0970
0971
0972
0973
0974
0975 #define CURLFTPSSL_NONE CURLUSESSL_NONE
0976 #define CURLFTPSSL_TRY CURLUSESSL_TRY
0977 #define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL
0978 #define CURLFTPSSL_ALL CURLUSESSL_ALL
0979 #define CURLFTPSSL_LAST CURLUSESSL_LAST
0980 #define curl_ftpssl curl_usessl
0981 #endif
0982
0983
0984 #define CURLFTPSSL_CCC_NONE 0L
0985 #define CURLFTPSSL_CCC_PASSIVE 1L
0986 #define CURLFTPSSL_CCC_ACTIVE 2L
0987
0988 typedef enum {
0989 CURLFTPSSL_CCC_LAST = 3
0990 } curl_ftpccc;
0991
0992
0993 #define CURLFTPAUTH_DEFAULT 0L
0994 #define CURLFTPAUTH_SSL 1L
0995 #define CURLFTPAUTH_TLS 2L
0996
0997 typedef enum {
0998 CURLFTPAUTH_LAST = 3
0999 } curl_ftpauth;
1000
1001
1002 #define CURLFTP_CREATE_DIR_NONE 0L
1003 #define CURLFTP_CREATE_DIR 1L
1004
1005
1006 #define CURLFTP_CREATE_DIR_RETRY 2L
1007
1008
1009 typedef enum {
1010 CURLFTP_CREATE_DIR_LAST = 3
1011 } curl_ftpcreatedir;
1012
1013
1014 #define CURLFTPMETHOD_DEFAULT 0L
1015 #define CURLFTPMETHOD_MULTICWD 1L
1016
1017 #define CURLFTPMETHOD_NOCWD 2L
1018 #define CURLFTPMETHOD_SINGLECWD 3L
1019
1020 typedef enum {
1021 CURLFTPMETHOD_LAST = 4
1022 } curl_ftpmethod;
1023
1024
1025 #define CURLHEADER_UNIFIED 0L
1026 #define CURLHEADER_SEPARATE (1L << 0)
1027
1028
1029 #define CURLALTSVC_READONLYFILE (1L << 2)
1030 #define CURLALTSVC_H1 (1L << 3)
1031 #define CURLALTSVC_H2 (1L << 4)
1032 #define CURLALTSVC_H3 (1L << 5)
1033
1034
1035 #define CURLULFLAG_ANSWERED (1L << 0)
1036 #define CURLULFLAG_DELETED (1L << 1)
1037 #define CURLULFLAG_DRAFT (1L << 2)
1038 #define CURLULFLAG_FLAGGED (1L << 3)
1039 #define CURLULFLAG_SEEN (1L << 4)
1040
1041 struct curl_hstsentry {
1042 char *name;
1043 size_t namelen;
1044 unsigned int includeSubDomains:1;
1045 char expire[18];
1046 };
1047
1048 struct curl_index {
1049 size_t index;
1050 size_t total;
1051 };
1052
1053 typedef enum {
1054 CURLSTS_OK,
1055 CURLSTS_DONE,
1056 CURLSTS_FAIL
1057 } CURLSTScode;
1058
1059 typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy,
1060 struct curl_hstsentry *e,
1061 void *userp);
1062 typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy,
1063 struct curl_hstsentry *e,
1064 struct curl_index *i,
1065 void *userp);
1066
1067
1068 #define CURLHSTS_ENABLE (1L << 0)
1069 #define CURLHSTS_READONLYFILE (1L << 1)
1070
1071
1072
1073 #define CURLPROTO_HTTP (1L << 0)
1074 #define CURLPROTO_HTTPS (1L << 1)
1075 #define CURLPROTO_FTP (1L << 2)
1076 #define CURLPROTO_FTPS (1L << 3)
1077 #define CURLPROTO_SCP (1L << 4)
1078 #define CURLPROTO_SFTP (1L << 5)
1079 #define CURLPROTO_TELNET (1L << 6)
1080 #define CURLPROTO_LDAP (1L << 7)
1081 #define CURLPROTO_LDAPS (1L << 8)
1082 #define CURLPROTO_DICT (1L << 9)
1083 #define CURLPROTO_FILE (1L << 10)
1084 #define CURLPROTO_TFTP (1L << 11)
1085 #define CURLPROTO_IMAP (1L << 12)
1086 #define CURLPROTO_IMAPS (1L << 13)
1087 #define CURLPROTO_POP3 (1L << 14)
1088 #define CURLPROTO_POP3S (1L << 15)
1089 #define CURLPROTO_SMTP (1L << 16)
1090 #define CURLPROTO_SMTPS (1L << 17)
1091 #define CURLPROTO_RTSP (1L << 18)
1092 #define CURLPROTO_RTMP (1L << 19)
1093 #define CURLPROTO_RTMPT (1L << 20)
1094 #define CURLPROTO_RTMPE (1L << 21)
1095 #define CURLPROTO_RTMPTE (1L << 22)
1096 #define CURLPROTO_RTMPS (1L << 23)
1097 #define CURLPROTO_RTMPTS (1L << 24)
1098 #define CURLPROTO_GOPHER (1L << 25)
1099 #define CURLPROTO_SMB (1L << 26)
1100 #define CURLPROTO_SMBS (1L << 27)
1101 #define CURLPROTO_MQTT (1L << 28)
1102 #define CURLPROTO_GOPHERS (1L << 29)
1103 #define CURLPROTO_ALL (~0L)
1104
1105
1106
1107 #define CURLOPTTYPE_LONG 0
1108 #define CURLOPTTYPE_OBJECTPOINT 10000
1109 #define CURLOPTTYPE_FUNCTIONPOINT 20000
1110 #define CURLOPTTYPE_OFF_T 30000
1111 #define CURLOPTTYPE_BLOB 40000
1112
1113
1114
1115
1116 #define CURLOPT(na,t,nu) na = t + nu
1117 #define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu
1118
1119
1120
1121
1122 #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT
1123
1124
1125 #define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT
1126
1127
1128 #define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT
1129
1130
1131 #define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG
1132
1133
1134
1135
1136
1137 typedef enum {
1138
1139 CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1),
1140
1141
1142 CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2),
1143
1144
1145 CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3),
1146
1147
1148 CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4),
1149
1150
1151 CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5),
1152
1153
1154 CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6),
1155
1156
1157 CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7),
1158
1159
1160
1161
1162 CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9),
1163
1164
1165
1166 CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10),
1167
1168
1169
1170 CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11),
1171
1172
1173
1174 CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12),
1175
1176
1177 CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13),
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188 CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14),
1189
1190
1191 CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15),
1192
1193
1194 CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16),
1195
1196
1197
1198 CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17),
1199
1200
1201 CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18),
1202
1203
1204
1205
1206
1207
1208
1209
1210 CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19),
1211
1212
1213 CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20),
1214
1215
1216
1217
1218
1219
1220
1221 CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21),
1222
1223
1224 CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22),
1225
1226
1227
1228 CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23),
1229
1230
1231 CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24,
1232 7.56.0, "Use CURLOPT_MIMEPOST"),
1233
1234
1235 CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25),
1236
1237
1238 CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26),
1239
1240
1241 CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27),
1242
1243
1244 CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28),
1245
1246
1247
1248 CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29),
1249
1250
1251
1252 CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31),
1253
1254
1255
1256 CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32),
1257
1258
1259 CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33),
1260
1261
1262
1263 CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34),
1264
1265
1266
1267
1268
1269
1270
1271 CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36),
1272
1273
1274 CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37),
1275
1276
1277
1278
1279 CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39),
1280
1281
1282
1283
1284 CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41),
1285
1286
1287 CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42),
1288
1289
1290 CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43),
1291
1292
1293 CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44),
1294
1295
1296 CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45),
1297
1298
1299 CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46),
1300
1301
1302 CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47),
1303
1304
1305 CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48),
1306
1307
1308 CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50),
1309
1310
1311
1312 CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51),
1313
1314
1315 CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52),
1316
1317
1318 CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53),
1319
1320
1321 CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54,
1322 7.12.1, "Use CURLOPT_UPLOAD"),
1323
1324
1325
1326
1327
1328
1329
1330 CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56,
1331 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"),
1332
1333
1334
1335 CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57),
1336 #define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA
1337
1338
1339 CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58),
1340
1341
1342
1343 CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59),
1344
1345
1346 CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60),
1347
1348
1349 CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61),
1350
1351
1352 CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62),
1353
1354
1355
1356
1357 CURLOPTDEPRECATED(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63,
1358 8.17.0, "removed"),
1359
1360
1361 CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64),
1362
1363
1364
1365 CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65),
1366
1367
1368
1369
1370
1371 CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68),
1372
1373
1374
1375 CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69),
1376
1377
1378 CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70),
1379
1380
1381 CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71),
1382
1383
1384
1385
1386
1387
1388
1389 CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74),
1390
1391
1392
1393
1394 CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75),
1395
1396
1397
1398 CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76,
1399 7.84.0, "Serves no purpose anymore"),
1400
1401
1402 CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77,
1403 7.84.0, "Serves no purpose anymore"),
1404
1405
1406
1407 CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78),
1408
1409
1410
1411 CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79),
1412
1413
1414
1415
1416 CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80),
1417
1418
1419
1420
1421 CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81),
1422
1423
1424
1425 CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82),
1426
1427
1428 CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83),
1429
1430
1431
1432 CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84),
1433
1434
1435
1436
1437 CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85),
1438
1439
1440 CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86),
1441
1442
1443 CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87),
1444
1445
1446 CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88),
1447
1448
1449 CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89),
1450
1451
1452
1453
1454 CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90),
1455
1456
1457
1458 CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91,
1459 7.11.1, "Use CURLOPT_SHARE"),
1460
1461
1462 CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92),
1463
1464
1465 CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93),
1466
1467
1468 CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94),
1469
1470
1471 CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95),
1472
1473
1474 CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96),
1475
1476
1477
1478 CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97),
1479
1480
1481 CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98),
1482
1483
1484
1485
1486 CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99),
1487
1488
1489 CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100),
1490
1491
1492
1493
1494 CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101),
1495
1496
1497
1498
1499 CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102),
1500
1501
1502 CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103),
1503
1504
1505 CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104),
1506
1507
1508
1509
1510 CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105),
1511
1512
1513
1514
1515 CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106),
1516
1517
1518
1519
1520 CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107),
1521
1522
1523
1524
1525 CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108),
1526
1527
1528
1529 CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109),
1530
1531
1532
1533
1534
1535 CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110),
1536
1537
1538
1539
1540 CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111),
1541
1542
1543
1544
1545
1546 CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112),
1547
1548
1549
1550
1551 CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113),
1552
1553
1554
1555
1556
1557
1558 CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114),
1559
1560
1561
1562
1563 CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115),
1564
1565
1566
1567
1568 CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116),
1569
1570
1571
1572
1573 CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117),
1574
1575
1576
1577
1578
1579 CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118),
1580
1581
1582
1583
1584
1585
1586 CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119),
1587
1588
1589 CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120),
1590
1591
1592 CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121),
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612 CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129),
1613
1614 CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130,
1615 7.18.0, "Use CURLOPT_SEEKFUNCTION"),
1616 CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131,
1617 7.18.0, "Use CURLOPT_SEEKDATA"),
1618
1619
1620
1621
1622
1623
1624 CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134),
1625
1626
1627 CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135),
1628
1629
1630 CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136),
1631
1632
1633
1634
1635
1636 CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137),
1637
1638
1639
1640 CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138),
1641
1642
1643 CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139),
1644
1645
1646
1647
1648 CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140),
1649
1650
1651
1652 CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141),
1653
1654
1655
1656 CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION,
1657 CURLOPTTYPE_FUNCTIONPOINT, 142,
1658 7.82.0, "Serves no purpose anymore"),
1659
1660
1661
1662 CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION,
1663 CURLOPTTYPE_FUNCTIONPOINT, 143,
1664 7.82.0, "Serves no purpose anymore"),
1665
1666
1667
1668
1669 CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION,
1670 CURLOPTTYPE_FUNCTIONPOINT, 144,
1671 7.82.0, "Serves no purpose anymore"),
1672
1673
1674
1675 CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145),
1676 CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146),
1677
1678
1679 CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147),
1680
1681
1682 CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148),
1683 CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149),
1684
1685
1686
1687 CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150),
1688
1689
1690 CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151),
1691
1692
1693 CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152),
1694 CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153),
1695
1696
1697 CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154),
1698
1699
1700 CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155),
1701 CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156),
1702
1703
1704
1705 CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157),
1706 CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158),
1707
1708
1709
1710 CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159),
1711 CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160),
1712
1713
1714
1715 CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161),
1716
1717
1718 CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162),
1719
1720
1721
1722
1723
1724 CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163),
1725 CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164),
1726
1727
1728 CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165),
1729
1730
1731 CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166),
1732
1733
1734 CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167),
1735 CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168),
1736
1737
1738 CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169),
1739
1740
1741 CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170),
1742
1743
1744 CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171),
1745
1746
1747
1748 CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172),
1749
1750
1751 CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173),
1752 CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174),
1753
1754
1755 CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175),
1756 CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176),
1757
1758
1759
1760
1761
1762
1763
1764
1765 CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177),
1766
1767
1768 CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178),
1769
1770
1771
1772 CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE,
1773 CURLOPTTYPE_STRINGPOINT, 179,
1774 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"),
1775
1776
1777 CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180),
1778
1779
1780
1781
1782
1783 CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181,
1784 7.85.0, "Use CURLOPT_PROTOCOLS_STR"),
1785
1786
1787
1788
1789 CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182,
1790 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"),
1791
1792
1793 CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183),
1794
1795
1796
1797 CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184),
1798
1799
1800 CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185),
1801
1802
1803 CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186),
1804
1805
1806 CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187),
1807
1808
1809 CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188),
1810
1811
1812 CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189),
1813
1814
1815 CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190),
1816
1817
1818 CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191),
1819
1820
1821 CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192),
1822
1823
1824 CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193),
1825
1826
1827 CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194),
1828
1829
1830 CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195),
1831
1832
1833 CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196),
1834
1835
1836 CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197),
1837
1838
1839
1840 CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198),
1841
1842
1843
1844 CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199),
1845
1846
1847 CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200),
1848
1849
1850 CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201),
1851
1852
1853 CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202),
1854
1855
1856 CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203),
1857
1858
1859 CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204),
1860
1861
1862 CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205),
1863
1864
1865 CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206),
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875 CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207),
1876
1877
1878
1879 CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208),
1880 CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209),
1881
1882
1883 CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210),
1884
1885
1886
1887 CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211),
1888
1889
1890
1891 CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212),
1892
1893
1894 CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213),
1895
1896
1897 CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214),
1898 CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215),
1899
1900
1901 CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216),
1902
1903
1904 CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217),
1905
1906
1907 CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218),
1908
1909
1910
1911
1912 CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219),
1913
1914
1915 CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220),
1916
1917
1918
1919
1920 CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221),
1921
1922
1923
1924 CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222),
1925
1926
1927
1928 CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223),
1929
1930
1931 CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224),
1932
1933
1934 CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225,
1935 7.86.0, "Has no function"),
1936
1937
1938 CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226),
1939
1940
1941
1942 CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227),
1943
1944
1945
1946 CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228),
1947
1948
1949 CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229),
1950
1951
1952 CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230),
1953
1954
1955 CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231),
1956
1957
1958 CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232),
1959
1960
1961 CURLOPTDEPRECATED(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233,
1962 8.15.0, "Has no function"),
1963
1964
1965 CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234),
1966
1967
1968 CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235),
1969
1970
1971 CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236),
1972
1973
1974 CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237),
1975
1976
1977 CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238),
1978
1979
1980 CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239),
1981
1982
1983 CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240),
1984
1985
1986 CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241),
1987
1988
1989 CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242),
1990
1991
1992
1993 CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243),
1994
1995
1996 CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244),
1997
1998
1999
2000 CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245),
2001
2002
2003
2004 CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246),
2005
2006
2007
2008 CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247),
2009
2010
2011
2012 CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248),
2013
2014
2015
2016
2017 CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249),
2018
2019
2020
2021 CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250),
2022
2023
2024 CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251),
2025
2026
2027 CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252),
2028
2029
2030 CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253),
2031
2032
2033 CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254),
2034
2035
2036
2037 CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255),
2038
2039
2040 CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256),
2041
2042
2043
2044 CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257),
2045
2046
2047 CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258),
2048
2049
2050 CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259),
2051
2052
2053 CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260),
2054
2055
2056
2057 CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261),
2058
2059
2060 CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262),
2061
2062
2063
2064 CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263),
2065
2066
2067 CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264),
2068
2069
2070 CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265),
2071
2072
2073 CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266),
2074
2075
2076 CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267),
2077
2078
2079 CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268),
2080
2081
2082 CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269),
2083
2084
2085
2086 CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270),
2087
2088
2089 CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271),
2090
2091
2092 CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272),
2093
2094
2095 CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273),
2096
2097
2098 CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274),
2099
2100
2101 CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275),
2102
2103
2104 CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276),
2105 CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277),
2106
2107
2108 CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278),
2109
2110
2111 CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279),
2112
2113
2114 CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280),
2115
2116
2117 CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281),
2118
2119
2120 CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282),
2121
2122
2123 CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283),
2124
2125
2126 CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284),
2127
2128
2129 CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285),
2130
2131
2132 CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286),
2133
2134
2135 CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287),
2136
2137
2138
2139 CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288),
2140
2141
2142 CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289),
2143
2144
2145 CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290),
2146
2147
2148 CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291),
2149 CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292),
2150 CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293),
2151 CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294),
2152 CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295),
2153
2154
2155 CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296),
2156 CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297),
2157
2158
2159
2160
2161
2162 CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298),
2163
2164
2165 CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299),
2166
2167 CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300),
2168
2169
2170 CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301),
2171 CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302),
2172
2173
2174 CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303),
2175 CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304),
2176
2177
2178 CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305),
2179
2180
2181 CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306),
2182
2183
2184 CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307),
2185
2186
2187 CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308),
2188
2189
2190
2191 CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309),
2192
2193
2194
2195 CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310),
2196
2197
2198 CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311),
2199
2200
2201
2202 CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312),
2203
2204
2205 CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313),
2206
2207
2208
2209 CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314),
2210
2211
2212 CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315),
2213
2214
2215
2216 CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316),
2217
2218
2219 CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317),
2220
2221
2222
2223
2224
2225 CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318),
2226
2227
2228 CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319),
2229
2230
2231 CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320),
2232
2233
2234 CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321),
2235
2236
2237 CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322),
2238
2239
2240 CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323),
2241
2242
2243 CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT_MS, CURLOPTTYPE_LONG, 324),
2244
2245
2246 CURLOPT(CURLOPT_ECH, CURLOPTTYPE_STRINGPOINT, 325),
2247
2248
2249 CURLOPT(CURLOPT_TCP_KEEPCNT, CURLOPTTYPE_LONG, 326),
2250
2251 CURLOPT(CURLOPT_UPLOAD_FLAGS, CURLOPTTYPE_LONG, 327),
2252
2253
2254 CURLOPT(CURLOPT_SSL_SIGNATURE_ALGORITHMS, CURLOPTTYPE_STRINGPOINT, 328),
2255
2256 CURLOPT_LASTENTRY
2257 } CURLoption;
2258
2259 #ifndef CURL_NO_OLDIES
2260
2261
2262
2263
2264
2265
2266 #define CURLOPT_POST301 CURLOPT_POSTREDIR
2267
2268
2269
2270
2271 #define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD
2272 #define CURLOPT_FTPAPPEND CURLOPT_APPEND
2273 #define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY
2274 #define CURLOPT_FTP_SSL CURLOPT_USE_SSL
2275
2276
2277
2278 #define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD
2279 #define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL
2280
2281
2282 #define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT
2283
2284
2285 #define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS
2286
2287 #else
2288
2289 #undef CURLOPT_DNS_USE_GLOBAL_CACHE
2290 #endif
2291
2292
2293
2294
2295 #define CURL_IPRESOLVE_WHATEVER 0L
2296
2297 #define CURL_IPRESOLVE_V4 1L
2298 #define CURL_IPRESOLVE_V6 2L
2299
2300
2301 #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER
2302
2303
2304 #define CURL_HTTP_VERSION_NONE 0L
2305
2306
2307 #define CURL_HTTP_VERSION_1_0 1L
2308 #define CURL_HTTP_VERSION_1_1 2L
2309 #define CURL_HTTP_VERSION_2_0 3L
2310 #define CURL_HTTP_VERSION_2TLS 4L
2311
2312 #define CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE 5L
2313
2314 #define CURL_HTTP_VERSION_3 30L
2315
2316
2317
2318 #define CURL_HTTP_VERSION_3ONLY 31L
2319
2320
2321 #define CURL_HTTP_VERSION_LAST 32L
2322
2323
2324
2325
2326 #define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0
2327
2328
2329
2330
2331
2332 #define CURL_RTSPREQ_NONE 0L
2333 #define CURL_RTSPREQ_OPTIONS 1L
2334 #define CURL_RTSPREQ_DESCRIBE 2L
2335 #define CURL_RTSPREQ_ANNOUNCE 3L
2336 #define CURL_RTSPREQ_SETUP 4L
2337 #define CURL_RTSPREQ_PLAY 5L
2338 #define CURL_RTSPREQ_PAUSE 6L
2339 #define CURL_RTSPREQ_TEARDOWN 7L
2340 #define CURL_RTSPREQ_GET_PARAMETER 8L
2341 #define CURL_RTSPREQ_SET_PARAMETER 9L
2342 #define CURL_RTSPREQ_RECORD 10L
2343 #define CURL_RTSPREQ_RECEIVE 11L
2344 #define CURL_RTSPREQ_LAST 12L
2345
2346
2347 #define CURL_NETRC_IGNORED 0L
2348
2349 #define CURL_NETRC_OPTIONAL 1L
2350
2351 #define CURL_NETRC_REQUIRED 2L
2352
2353
2354 enum CURL_NETRC_OPTION {
2355
2356
2357 CURL_NETRC_LAST = 3
2358 };
2359
2360 #define CURL_SSLVERSION_DEFAULT 0L
2361 #define CURL_SSLVERSION_TLSv1 1L
2362 #define CURL_SSLVERSION_SSLv2 2L
2363 #define CURL_SSLVERSION_SSLv3 3L
2364 #define CURL_SSLVERSION_TLSv1_0 4L
2365 #define CURL_SSLVERSION_TLSv1_1 5L
2366 #define CURL_SSLVERSION_TLSv1_2 6L
2367 #define CURL_SSLVERSION_TLSv1_3 7L
2368
2369 #define CURL_SSLVERSION_LAST 8L
2370
2371 #define CURL_SSLVERSION_MAX_NONE 0L
2372 #define CURL_SSLVERSION_MAX_DEFAULT (CURL_SSLVERSION_TLSv1 << 16)
2373 #define CURL_SSLVERSION_MAX_TLSv1_0 (CURL_SSLVERSION_TLSv1_0 << 16)
2374 #define CURL_SSLVERSION_MAX_TLSv1_1 (CURL_SSLVERSION_TLSv1_1 << 16)
2375 #define CURL_SSLVERSION_MAX_TLSv1_2 (CURL_SSLVERSION_TLSv1_2 << 16)
2376 #define CURL_SSLVERSION_MAX_TLSv1_3 (CURL_SSLVERSION_TLSv1_3 << 16)
2377
2378
2379 #define CURL_SSLVERSION_MAX_LAST (CURL_SSLVERSION_LAST << 16)
2380
2381 #define CURL_TLSAUTH_NONE 0L
2382 #define CURL_TLSAUTH_SRP 1L
2383
2384 enum CURL_TLSAUTH {
2385
2386
2387 CURL_TLSAUTH_LAST = 2
2388 };
2389
2390
2391
2392
2393
2394
2395 #define CURL_REDIR_GET_ALL 0L
2396 #define CURL_REDIR_POST_301 1L
2397 #define CURL_REDIR_POST_302 2L
2398 #define CURL_REDIR_POST_303 4L
2399 #define CURL_REDIR_POST_ALL \
2400 (CURL_REDIR_POST_301 | CURL_REDIR_POST_302 | CURL_REDIR_POST_303)
2401
2402 #define CURL_TIMECOND_NONE 0L
2403 #define CURL_TIMECOND_IFMODSINCE 1L
2404 #define CURL_TIMECOND_IFUNMODSINCE 2L
2405 #define CURL_TIMECOND_LASTMOD 3L
2406
2407 typedef enum {
2408
2409
2410
2411 CURL_TIMECOND_LAST = 4
2412 } curl_TimeCond;
2413
2414
2415 #define CURL_ZERO_TERMINATED ((size_t)-1)
2416
2417
2418
2419 CURL_EXTERN int curl_strequal(const char *s1, const char *s2);
2420 CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n);
2421
2422
2423 typedef struct curl_mime curl_mime;
2424 typedef struct curl_mimepart curl_mimepart;
2425
2426
2427 #define CURLMIMEOPT_FORMESCAPE (1L << 0)
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437 CURL_EXTERN curl_mime *curl_mime_init(CURL *easy);
2438
2439
2440
2441
2442
2443
2444
2445
2446 CURL_EXTERN void curl_mime_free(curl_mime *mime);
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456 CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime);
2457
2458
2459
2460
2461
2462
2463
2464
2465 CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name);
2466
2467
2468
2469
2470
2471
2472
2473
2474 CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part,
2475 const char *filename);
2476
2477
2478
2479
2480
2481
2482
2483
2484 CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype);
2485
2486
2487
2488
2489
2490
2491
2492
2493 CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part,
2494 const char *encoding);
2495
2496
2497
2498
2499
2500
2501
2502
2503 CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part,
2504 const char *data, size_t datasize);
2505
2506
2507
2508
2509
2510
2511
2512
2513 CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part,
2514 const char *filename);
2515
2516
2517
2518
2519
2520
2521
2522
2523 CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part,
2524 curl_off_t datasize,
2525 curl_read_callback readfunc,
2526 curl_seek_callback seekfunc,
2527 curl_free_callback freefunc,
2528 void *arg);
2529
2530
2531
2532
2533
2534
2535
2536
2537 CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part,
2538 curl_mime *subparts);
2539
2540
2541
2542
2543
2544
2545
2546 CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part,
2547 struct curl_slist *headers,
2548 int take_ownership);
2549
2550 typedef enum {
2551
2552 CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""),
2553 CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"),
2554 CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"),
2555 CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""),
2556 CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2557 CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2558 CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2559 CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"),
2560 CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""),
2561 CURLFORM_OBSOLETE,
2562 CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"),
2563
2564 CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"),
2565 CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2566 CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2567
2568 CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"),
2569 CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"),
2570 CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"),
2571 CURLFORM_END,
2572 CURLFORM_OBSOLETE2,
2573
2574 CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"),
2575 CURLFORM_CONTENTLEN
2576 CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"),
2577
2578 CURLFORM_LASTENTRY
2579 } CURLformoption;
2580
2581
2582 struct curl_forms {
2583 CURLformoption option;
2584 const char *value;
2585 };
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603 typedef enum {
2604 CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""),
2605
2606 CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""),
2607 CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""),
2608 CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""),
2609 CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""),
2610 CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""),
2611 CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""),
2612
2613 CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""),
2614
2615 CURL_FORMADD_LAST
2616 } CURLFORMcode;
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627 CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()")
2628 curl_formadd(struct curl_httppost **httppost,
2629 struct curl_httppost **last_post,
2630 ...);
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640 typedef size_t (*curl_formget_callback)(void *arg, const char *buf,
2641 size_t len);
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653 CURL_EXTERN int CURL_DEPRECATED(7.56.0, "")
2654 curl_formget(struct curl_httppost *form, void *arg,
2655 curl_formget_callback append);
2656
2657
2658
2659
2660
2661
2662
2663 CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()")
2664 curl_formfree(struct curl_httppost *form);
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674 CURL_EXTERN char *curl_getenv(const char *variable);
2675
2676
2677
2678
2679
2680
2681
2682
2683 CURL_EXTERN char *curl_version(void);
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694 CURL_EXTERN char *curl_easy_escape(CURL *handle,
2695 const char *string,
2696 int length);
2697
2698
2699 CURL_EXTERN char *curl_escape(const char *string,
2700 int length);
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713 CURL_EXTERN char *curl_easy_unescape(CURL *handle,
2714 const char *string,
2715 int length,
2716 int *outlength);
2717
2718
2719 CURL_EXTERN char *curl_unescape(const char *string,
2720 int length);
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730 CURL_EXTERN void curl_free(void *p);
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743 CURL_EXTERN CURLcode curl_global_init(long flags);
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758 CURL_EXTERN CURLcode curl_global_init_mem(long flags,
2759 curl_malloc_callback m,
2760 curl_free_callback f,
2761 curl_realloc_callback r,
2762 curl_strdup_callback s,
2763 curl_calloc_callback c);
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773 CURL_EXTERN void curl_global_cleanup(void);
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786 CURL_EXTERN CURLcode curl_global_trace(const char *config);
2787
2788
2789 struct curl_slist {
2790 char *data;
2791 struct curl_slist *next;
2792 };
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820 struct curl_ssl_backend {
2821 curl_sslbackend id;
2822 const char *name;
2823 };
2824 typedef struct curl_ssl_backend curl_ssl_backend;
2825
2826 typedef enum {
2827 CURLSSLSET_OK = 0,
2828 CURLSSLSET_UNKNOWN_BACKEND,
2829 CURLSSLSET_TOO_LATE,
2830 CURLSSLSET_NO_BACKENDS
2831 } CURLsslset;
2832
2833 CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name,
2834 const curl_ssl_backend ***avail);
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844 CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list,
2845 const char *data);
2846
2847
2848
2849
2850
2851
2852
2853
2854 CURL_EXTERN void curl_slist_free_all(struct curl_slist *list);
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865 CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
2866
2867
2868
2869 struct curl_certinfo {
2870 int num_of_certs;
2871 struct curl_slist **certinfo;
2872
2873
2874
2875 };
2876
2877
2878
2879
2880 struct curl_tlssessioninfo {
2881 curl_sslbackend backend;
2882 void *internals;
2883 };
2884
2885 #define CURLINFO_STRING 0x100000
2886 #define CURLINFO_LONG 0x200000
2887 #define CURLINFO_DOUBLE 0x300000
2888 #define CURLINFO_SLIST 0x400000
2889 #define CURLINFO_PTR 0x400000
2890 #define CURLINFO_SOCKET 0x500000
2891 #define CURLINFO_OFF_T 0x600000
2892 #define CURLINFO_MASK 0x0fffff
2893 #define CURLINFO_TYPEMASK 0xf00000
2894
2895 typedef enum {
2896 CURLINFO_NONE,
2897 CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1,
2898 CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
2899 CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3,
2900 CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4,
2901 CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5,
2902 CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
2903 CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T")
2904 = CURLINFO_DOUBLE + 7,
2905 CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7,
2906 CURLINFO_SIZE_DOWNLOAD
2907 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T")
2908 = CURLINFO_DOUBLE + 8,
2909 CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8,
2910 CURLINFO_SPEED_DOWNLOAD
2911 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T")
2912 = CURLINFO_DOUBLE + 9,
2913 CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9,
2914 CURLINFO_SPEED_UPLOAD
2915 CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T")
2916 = CURLINFO_DOUBLE + 10,
2917 CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10,
2918 CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11,
2919 CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12,
2920 CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13,
2921 CURLINFO_FILETIME = CURLINFO_LONG + 14,
2922 CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14,
2923 CURLINFO_CONTENT_LENGTH_DOWNLOAD
2924 CURL_DEPRECATED(7.55.0,
2925 "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T")
2926 = CURLINFO_DOUBLE + 15,
2927 CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15,
2928 CURLINFO_CONTENT_LENGTH_UPLOAD
2929 CURL_DEPRECATED(7.55.0,
2930 "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T")
2931 = CURLINFO_DOUBLE + 16,
2932 CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16,
2933 CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
2934 CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
2935 CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
2936 CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
2937 CURLINFO_PRIVATE = CURLINFO_STRING + 21,
2938 CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22,
2939 CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23,
2940 CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24,
2941 CURLINFO_OS_ERRNO = CURLINFO_LONG + 25,
2942 CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26,
2943 CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
2944 CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
2945 CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET")
2946 = CURLINFO_LONG + 29,
2947 CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
2948 CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31,
2949 CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32,
2950 CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33,
2951 CURLINFO_CERTINFO = CURLINFO_PTR + 34,
2952 CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35,
2953 CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36,
2954 CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37,
2955 CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38,
2956 CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39,
2957 CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40,
2958 CURLINFO_LOCAL_IP = CURLINFO_STRING + 41,
2959 CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42,
2960 CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR")
2961 = CURLINFO_PTR + 43,
2962 CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44,
2963 CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45,
2964 CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46,
2965 CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47,
2966 CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME")
2967 = CURLINFO_LONG + 48,
2968 CURLINFO_SCHEME = CURLINFO_STRING + 49,
2969 CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50,
2970 CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51,
2971 CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52,
2972 CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53,
2973 CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54,
2974 CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55,
2975 CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56,
2976 CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57,
2977 CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58,
2978 CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59,
2979 CURLINFO_REFERER = CURLINFO_STRING + 60,
2980 CURLINFO_CAINFO = CURLINFO_STRING + 61,
2981 CURLINFO_CAPATH = CURLINFO_STRING + 62,
2982 CURLINFO_XFER_ID = CURLINFO_OFF_T + 63,
2983 CURLINFO_CONN_ID = CURLINFO_OFF_T + 64,
2984 CURLINFO_QUEUE_TIME_T = CURLINFO_OFF_T + 65,
2985 CURLINFO_USED_PROXY = CURLINFO_LONG + 66,
2986 CURLINFO_POSTTRANSFER_TIME_T = CURLINFO_OFF_T + 67,
2987 CURLINFO_EARLYDATA_SENT_T = CURLINFO_OFF_T + 68,
2988 CURLINFO_HTTPAUTH_USED = CURLINFO_LONG + 69,
2989 CURLINFO_PROXYAUTH_USED = CURLINFO_LONG + 70,
2990 CURLINFO_LASTONE = 70
2991 } CURLINFO;
2992
2993
2994
2995 #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
2996
2997 typedef enum {
2998 CURLCLOSEPOLICY_NONE,
2999
3000 CURLCLOSEPOLICY_OLDEST,
3001 CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
3002 CURLCLOSEPOLICY_LEAST_TRAFFIC,
3003 CURLCLOSEPOLICY_SLOWEST,
3004 CURLCLOSEPOLICY_CALLBACK,
3005
3006 CURLCLOSEPOLICY_LAST
3007 } curl_closepolicy;
3008
3009 #define CURL_GLOBAL_SSL (1 << 0)
3010 #define CURL_GLOBAL_WIN32 (1 << 1)
3011 #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32)
3012 #define CURL_GLOBAL_NOTHING 0
3013 #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
3014 #define CURL_GLOBAL_ACK_EINTR (1 << 2)
3015
3016
3017
3018
3019
3020
3021 typedef enum {
3022 CURL_LOCK_DATA_NONE = 0,
3023
3024
3025
3026
3027 CURL_LOCK_DATA_SHARE,
3028 CURL_LOCK_DATA_COOKIE,
3029 CURL_LOCK_DATA_DNS,
3030 CURL_LOCK_DATA_SSL_SESSION,
3031 CURL_LOCK_DATA_CONNECT,
3032 CURL_LOCK_DATA_PSL,
3033 CURL_LOCK_DATA_HSTS,
3034 CURL_LOCK_DATA_LAST
3035 } curl_lock_data;
3036
3037
3038 typedef enum {
3039 CURL_LOCK_ACCESS_NONE = 0,
3040 CURL_LOCK_ACCESS_SHARED = 1,
3041 CURL_LOCK_ACCESS_SINGLE = 2,
3042 CURL_LOCK_ACCESS_LAST
3043 } curl_lock_access;
3044
3045 typedef void (*curl_lock_function)(CURL *handle,
3046 curl_lock_data data,
3047 curl_lock_access locktype,
3048 void *userptr);
3049 typedef void (*curl_unlock_function)(CURL *handle,
3050 curl_lock_data data,
3051 void *userptr);
3052
3053 typedef enum {
3054 CURLSHE_OK,
3055 CURLSHE_BAD_OPTION,
3056 CURLSHE_IN_USE,
3057 CURLSHE_INVALID,
3058 CURLSHE_NOMEM,
3059 CURLSHE_NOT_BUILT_IN,
3060 CURLSHE_LAST
3061 } CURLSHcode;
3062
3063 typedef enum {
3064 CURLSHOPT_NONE,
3065 CURLSHOPT_SHARE,
3066 CURLSHOPT_UNSHARE,
3067 CURLSHOPT_LOCKFUNC,
3068 CURLSHOPT_UNLOCKFUNC,
3069 CURLSHOPT_USERDATA,
3070
3071 CURLSHOPT_LAST
3072 } CURLSHoption;
3073
3074 CURL_EXTERN CURLSH *curl_share_init(void);
3075 CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option,
3076 ...);
3077 CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share);
3078
3079
3080
3081
3082
3083 typedef enum {
3084 CURLVERSION_FIRST,
3085 CURLVERSION_SECOND,
3086 CURLVERSION_THIRD,
3087 CURLVERSION_FOURTH,
3088 CURLVERSION_FIFTH,
3089 CURLVERSION_SIXTH,
3090 CURLVERSION_SEVENTH,
3091 CURLVERSION_EIGHTH,
3092 CURLVERSION_NINTH,
3093 CURLVERSION_TENTH,
3094 CURLVERSION_ELEVENTH,
3095 CURLVERSION_TWELFTH,
3096 CURLVERSION_LAST
3097 } CURLversion;
3098
3099
3100
3101
3102
3103
3104 #define CURLVERSION_NOW CURLVERSION_TWELFTH
3105
3106 struct curl_version_info_data {
3107 CURLversion age;
3108 const char *version;
3109 unsigned int version_num;
3110 const char *host;
3111 int features;
3112 const char *ssl_version;
3113 long ssl_version_num;
3114 const char *libz_version;
3115
3116 const char * const *protocols;
3117
3118
3119 const char *ares;
3120 int ares_num;
3121
3122
3123 const char *libidn;
3124
3125
3126
3127
3128 int iconv_ver_num;
3129
3130 const char *libssh_version;
3131
3132
3133 unsigned int brotli_ver_num;
3134
3135 const char *brotli_version;
3136
3137
3138 unsigned int nghttp2_ver_num;
3139
3140 const char *nghttp2_version;
3141 const char *quic_version;
3142
3143
3144
3145 const char *cainfo;
3146
3147 const char *capath;
3148
3149
3150
3151 unsigned int zstd_ver_num;
3152
3153 const char *zstd_version;
3154
3155
3156 const char *hyper_version;
3157
3158
3159 const char *gsasl_version;
3160
3161
3162
3163 const char * const *feature_names;
3164
3165
3166 const char *rtmp_version;
3167 };
3168 typedef struct curl_version_info_data curl_version_info_data;
3169
3170 #define CURL_VERSION_IPV6 (1<<0)
3171 #define CURL_VERSION_KERBEROS4 (1<<1)
3172
3173 #define CURL_VERSION_SSL (1<<2)
3174 #define CURL_VERSION_LIBZ (1<<3)
3175 #define CURL_VERSION_NTLM (1<<4)
3176 #define CURL_VERSION_GSSNEGOTIATE (1<<5)
3177
3178 #define CURL_VERSION_DEBUG (1<<6)
3179 #define CURL_VERSION_ASYNCHDNS (1<<7)
3180 #define CURL_VERSION_SPNEGO (1<<8)
3181 #define CURL_VERSION_LARGEFILE (1<<9)
3182 #define CURL_VERSION_IDN (1<<10)
3183
3184 #define CURL_VERSION_SSPI (1<<11)
3185 #define CURL_VERSION_CONV (1<<12)
3186 #define CURL_VERSION_CURLDEBUG (1<<13)
3187 #define CURL_VERSION_TLSAUTH_SRP (1<<14)
3188 #define CURL_VERSION_NTLM_WB (1<<15)
3189
3190 #define CURL_VERSION_HTTP2 (1<<16)
3191 #define CURL_VERSION_GSSAPI (1<<17)
3192 #define CURL_VERSION_KERBEROS5 (1<<18)
3193 #define CURL_VERSION_UNIX_SOCKETS (1<<19)
3194 #define CURL_VERSION_PSL (1<<20)
3195
3196 #define CURL_VERSION_HTTPS_PROXY (1<<21)
3197 #define CURL_VERSION_MULTI_SSL (1<<22)
3198 #define CURL_VERSION_BROTLI (1<<23)
3199 #define CURL_VERSION_ALTSVC (1<<24)
3200 #define CURL_VERSION_HTTP3 (1<<25)
3201 #define CURL_VERSION_ZSTD (1<<26)
3202 #define CURL_VERSION_UNICODE (1<<27)
3203 #define CURL_VERSION_HSTS (1<<28)
3204 #define CURL_VERSION_GSASL (1<<29)
3205 #define CURL_VERSION_THREADSAFE (1<<30)
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215 CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226 CURL_EXTERN const char *curl_easy_strerror(CURLcode);
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237 CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248 CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
3249
3250 #define CURLPAUSE_RECV (1 << 0)
3251 #define CURLPAUSE_RECV_CONT (0)
3252
3253 #define CURLPAUSE_SEND (1 << 2)
3254 #define CURLPAUSE_SEND_CONT (0)
3255
3256 #define CURLPAUSE_ALL (CURLPAUSE_RECV | CURLPAUSE_SEND)
3257 #define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT | CURLPAUSE_SEND_CONT)
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267 CURL_EXTERN CURLcode curl_easy_ssls_import(CURL *handle,
3268 const char *session_key,
3269 const unsigned char *shmac,
3270 size_t shmac_len,
3271 const unsigned char *sdata,
3272 size_t sdata_len);
3273
3274
3275
3276 typedef CURLcode curl_ssls_export_cb(CURL *handle,
3277 void *userptr,
3278 const char *session_key,
3279 const unsigned char *shmac,
3280 size_t shmac_len,
3281 const unsigned char *sdata,
3282 size_t sdata_len,
3283 curl_off_t valid_until,
3284 int ietf_tls_id,
3285 const char *alpn,
3286 size_t earlydata_max);
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298 CURL_EXTERN CURLcode curl_easy_ssls_export(CURL *handle,
3299 curl_ssls_export_cb *export_fn,
3300 void *userptr);
3301
3302 #ifdef __cplusplus
3303 }
3304 #endif
3305
3306
3307
3308 #include "easy.h" /* nothing in curl is fun without the easy stuff */
3309 #include "multi.h"
3310 #include "urlapi.h"
3311 #include "options.h"
3312 #include "header.h"
3313 #include "websockets.h"
3314 #include "mprintf.h"
3315
3316
3317 #if ((defined(__GNUC__) && defined(__GNUC_MINOR__) && \
3318 ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) || \
3319 (defined(__clang__) && __clang_major__ >= 14)) && \
3320 !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK)
3321 #include "typecheck-gcc.h"
3322 #else
3323 #if defined(__STDC__) && (__STDC__ >= 1)
3324
3325
3326
3327 #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param)
3328 #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg)
3329 #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
3330 #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
3331 #endif
3332 #endif
3333
3334 #endif