jpayne@69: #ifndef CURLINC_CURL_H jpayne@69: #define CURLINC_CURL_H jpayne@69: /*************************************************************************** jpayne@69: * _ _ ____ _ jpayne@69: * Project ___| | | | _ \| | jpayne@69: * / __| | | | |_) | | jpayne@69: * | (__| |_| | _ <| |___ jpayne@69: * \___|\___/|_| \_\_____| jpayne@69: * jpayne@69: * Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. jpayne@69: * jpayne@69: * This software is licensed as described in the file COPYING, which jpayne@69: * you should have received as part of this distribution. The terms jpayne@69: * are also available at https://curl.se/docs/copyright.html. jpayne@69: * jpayne@69: * You may opt to use, copy, modify, merge, publish, distribute and/or sell jpayne@69: * copies of the Software, and permit persons to whom the Software is jpayne@69: * furnished to do so, under the terms of the COPYING file. jpayne@69: * jpayne@69: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY jpayne@69: * KIND, either express or implied. jpayne@69: * jpayne@69: * SPDX-License-Identifier: curl jpayne@69: * jpayne@69: ***************************************************************************/ jpayne@69: jpayne@69: /* jpayne@69: * If you have libcurl problems, all docs and details are found here: jpayne@69: * https://curl.se/libcurl/ jpayne@69: */ jpayne@69: jpayne@69: #ifdef CURL_NO_OLDIES jpayne@69: #define CURL_STRICTER jpayne@69: #endif jpayne@69: jpayne@69: /* Compile-time deprecation macros. */ jpayne@69: #if defined(__GNUC__) && (__GNUC__ >= 6) && \ jpayne@69: !defined(__INTEL_COMPILER) && \ jpayne@69: !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) jpayne@69: #define CURL_DEPRECATED(version, message) \ jpayne@69: __attribute__((deprecated("since " # version ". " message))) jpayne@69: #define CURL_IGNORE_DEPRECATION(statements) \ jpayne@69: _Pragma("GCC diagnostic push") \ jpayne@69: _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ jpayne@69: statements \ jpayne@69: _Pragma("GCC diagnostic pop") jpayne@69: #else jpayne@69: #define CURL_DEPRECATED(version, message) jpayne@69: #define CURL_IGNORE_DEPRECATION(statements) statements jpayne@69: #endif jpayne@69: jpayne@69: #include "curlver.h" /* libcurl version defines */ jpayne@69: #include "system.h" /* determine things run-time */ jpayne@69: jpayne@69: /* jpayne@69: * Define CURL_WIN32 when build target is Win32 API jpayne@69: */ jpayne@69: jpayne@69: #if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ jpayne@69: !defined(__SYMBIAN32__) jpayne@69: #define CURL_WIN32 jpayne@69: #endif jpayne@69: jpayne@69: #include jpayne@69: #include jpayne@69: jpayne@69: #if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) jpayne@69: /* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ jpayne@69: #include jpayne@69: #endif jpayne@69: jpayne@69: /* The include stuff here below is mainly for time_t! */ jpayne@69: #include jpayne@69: #include jpayne@69: jpayne@69: #if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) jpayne@69: #if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ jpayne@69: defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) jpayne@69: /* The check above prevents the winsock2 inclusion if winsock.h already was jpayne@69: included, since they can't co-exist without problems */ jpayne@69: #include jpayne@69: #include jpayne@69: #endif jpayne@69: #endif jpayne@69: jpayne@69: /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish jpayne@69: libc5-based Linux systems. Only include it on systems that are known to jpayne@69: require it! */ jpayne@69: #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ jpayne@69: defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ jpayne@69: defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ jpayne@69: defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ jpayne@69: (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ jpayne@69: (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ jpayne@69: defined(__sun__) || defined(__serenity__) jpayne@69: #include jpayne@69: #endif jpayne@69: jpayne@69: #if !defined(CURL_WIN32) && !defined(_WIN32_WCE) jpayne@69: #include jpayne@69: #endif jpayne@69: jpayne@69: #if !defined(CURL_WIN32) jpayne@69: #include jpayne@69: #endif jpayne@69: jpayne@69: /* Compatibility for non-Clang compilers */ jpayne@69: #ifndef __has_declspec_attribute jpayne@69: # define __has_declspec_attribute(x) 0 jpayne@69: #endif jpayne@69: jpayne@69: #ifdef __cplusplus jpayne@69: extern "C" { jpayne@69: #endif jpayne@69: jpayne@69: #if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) jpayne@69: typedef struct Curl_easy CURL; jpayne@69: typedef struct Curl_share CURLSH; jpayne@69: #else jpayne@69: typedef void CURL; jpayne@69: typedef void CURLSH; jpayne@69: #endif jpayne@69: jpayne@69: /* jpayne@69: * libcurl external API function linkage decorations. jpayne@69: */ jpayne@69: jpayne@69: #ifdef CURL_STATICLIB jpayne@69: # define CURL_EXTERN jpayne@69: #elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ jpayne@69: (__has_declspec_attribute(dllexport) && \ jpayne@69: __has_declspec_attribute(dllimport)) jpayne@69: # if defined(BUILDING_LIBCURL) jpayne@69: # define CURL_EXTERN __declspec(dllexport) jpayne@69: # else jpayne@69: # define CURL_EXTERN __declspec(dllimport) jpayne@69: # endif jpayne@69: #elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) jpayne@69: # define CURL_EXTERN CURL_EXTERN_SYMBOL jpayne@69: #else jpayne@69: # define CURL_EXTERN jpayne@69: #endif jpayne@69: jpayne@69: #ifndef curl_socket_typedef jpayne@69: /* socket typedef */ jpayne@69: #if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) jpayne@69: typedef SOCKET curl_socket_t; jpayne@69: #define CURL_SOCKET_BAD INVALID_SOCKET jpayne@69: #else jpayne@69: typedef int curl_socket_t; jpayne@69: #define CURL_SOCKET_BAD -1 jpayne@69: #endif jpayne@69: #define curl_socket_typedef jpayne@69: #endif /* curl_socket_typedef */ jpayne@69: jpayne@69: /* enum for the different supported SSL backends */ jpayne@69: typedef enum { jpayne@69: CURLSSLBACKEND_NONE = 0, jpayne@69: CURLSSLBACKEND_OPENSSL = 1, jpayne@69: CURLSSLBACKEND_GNUTLS = 2, jpayne@69: CURLSSLBACKEND_NSS = 3, jpayne@69: CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ jpayne@69: CURLSSLBACKEND_GSKIT = 5, jpayne@69: CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, jpayne@69: CURLSSLBACKEND_WOLFSSL = 7, jpayne@69: CURLSSLBACKEND_SCHANNEL = 8, jpayne@69: CURLSSLBACKEND_SECURETRANSPORT = 9, jpayne@69: CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, jpayne@69: CURLSSLBACKEND_MBEDTLS = 11, jpayne@69: CURLSSLBACKEND_MESALINK = 12, jpayne@69: CURLSSLBACKEND_BEARSSL = 13, jpayne@69: CURLSSLBACKEND_RUSTLS = 14 jpayne@69: } curl_sslbackend; jpayne@69: jpayne@69: /* aliases for library clones and renames */ jpayne@69: #define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL jpayne@69: #define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL jpayne@69: jpayne@69: /* deprecated names: */ jpayne@69: #define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL jpayne@69: #define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT jpayne@69: jpayne@69: struct curl_httppost { jpayne@69: struct curl_httppost *next; /* next entry in the list */ jpayne@69: char *name; /* pointer to allocated name */ jpayne@69: long namelength; /* length of name length */ jpayne@69: char *contents; /* pointer to allocated data contents */ jpayne@69: long contentslength; /* length of contents field, see also jpayne@69: CURL_HTTPPOST_LARGE */ jpayne@69: char *buffer; /* pointer to allocated buffer contents */ jpayne@69: long bufferlength; /* length of buffer field */ jpayne@69: char *contenttype; /* Content-Type */ jpayne@69: struct curl_slist *contentheader; /* list of extra headers for this form */ jpayne@69: struct curl_httppost *more; /* if one field name has more than one jpayne@69: file, this link should link to following jpayne@69: files */ jpayne@69: long flags; /* as defined below */ jpayne@69: jpayne@69: /* specified content is a file name */ jpayne@69: #define CURL_HTTPPOST_FILENAME (1<<0) jpayne@69: /* specified content is a file name */ jpayne@69: #define CURL_HTTPPOST_READFILE (1<<1) jpayne@69: /* name is only stored pointer do not free in formfree */ jpayne@69: #define CURL_HTTPPOST_PTRNAME (1<<2) jpayne@69: /* contents is only stored pointer do not free in formfree */ jpayne@69: #define CURL_HTTPPOST_PTRCONTENTS (1<<3) jpayne@69: /* upload file from buffer */ jpayne@69: #define CURL_HTTPPOST_BUFFER (1<<4) jpayne@69: /* upload file from pointer contents */ jpayne@69: #define CURL_HTTPPOST_PTRBUFFER (1<<5) jpayne@69: /* upload file contents by using the regular read callback to get the data and jpayne@69: pass the given pointer as custom pointer */ jpayne@69: #define CURL_HTTPPOST_CALLBACK (1<<6) jpayne@69: /* use size in 'contentlen', added in 7.46.0 */ jpayne@69: #define CURL_HTTPPOST_LARGE (1<<7) jpayne@69: jpayne@69: char *showfilename; /* The file name to show. If not set, the jpayne@69: actual file name will be used (if this jpayne@69: is a file part) */ jpayne@69: void *userp; /* custom pointer used for jpayne@69: HTTPPOST_CALLBACK posts */ jpayne@69: curl_off_t contentlen; /* alternative length of contents jpayne@69: field. Used if CURL_HTTPPOST_LARGE is jpayne@69: set. Added in 7.46.0 */ jpayne@69: }; jpayne@69: jpayne@69: jpayne@69: /* This is a return code for the progress callback that, when returned, will jpayne@69: signal libcurl to continue executing the default progress function */ jpayne@69: #define CURL_PROGRESSFUNC_CONTINUE 0x10000001 jpayne@69: jpayne@69: /* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now jpayne@69: considered deprecated but was the only choice up until 7.31.0 */ jpayne@69: typedef int (*curl_progress_callback)(void *clientp, jpayne@69: double dltotal, jpayne@69: double dlnow, jpayne@69: double ultotal, jpayne@69: double ulnow); jpayne@69: jpayne@69: /* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced jpayne@69: in 7.32.0, avoids the use of floating point numbers and provides more jpayne@69: detailed information. */ jpayne@69: typedef int (*curl_xferinfo_callback)(void *clientp, jpayne@69: curl_off_t dltotal, jpayne@69: curl_off_t dlnow, jpayne@69: curl_off_t ultotal, jpayne@69: curl_off_t ulnow); jpayne@69: jpayne@69: #ifndef CURL_MAX_READ_SIZE jpayne@69: /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ jpayne@69: #define CURL_MAX_READ_SIZE 524288 jpayne@69: #endif jpayne@69: jpayne@69: #ifndef CURL_MAX_WRITE_SIZE jpayne@69: /* Tests have proven that 20K is a very bad buffer size for uploads on jpayne@69: Windows, while 16K for some odd reason performed a lot better. jpayne@69: We do the ifndef check to allow this value to easier be changed at build jpayne@69: time for those who feel adventurous. The practical minimum is about jpayne@69: 400 bytes since libcurl uses a buffer of this size as a scratch area jpayne@69: (unrelated to network send operations). */ jpayne@69: #define CURL_MAX_WRITE_SIZE 16384 jpayne@69: #endif jpayne@69: jpayne@69: #ifndef CURL_MAX_HTTP_HEADER jpayne@69: /* The only reason to have a max limit for this is to avoid the risk of a bad jpayne@69: server feeding libcurl with a never-ending header that will cause reallocs jpayne@69: infinitely */ jpayne@69: #define CURL_MAX_HTTP_HEADER (100*1024) jpayne@69: #endif jpayne@69: jpayne@69: /* This is a magic return code for the write callback that, when returned, jpayne@69: will signal libcurl to pause receiving on the current transfer. */ jpayne@69: #define CURL_WRITEFUNC_PAUSE 0x10000001 jpayne@69: jpayne@69: /* This is a magic return code for the write callback that, when returned, jpayne@69: will signal an error from the callback. */ jpayne@69: #define CURL_WRITEFUNC_ERROR 0xFFFFFFFF jpayne@69: jpayne@69: typedef size_t (*curl_write_callback)(char *buffer, jpayne@69: size_t size, jpayne@69: size_t nitems, jpayne@69: void *outstream); jpayne@69: jpayne@69: /* This callback will be called when a new resolver request is made */ jpayne@69: typedef int (*curl_resolver_start_callback)(void *resolver_state, jpayne@69: void *reserved, void *userdata); jpayne@69: jpayne@69: /* enumeration of file types */ jpayne@69: typedef enum { jpayne@69: CURLFILETYPE_FILE = 0, jpayne@69: CURLFILETYPE_DIRECTORY, jpayne@69: CURLFILETYPE_SYMLINK, jpayne@69: CURLFILETYPE_DEVICE_BLOCK, jpayne@69: CURLFILETYPE_DEVICE_CHAR, jpayne@69: CURLFILETYPE_NAMEDPIPE, jpayne@69: CURLFILETYPE_SOCKET, jpayne@69: CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ jpayne@69: jpayne@69: CURLFILETYPE_UNKNOWN /* should never occur */ jpayne@69: } curlfiletype; jpayne@69: jpayne@69: #define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) jpayne@69: #define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) jpayne@69: #define CURLFINFOFLAG_KNOWN_TIME (1<<2) jpayne@69: #define CURLFINFOFLAG_KNOWN_PERM (1<<3) jpayne@69: #define CURLFINFOFLAG_KNOWN_UID (1<<4) jpayne@69: #define CURLFINFOFLAG_KNOWN_GID (1<<5) jpayne@69: #define CURLFINFOFLAG_KNOWN_SIZE (1<<6) jpayne@69: #define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) jpayne@69: jpayne@69: /* Information about a single file, used when doing FTP wildcard matching */ jpayne@69: struct curl_fileinfo { jpayne@69: char *filename; jpayne@69: curlfiletype filetype; jpayne@69: time_t time; /* always zero! */ jpayne@69: unsigned int perm; jpayne@69: int uid; jpayne@69: int gid; jpayne@69: curl_off_t size; jpayne@69: long int hardlinks; jpayne@69: jpayne@69: struct { jpayne@69: /* If some of these fields is not NULL, it is a pointer to b_data. */ jpayne@69: char *time; jpayne@69: char *perm; jpayne@69: char *user; jpayne@69: char *group; jpayne@69: char *target; /* pointer to the target filename of a symlink */ jpayne@69: } strings; jpayne@69: jpayne@69: unsigned int flags; jpayne@69: jpayne@69: /* used internally */ jpayne@69: char *b_data; jpayne@69: size_t b_size; jpayne@69: size_t b_used; jpayne@69: }; jpayne@69: jpayne@69: /* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ jpayne@69: #define CURL_CHUNK_BGN_FUNC_OK 0 jpayne@69: #define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ jpayne@69: #define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ jpayne@69: jpayne@69: /* if splitting of data transfer is enabled, this callback is called before jpayne@69: download of an individual chunk started. Note that parameter "remains" works jpayne@69: only for FTP wildcard downloading (for now), otherwise is not used */ jpayne@69: typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, jpayne@69: void *ptr, jpayne@69: int remains); jpayne@69: jpayne@69: /* return codes for CURLOPT_CHUNK_END_FUNCTION */ jpayne@69: #define CURL_CHUNK_END_FUNC_OK 0 jpayne@69: #define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ jpayne@69: jpayne@69: /* If splitting of data transfer is enabled this callback is called after jpayne@69: download of an individual chunk finished. jpayne@69: Note! After this callback was set then it have to be called FOR ALL chunks. jpayne@69: Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. jpayne@69: This is the reason why we don't need "transfer_info" parameter in this jpayne@69: callback and we are not interested in "remains" parameter too. */ jpayne@69: typedef long (*curl_chunk_end_callback)(void *ptr); jpayne@69: jpayne@69: /* return codes for FNMATCHFUNCTION */ jpayne@69: #define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ jpayne@69: #define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ jpayne@69: #define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ jpayne@69: jpayne@69: /* callback type for wildcard downloading pattern matching. If the jpayne@69: string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ jpayne@69: typedef int (*curl_fnmatch_callback)(void *ptr, jpayne@69: const char *pattern, jpayne@69: const char *string); jpayne@69: jpayne@69: /* These are the return codes for the seek callbacks */ jpayne@69: #define CURL_SEEKFUNC_OK 0 jpayne@69: #define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ jpayne@69: #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so jpayne@69: libcurl might try other means instead */ jpayne@69: typedef int (*curl_seek_callback)(void *instream, jpayne@69: curl_off_t offset, jpayne@69: int origin); /* 'whence' */ jpayne@69: jpayne@69: /* This is a return code for the read callback that, when returned, will jpayne@69: signal libcurl to immediately abort the current transfer. */ jpayne@69: #define CURL_READFUNC_ABORT 0x10000000 jpayne@69: /* This is a return code for the read callback that, when returned, will jpayne@69: signal libcurl to pause sending data on the current transfer. */ jpayne@69: #define CURL_READFUNC_PAUSE 0x10000001 jpayne@69: jpayne@69: /* Return code for when the trailing headers' callback has terminated jpayne@69: without any errors */ jpayne@69: #define CURL_TRAILERFUNC_OK 0 jpayne@69: /* Return code for when was an error in the trailing header's list and we jpayne@69: want to abort the request */ jpayne@69: #define CURL_TRAILERFUNC_ABORT 1 jpayne@69: jpayne@69: typedef size_t (*curl_read_callback)(char *buffer, jpayne@69: size_t size, jpayne@69: size_t nitems, jpayne@69: void *instream); jpayne@69: jpayne@69: typedef int (*curl_trailer_callback)(struct curl_slist **list, jpayne@69: void *userdata); jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ jpayne@69: CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ jpayne@69: CURLSOCKTYPE_LAST /* never use */ jpayne@69: } curlsocktype; jpayne@69: jpayne@69: /* The return code from the sockopt_callback can signal information back jpayne@69: to libcurl: */ jpayne@69: #define CURL_SOCKOPT_OK 0 jpayne@69: #define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return jpayne@69: CURLE_ABORTED_BY_CALLBACK */ jpayne@69: #define CURL_SOCKOPT_ALREADY_CONNECTED 2 jpayne@69: jpayne@69: typedef int (*curl_sockopt_callback)(void *clientp, jpayne@69: curl_socket_t curlfd, jpayne@69: curlsocktype purpose); jpayne@69: jpayne@69: struct curl_sockaddr { jpayne@69: int family; jpayne@69: int socktype; jpayne@69: int protocol; jpayne@69: unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it jpayne@69: turned really ugly and painful on the systems that jpayne@69: lack this type */ jpayne@69: struct sockaddr addr; jpayne@69: }; jpayne@69: jpayne@69: typedef curl_socket_t jpayne@69: (*curl_opensocket_callback)(void *clientp, jpayne@69: curlsocktype purpose, jpayne@69: struct curl_sockaddr *address); jpayne@69: jpayne@69: typedef int jpayne@69: (*curl_closesocket_callback)(void *clientp, curl_socket_t item); jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLIOE_OK, /* I/O operation successful */ jpayne@69: CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ jpayne@69: CURLIOE_FAILRESTART, /* failed to restart the read */ jpayne@69: CURLIOE_LAST /* never use */ jpayne@69: } curlioerr; jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLIOCMD_NOP, /* no operation */ jpayne@69: CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ jpayne@69: CURLIOCMD_LAST /* never use */ jpayne@69: } curliocmd; jpayne@69: jpayne@69: typedef curlioerr (*curl_ioctl_callback)(CURL *handle, jpayne@69: int cmd, jpayne@69: void *clientp); jpayne@69: jpayne@69: #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS jpayne@69: /* jpayne@69: * The following typedef's are signatures of malloc, free, realloc, strdup and jpayne@69: * calloc respectively. Function pointers of these types can be passed to the jpayne@69: * curl_global_init_mem() function to set user defined memory management jpayne@69: * callback routines. jpayne@69: */ jpayne@69: typedef void *(*curl_malloc_callback)(size_t size); jpayne@69: typedef void (*curl_free_callback)(void *ptr); jpayne@69: typedef void *(*curl_realloc_callback)(void *ptr, size_t size); jpayne@69: typedef char *(*curl_strdup_callback)(const char *str); jpayne@69: typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); jpayne@69: jpayne@69: #define CURL_DID_MEMORY_FUNC_TYPEDEFS jpayne@69: #endif jpayne@69: jpayne@69: /* the kind of data that is passed to information_callback */ jpayne@69: typedef enum { jpayne@69: CURLINFO_TEXT = 0, jpayne@69: CURLINFO_HEADER_IN, /* 1 */ jpayne@69: CURLINFO_HEADER_OUT, /* 2 */ jpayne@69: CURLINFO_DATA_IN, /* 3 */ jpayne@69: CURLINFO_DATA_OUT, /* 4 */ jpayne@69: CURLINFO_SSL_DATA_IN, /* 5 */ jpayne@69: CURLINFO_SSL_DATA_OUT, /* 6 */ jpayne@69: CURLINFO_END jpayne@69: } curl_infotype; jpayne@69: jpayne@69: typedef int (*curl_debug_callback) jpayne@69: (CURL *handle, /* the handle/transfer this concerns */ jpayne@69: curl_infotype type, /* what kind of data */ jpayne@69: char *data, /* points to the data */ jpayne@69: size_t size, /* size of the data pointed to */ jpayne@69: void *userptr); /* whatever the user please */ jpayne@69: jpayne@69: /* This is the CURLOPT_PREREQFUNCTION callback prototype. */ jpayne@69: typedef int (*curl_prereq_callback)(void *clientp, jpayne@69: char *conn_primary_ip, jpayne@69: char *conn_local_ip, jpayne@69: int conn_primary_port, jpayne@69: int conn_local_port); jpayne@69: jpayne@69: /* Return code for when the pre-request callback has terminated without jpayne@69: any errors */ jpayne@69: #define CURL_PREREQFUNC_OK 0 jpayne@69: /* Return code for when the pre-request callback wants to abort the jpayne@69: request */ jpayne@69: #define CURL_PREREQFUNC_ABORT 1 jpayne@69: jpayne@69: /* All possible error codes from all sorts of curl functions. Future versions jpayne@69: may return other values, stay prepared. jpayne@69: jpayne@69: Always add new return codes last. Never *EVER* remove any. The return jpayne@69: codes must remain the same! jpayne@69: */ jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLE_OK = 0, jpayne@69: CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ jpayne@69: CURLE_FAILED_INIT, /* 2 */ jpayne@69: CURLE_URL_MALFORMAT, /* 3 */ jpayne@69: CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for jpayne@69: 7.17.0, reused in April 2011 for 7.21.5] */ jpayne@69: CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ jpayne@69: CURLE_COULDNT_RESOLVE_HOST, /* 6 */ jpayne@69: CURLE_COULDNT_CONNECT, /* 7 */ jpayne@69: CURLE_WEIRD_SERVER_REPLY, /* 8 */ jpayne@69: CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server jpayne@69: due to lack of access - when login fails jpayne@69: this is not returned. */ jpayne@69: CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for jpayne@69: 7.15.4, reused in Dec 2011 for 7.24.0]*/ jpayne@69: CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ jpayne@69: CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server jpayne@69: [was obsoleted in August 2007 for 7.17.0, jpayne@69: reused in Dec 2011 for 7.24.0]*/ jpayne@69: CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ jpayne@69: CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ jpayne@69: CURLE_FTP_CANT_GET_HOST, /* 15 */ jpayne@69: CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. jpayne@69: [was obsoleted in August 2007 for 7.17.0, jpayne@69: reused in July 2014 for 7.38.0] */ jpayne@69: CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ jpayne@69: CURLE_PARTIAL_FILE, /* 18 */ jpayne@69: CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ jpayne@69: CURLE_OBSOLETE20, /* 20 - NOT USED */ jpayne@69: CURLE_QUOTE_ERROR, /* 21 - quote command failure */ jpayne@69: CURLE_HTTP_RETURNED_ERROR, /* 22 */ jpayne@69: CURLE_WRITE_ERROR, /* 23 */ jpayne@69: CURLE_OBSOLETE24, /* 24 - NOT USED */ jpayne@69: CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ jpayne@69: CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ jpayne@69: CURLE_OUT_OF_MEMORY, /* 27 */ jpayne@69: CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ jpayne@69: CURLE_OBSOLETE29, /* 29 - NOT USED */ jpayne@69: CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ jpayne@69: CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ jpayne@69: CURLE_OBSOLETE32, /* 32 - NOT USED */ jpayne@69: CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ jpayne@69: CURLE_HTTP_POST_ERROR, /* 34 */ jpayne@69: CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ jpayne@69: CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ jpayne@69: CURLE_FILE_COULDNT_READ_FILE, /* 37 */ jpayne@69: CURLE_LDAP_CANNOT_BIND, /* 38 */ jpayne@69: CURLE_LDAP_SEARCH_FAILED, /* 39 */ jpayne@69: CURLE_OBSOLETE40, /* 40 - NOT USED */ jpayne@69: CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ jpayne@69: CURLE_ABORTED_BY_CALLBACK, /* 42 */ jpayne@69: CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ jpayne@69: CURLE_OBSOLETE44, /* 44 - NOT USED */ jpayne@69: CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ jpayne@69: CURLE_OBSOLETE46, /* 46 - NOT USED */ jpayne@69: CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ jpayne@69: CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ jpayne@69: CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ jpayne@69: CURLE_OBSOLETE50, /* 50 - NOT USED */ jpayne@69: CURLE_OBSOLETE51, /* 51 - NOT USED */ jpayne@69: CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ jpayne@69: CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ jpayne@69: CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as jpayne@69: default */ jpayne@69: CURLE_SEND_ERROR, /* 55 - failed sending network data */ jpayne@69: CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ jpayne@69: CURLE_OBSOLETE57, /* 57 - NOT IN USE */ jpayne@69: CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ jpayne@69: CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ jpayne@69: CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint jpayne@69: wasn't verified fine */ jpayne@69: CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ jpayne@69: CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ jpayne@69: CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ jpayne@69: CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ jpayne@69: CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind jpayne@69: that failed */ jpayne@69: CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ jpayne@69: CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not jpayne@69: accepted and we failed to login */ jpayne@69: CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ jpayne@69: CURLE_TFTP_PERM, /* 69 - permission problem on server */ jpayne@69: CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ jpayne@69: CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ jpayne@69: CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ jpayne@69: CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ jpayne@69: CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ jpayne@69: CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ jpayne@69: CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ jpayne@69: CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing jpayne@69: or wrong format */ jpayne@69: CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ jpayne@69: CURLE_SSH, /* 79 - error from the SSH layer, somewhat jpayne@69: generic so the error message will be of jpayne@69: interest when this has happened */ jpayne@69: jpayne@69: CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL jpayne@69: connection */ jpayne@69: CURLE_AGAIN, /* 81 - socket is not ready for send/recv, jpayne@69: wait till it's ready and try again (Added jpayne@69: in 7.18.2) */ jpayne@69: CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or jpayne@69: wrong format (Added in 7.19.0) */ jpayne@69: CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in jpayne@69: 7.19.0) */ jpayne@69: CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ jpayne@69: CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ jpayne@69: CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ jpayne@69: CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ jpayne@69: CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ jpayne@69: CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the jpayne@69: session will be queued */ jpayne@69: CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not jpayne@69: match */ jpayne@69: CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ jpayne@69: CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer jpayne@69: */ jpayne@69: CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from jpayne@69: inside a callback */ jpayne@69: CURLE_AUTH_ERROR, /* 94 - an authentication function returned an jpayne@69: error */ jpayne@69: CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ jpayne@69: CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ jpayne@69: CURLE_PROXY, /* 97 - proxy handshake error */ jpayne@69: CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ jpayne@69: CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ jpayne@69: CURL_LAST /* never use! */ jpayne@69: } CURLcode; jpayne@69: jpayne@69: #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all jpayne@69: the obsolete stuff removed! */ jpayne@69: jpayne@69: /* Previously obsolete error code re-used in 7.38.0 */ jpayne@69: #define CURLE_OBSOLETE16 CURLE_HTTP2 jpayne@69: jpayne@69: /* Previously obsolete error codes re-used in 7.24.0 */ jpayne@69: #define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED jpayne@69: #define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT jpayne@69: jpayne@69: /* compatibility with older names */ jpayne@69: #define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING jpayne@69: #define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY jpayne@69: jpayne@69: /* The following were added in 7.62.0 */ jpayne@69: #define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION jpayne@69: jpayne@69: /* The following were added in 7.21.5, April 2011 */ jpayne@69: #define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION jpayne@69: jpayne@69: /* Added for 7.78.0 */ jpayne@69: #define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX jpayne@69: jpayne@69: /* The following were added in 7.17.1 */ jpayne@69: /* These are scheduled to disappear by 2009 */ jpayne@69: #define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION jpayne@69: jpayne@69: /* The following were added in 7.17.0 */ jpayne@69: /* These are scheduled to disappear by 2009 */ jpayne@69: #define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ jpayne@69: #define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 jpayne@69: #define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 jpayne@69: #define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 jpayne@69: #define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 jpayne@69: #define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 jpayne@69: #define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 jpayne@69: #define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 jpayne@69: #define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 jpayne@69: #define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 jpayne@69: #define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 jpayne@69: #define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 jpayne@69: #define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN jpayne@69: jpayne@69: #define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED jpayne@69: #define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE jpayne@69: #define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR jpayne@69: #define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL jpayne@69: #define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS jpayne@69: #define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR jpayne@69: #define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED jpayne@69: jpayne@69: /* The following were added earlier */ jpayne@69: jpayne@69: #define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT jpayne@69: #define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR jpayne@69: #define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED jpayne@69: #define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED jpayne@69: #define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE jpayne@69: #define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME jpayne@69: #define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 jpayne@69: #define CURLE_CONV_REQD CURLE_OBSOLETE76 jpayne@69: #define CURLE_CONV_FAILED CURLE_OBSOLETE75 jpayne@69: jpayne@69: /* This was the error code 50 in 7.7.3 and a few earlier versions, this jpayne@69: is no longer used by libcurl but is instead #defined here only to not jpayne@69: make programs break */ jpayne@69: #define CURLE_ALREADY_COMPLETE 99999 jpayne@69: jpayne@69: /* Provide defines for really old option names */ jpayne@69: #define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ jpayne@69: #define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ jpayne@69: #define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA jpayne@69: jpayne@69: /* Since long deprecated options with no code in the lib that does anything jpayne@69: with them. */ jpayne@69: #define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 jpayne@69: #define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 jpayne@69: jpayne@69: #endif /* !CURL_NO_OLDIES */ jpayne@69: jpayne@69: /* jpayne@69: * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was jpayne@69: * return for the transfers. jpayne@69: */ jpayne@69: typedef enum { jpayne@69: CURLPX_OK, jpayne@69: CURLPX_BAD_ADDRESS_TYPE, jpayne@69: CURLPX_BAD_VERSION, jpayne@69: CURLPX_CLOSED, jpayne@69: CURLPX_GSSAPI, jpayne@69: CURLPX_GSSAPI_PERMSG, jpayne@69: CURLPX_GSSAPI_PROTECTION, jpayne@69: CURLPX_IDENTD, jpayne@69: CURLPX_IDENTD_DIFFER, jpayne@69: CURLPX_LONG_HOSTNAME, jpayne@69: CURLPX_LONG_PASSWD, jpayne@69: CURLPX_LONG_USER, jpayne@69: CURLPX_NO_AUTH, jpayne@69: CURLPX_RECV_ADDRESS, jpayne@69: CURLPX_RECV_AUTH, jpayne@69: CURLPX_RECV_CONNECT, jpayne@69: CURLPX_RECV_REQACK, jpayne@69: CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, jpayne@69: CURLPX_REPLY_COMMAND_NOT_SUPPORTED, jpayne@69: CURLPX_REPLY_CONNECTION_REFUSED, jpayne@69: CURLPX_REPLY_GENERAL_SERVER_FAILURE, jpayne@69: CURLPX_REPLY_HOST_UNREACHABLE, jpayne@69: CURLPX_REPLY_NETWORK_UNREACHABLE, jpayne@69: CURLPX_REPLY_NOT_ALLOWED, jpayne@69: CURLPX_REPLY_TTL_EXPIRED, jpayne@69: CURLPX_REPLY_UNASSIGNED, jpayne@69: CURLPX_REQUEST_FAILED, jpayne@69: CURLPX_RESOLVE_HOST, jpayne@69: CURLPX_SEND_AUTH, jpayne@69: CURLPX_SEND_CONNECT, jpayne@69: CURLPX_SEND_REQUEST, jpayne@69: CURLPX_UNKNOWN_FAIL, jpayne@69: CURLPX_UNKNOWN_MODE, jpayne@69: CURLPX_USER_REJECTED, jpayne@69: CURLPX_LAST /* never use */ jpayne@69: } CURLproxycode; jpayne@69: jpayne@69: /* This prototype applies to all conversion callbacks */ jpayne@69: typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); jpayne@69: jpayne@69: typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ jpayne@69: void *ssl_ctx, /* actually an OpenSSL jpayne@69: or WolfSSL SSL_CTX, jpayne@69: or an mbedTLS jpayne@69: mbedtls_ssl_config */ jpayne@69: void *userptr); jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use jpayne@69: CONNECT HTTP/1.1 */ jpayne@69: CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT jpayne@69: HTTP/1.0 */ jpayne@69: CURLPROXY_HTTPS = 2, /* added in 7.52.0 */ jpayne@69: CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already jpayne@69: in 7.10 */ jpayne@69: CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ jpayne@69: CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ jpayne@69: CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the jpayne@69: host name rather than the IP address. added jpayne@69: in 7.18.0 */ jpayne@69: } curl_proxytype; /* this enum was added in 7.10 */ jpayne@69: jpayne@69: /* jpayne@69: * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: jpayne@69: * jpayne@69: * CURLAUTH_NONE - No HTTP authentication jpayne@69: * CURLAUTH_BASIC - HTTP Basic authentication (default) jpayne@69: * CURLAUTH_DIGEST - HTTP Digest authentication jpayne@69: * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication jpayne@69: * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) jpayne@69: * CURLAUTH_NTLM - HTTP NTLM authentication jpayne@69: * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour jpayne@69: * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper jpayne@69: * CURLAUTH_BEARER - HTTP Bearer token authentication jpayne@69: * CURLAUTH_ONLY - Use together with a single other type to force no jpayne@69: * authentication or just that single type jpayne@69: * CURLAUTH_ANY - All fine types set jpayne@69: * CURLAUTH_ANYSAFE - All fine types except Basic jpayne@69: */ jpayne@69: jpayne@69: #define CURLAUTH_NONE ((unsigned long)0) jpayne@69: #define CURLAUTH_BASIC (((unsigned long)1)<<0) jpayne@69: #define CURLAUTH_DIGEST (((unsigned long)1)<<1) jpayne@69: #define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) jpayne@69: /* Deprecated since the advent of CURLAUTH_NEGOTIATE */ jpayne@69: #define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE jpayne@69: /* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ jpayne@69: #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE jpayne@69: #define CURLAUTH_NTLM (((unsigned long)1)<<3) jpayne@69: #define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) jpayne@69: #define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) jpayne@69: #define CURLAUTH_BEARER (((unsigned long)1)<<6) jpayne@69: #define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) jpayne@69: #define CURLAUTH_ONLY (((unsigned long)1)<<31) jpayne@69: #define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) jpayne@69: #define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) jpayne@69: jpayne@69: #define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ jpayne@69: #define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ jpayne@69: #define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ jpayne@69: #define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ jpayne@69: #define CURLSSH_AUTH_HOST (1<<2) /* host key files */ jpayne@69: #define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ jpayne@69: #define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ jpayne@69: #define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ jpayne@69: #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY jpayne@69: jpayne@69: #define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ jpayne@69: #define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ jpayne@69: #define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ jpayne@69: jpayne@69: #define CURL_ERROR_SIZE 256 jpayne@69: jpayne@69: enum curl_khtype { jpayne@69: CURLKHTYPE_UNKNOWN, jpayne@69: CURLKHTYPE_RSA1, jpayne@69: CURLKHTYPE_RSA, jpayne@69: CURLKHTYPE_DSS, jpayne@69: CURLKHTYPE_ECDSA, jpayne@69: CURLKHTYPE_ED25519 jpayne@69: }; jpayne@69: jpayne@69: struct curl_khkey { jpayne@69: const char *key; /* points to a null-terminated string encoded with base64 jpayne@69: if len is zero, otherwise to the "raw" data */ jpayne@69: size_t len; jpayne@69: enum curl_khtype keytype; jpayne@69: }; jpayne@69: jpayne@69: /* this is the set of return values expected from the curl_sshkeycallback jpayne@69: callback */ jpayne@69: enum curl_khstat { jpayne@69: CURLKHSTAT_FINE_ADD_TO_FILE, jpayne@69: CURLKHSTAT_FINE, jpayne@69: CURLKHSTAT_REJECT, /* reject the connection, return an error */ jpayne@69: CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. jpayne@69: Causes a CURLE_PEER_FAILED_VERIFICATION error but the jpayne@69: connection will be left intact etc */ jpayne@69: CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ jpayne@69: CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ jpayne@69: }; jpayne@69: jpayne@69: /* this is the set of status codes pass in to the callback */ jpayne@69: enum curl_khmatch { jpayne@69: CURLKHMATCH_OK, /* match */ jpayne@69: CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ jpayne@69: CURLKHMATCH_MISSING, /* no matching host/key found */ jpayne@69: CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ jpayne@69: }; jpayne@69: jpayne@69: typedef int jpayne@69: (*curl_sshkeycallback) (CURL *easy, /* easy handle */ jpayne@69: const struct curl_khkey *knownkey, /* known */ jpayne@69: const struct curl_khkey *foundkey, /* found */ jpayne@69: enum curl_khmatch, /* libcurl's view on the keys */ jpayne@69: void *clientp); /* custom pointer passed with */ jpayne@69: /* CURLOPT_SSH_KEYDATA */ jpayne@69: jpayne@69: typedef int jpayne@69: (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ jpayne@69: /* with CURLOPT_SSH_HOSTKEYDATA */ jpayne@69: int keytype, /* CURLKHTYPE */ jpayne@69: const char *key, /* hostkey to check */ jpayne@69: size_t keylen); /* length of the key */ jpayne@69: /* return CURLE_OK to accept */ jpayne@69: /* or something else to refuse */ jpayne@69: jpayne@69: jpayne@69: /* parameter for the CURLOPT_USE_SSL option */ jpayne@69: typedef enum { jpayne@69: CURLUSESSL_NONE, /* do not attempt to use SSL */ jpayne@69: CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ jpayne@69: CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ jpayne@69: CURLUSESSL_ALL, /* SSL for all communication or fail */ jpayne@69: CURLUSESSL_LAST /* not an option, never use */ jpayne@69: } curl_usessl; jpayne@69: jpayne@69: /* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ jpayne@69: jpayne@69: /* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the jpayne@69: name of improving interoperability with older servers. Some SSL libraries jpayne@69: have introduced work-arounds for this flaw but those work-arounds sometimes jpayne@69: make the SSL communication fail. To regain functionality with those broken jpayne@69: servers, a user can this way allow the vulnerability back. */ jpayne@69: #define CURLSSLOPT_ALLOW_BEAST (1<<0) jpayne@69: jpayne@69: /* - NO_REVOKE tells libcurl to disable certificate revocation checks for those jpayne@69: SSL backends where such behavior is present. */ jpayne@69: #define CURLSSLOPT_NO_REVOKE (1<<1) jpayne@69: jpayne@69: /* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain jpayne@69: if possible. The OpenSSL backend has this ability. */ jpayne@69: #define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) jpayne@69: jpayne@69: /* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline jpayne@69: checks and ignore missing revocation list for those SSL backends where such jpayne@69: behavior is present. */ jpayne@69: #define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) jpayne@69: jpayne@69: /* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of jpayne@69: operating system. Currently implemented under MS-Windows. */ jpayne@69: #define CURLSSLOPT_NATIVE_CA (1<<4) jpayne@69: jpayne@69: /* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use jpayne@69: a client certificate for authentication. (Schannel) */ jpayne@69: #define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) jpayne@69: jpayne@69: /* The default connection attempt delay in milliseconds for happy eyeballs. jpayne@69: CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document jpayne@69: this value, keep them in sync. */ jpayne@69: #define CURL_HET_DEFAULT 200L jpayne@69: jpayne@69: /* The default connection upkeep interval in milliseconds. */ jpayne@69: #define CURL_UPKEEP_INTERVAL_DEFAULT 60000L jpayne@69: jpayne@69: #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all jpayne@69: the obsolete stuff removed! */ jpayne@69: jpayne@69: /* Backwards compatibility with older names */ jpayne@69: /* These are scheduled to disappear by 2009 */ jpayne@69: jpayne@69: #define CURLFTPSSL_NONE CURLUSESSL_NONE jpayne@69: #define CURLFTPSSL_TRY CURLUSESSL_TRY jpayne@69: #define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL jpayne@69: #define CURLFTPSSL_ALL CURLUSESSL_ALL jpayne@69: #define CURLFTPSSL_LAST CURLUSESSL_LAST jpayne@69: #define curl_ftpssl curl_usessl jpayne@69: #endif /* !CURL_NO_OLDIES */ jpayne@69: jpayne@69: /* parameter for the CURLOPT_FTP_SSL_CCC option */ jpayne@69: typedef enum { jpayne@69: CURLFTPSSL_CCC_NONE, /* do not send CCC */ jpayne@69: CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ jpayne@69: CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ jpayne@69: CURLFTPSSL_CCC_LAST /* not an option, never use */ jpayne@69: } curl_ftpccc; jpayne@69: jpayne@69: /* parameter for the CURLOPT_FTPSSLAUTH option */ jpayne@69: typedef enum { jpayne@69: CURLFTPAUTH_DEFAULT, /* let libcurl decide */ jpayne@69: CURLFTPAUTH_SSL, /* use "AUTH SSL" */ jpayne@69: CURLFTPAUTH_TLS, /* use "AUTH TLS" */ jpayne@69: CURLFTPAUTH_LAST /* not an option, never use */ jpayne@69: } curl_ftpauth; jpayne@69: jpayne@69: /* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ jpayne@69: typedef enum { jpayne@69: CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ jpayne@69: CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD jpayne@69: again if MKD succeeded, for SFTP this does jpayne@69: similar magic */ jpayne@69: CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD jpayne@69: again even if MKD failed! */ jpayne@69: CURLFTP_CREATE_DIR_LAST /* not an option, never use */ jpayne@69: } curl_ftpcreatedir; jpayne@69: jpayne@69: /* parameter for the CURLOPT_FTP_FILEMETHOD option */ jpayne@69: typedef enum { jpayne@69: CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ jpayne@69: CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ jpayne@69: CURLFTPMETHOD_NOCWD, /* no CWD at all */ jpayne@69: CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ jpayne@69: CURLFTPMETHOD_LAST /* not an option, never use */ jpayne@69: } curl_ftpmethod; jpayne@69: jpayne@69: /* bitmask defines for CURLOPT_HEADEROPT */ jpayne@69: #define CURLHEADER_UNIFIED 0 jpayne@69: #define CURLHEADER_SEPARATE (1<<0) jpayne@69: jpayne@69: /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ jpayne@69: #define CURLALTSVC_READONLYFILE (1<<2) jpayne@69: #define CURLALTSVC_H1 (1<<3) jpayne@69: #define CURLALTSVC_H2 (1<<4) jpayne@69: #define CURLALTSVC_H3 (1<<5) jpayne@69: jpayne@69: jpayne@69: struct curl_hstsentry { jpayne@69: char *name; jpayne@69: size_t namelen; jpayne@69: unsigned int includeSubDomains:1; jpayne@69: char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ jpayne@69: }; jpayne@69: jpayne@69: struct curl_index { jpayne@69: size_t index; /* the provided entry's "index" or count */ jpayne@69: size_t total; /* total number of entries to save */ jpayne@69: }; jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLSTS_OK, jpayne@69: CURLSTS_DONE, jpayne@69: CURLSTS_FAIL jpayne@69: } CURLSTScode; jpayne@69: jpayne@69: typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, jpayne@69: struct curl_hstsentry *e, jpayne@69: void *userp); jpayne@69: typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, jpayne@69: struct curl_hstsentry *e, jpayne@69: struct curl_index *i, jpayne@69: void *userp); jpayne@69: jpayne@69: /* CURLHSTS_* are bits for the CURLOPT_HSTS option */ jpayne@69: #define CURLHSTS_ENABLE (long)(1<<0) jpayne@69: #define CURLHSTS_READONLYFILE (long)(1<<1) jpayne@69: jpayne@69: /* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS jpayne@69: options. Do not use. */ jpayne@69: #define CURLPROTO_HTTP (1<<0) jpayne@69: #define CURLPROTO_HTTPS (1<<1) jpayne@69: #define CURLPROTO_FTP (1<<2) jpayne@69: #define CURLPROTO_FTPS (1<<3) jpayne@69: #define CURLPROTO_SCP (1<<4) jpayne@69: #define CURLPROTO_SFTP (1<<5) jpayne@69: #define CURLPROTO_TELNET (1<<6) jpayne@69: #define CURLPROTO_LDAP (1<<7) jpayne@69: #define CURLPROTO_LDAPS (1<<8) jpayne@69: #define CURLPROTO_DICT (1<<9) jpayne@69: #define CURLPROTO_FILE (1<<10) jpayne@69: #define CURLPROTO_TFTP (1<<11) jpayne@69: #define CURLPROTO_IMAP (1<<12) jpayne@69: #define CURLPROTO_IMAPS (1<<13) jpayne@69: #define CURLPROTO_POP3 (1<<14) jpayne@69: #define CURLPROTO_POP3S (1<<15) jpayne@69: #define CURLPROTO_SMTP (1<<16) jpayne@69: #define CURLPROTO_SMTPS (1<<17) jpayne@69: #define CURLPROTO_RTSP (1<<18) jpayne@69: #define CURLPROTO_RTMP (1<<19) jpayne@69: #define CURLPROTO_RTMPT (1<<20) jpayne@69: #define CURLPROTO_RTMPE (1<<21) jpayne@69: #define CURLPROTO_RTMPTE (1<<22) jpayne@69: #define CURLPROTO_RTMPS (1<<23) jpayne@69: #define CURLPROTO_RTMPTS (1<<24) jpayne@69: #define CURLPROTO_GOPHER (1<<25) jpayne@69: #define CURLPROTO_SMB (1<<26) jpayne@69: #define CURLPROTO_SMBS (1<<27) jpayne@69: #define CURLPROTO_MQTT (1<<28) jpayne@69: #define CURLPROTO_GOPHERS (1<<29) jpayne@69: #define CURLPROTO_ALL (~0) /* enable everything */ jpayne@69: jpayne@69: /* long may be 32 or 64 bits, but we should never depend on anything else jpayne@69: but 32 */ jpayne@69: #define CURLOPTTYPE_LONG 0 jpayne@69: #define CURLOPTTYPE_OBJECTPOINT 10000 jpayne@69: #define CURLOPTTYPE_FUNCTIONPOINT 20000 jpayne@69: #define CURLOPTTYPE_OFF_T 30000 jpayne@69: #define CURLOPTTYPE_BLOB 40000 jpayne@69: jpayne@69: /* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the jpayne@69: string options from the header file */ jpayne@69: jpayne@69: jpayne@69: #define CURLOPT(na,t,nu) na = t + nu jpayne@69: #define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu jpayne@69: jpayne@69: /* CURLOPT aliases that make no run-time difference */ jpayne@69: jpayne@69: /* 'char *' argument to a string with a trailing zero */ jpayne@69: #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT jpayne@69: jpayne@69: /* 'struct curl_slist *' argument */ jpayne@69: #define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT jpayne@69: jpayne@69: /* 'void *' argument passed untouched to callback */ jpayne@69: #define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT jpayne@69: jpayne@69: /* 'long' argument with a set of values/bitmask */ jpayne@69: #define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG jpayne@69: jpayne@69: /* jpayne@69: * All CURLOPT_* values. jpayne@69: */ jpayne@69: jpayne@69: typedef enum { jpayne@69: /* This is the FILE * or void * the regular output should be written to. */ jpayne@69: CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), jpayne@69: jpayne@69: /* The full URL to get/put */ jpayne@69: CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), jpayne@69: jpayne@69: /* Port number to connect to, if other than default. */ jpayne@69: CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), jpayne@69: jpayne@69: /* Name of proxy to use. */ jpayne@69: CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), jpayne@69: jpayne@69: /* "user:password;options" to use when fetching. */ jpayne@69: CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), jpayne@69: jpayne@69: /* "user:password" to use with proxy. */ jpayne@69: CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), jpayne@69: jpayne@69: /* Range to get, specified as an ASCII string. */ jpayne@69: CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), jpayne@69: jpayne@69: /* not used */ jpayne@69: jpayne@69: /* Specified file stream to upload from (use as input): */ jpayne@69: CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), jpayne@69: jpayne@69: /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE jpayne@69: * bytes big. */ jpayne@69: CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), jpayne@69: jpayne@69: /* Function that will be called to store the output (instead of fwrite). The jpayne@69: * parameters will use fwrite() syntax, make sure to follow them. */ jpayne@69: CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), jpayne@69: jpayne@69: /* Function that will be called to read the input (instead of fread). The jpayne@69: * parameters will use fread() syntax, make sure to follow them. */ jpayne@69: CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), jpayne@69: jpayne@69: /* Time-out the read operation after this amount of seconds */ jpayne@69: CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), jpayne@69: jpayne@69: /* If CURLOPT_READDATA is used, this can be used to inform libcurl about jpayne@69: * how large the file being sent really is. That allows better error jpayne@69: * checking and better verifies that the upload was successful. -1 means jpayne@69: * unknown size. jpayne@69: * jpayne@69: * For large file support, there is also a _LARGE version of the key jpayne@69: * which takes an off_t type, allowing platforms with larger off_t jpayne@69: * sizes to handle larger files. See below for INFILESIZE_LARGE. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), jpayne@69: jpayne@69: /* POST static input fields. */ jpayne@69: CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), jpayne@69: jpayne@69: /* Set the referrer page (needed by some CGIs) */ jpayne@69: CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), jpayne@69: jpayne@69: /* Set the FTP PORT string (interface name, named or numerical IP address) jpayne@69: Use i.e '-' to use default address. */ jpayne@69: CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), jpayne@69: jpayne@69: /* Set the User-Agent string (examined by some CGIs) */ jpayne@69: CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), jpayne@69: jpayne@69: /* If the download receives less than "low speed limit" bytes/second jpayne@69: * during "low speed time" seconds, the operations is aborted. jpayne@69: * You could i.e if you have a pretty high speed connection, abort if jpayne@69: * it is less than 2000 bytes/sec during 20 seconds. jpayne@69: */ jpayne@69: jpayne@69: /* Set the "low speed limit" */ jpayne@69: CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), jpayne@69: jpayne@69: /* Set the "low speed time" */ jpayne@69: CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), jpayne@69: jpayne@69: /* Set the continuation offset. jpayne@69: * jpayne@69: * Note there is also a _LARGE version of this key which uses jpayne@69: * off_t types, allowing for large file offsets on platforms which jpayne@69: * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), jpayne@69: jpayne@69: /* Set cookie in request: */ jpayne@69: CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), jpayne@69: jpayne@69: /* This points to a linked list of headers, struct curl_slist kind. This jpayne@69: list is also used for RTSP (in spite of its name) */ jpayne@69: CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), jpayne@69: jpayne@69: /* This points to a linked list of post entries, struct curl_httppost */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, jpayne@69: 7.56.0, "Use CURLOPT_MIMEPOST"), jpayne@69: jpayne@69: /* name of the file keeping your private SSL-certificate */ jpayne@69: CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), jpayne@69: jpayne@69: /* password for the SSL or SSH private key */ jpayne@69: CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), jpayne@69: jpayne@69: /* send TYPE parameter? */ jpayne@69: CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), jpayne@69: jpayne@69: /* send linked-list of QUOTE commands */ jpayne@69: CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), jpayne@69: jpayne@69: /* send FILE * or void * to store headers to, if you use a callback it jpayne@69: is simply passed to the callback unmodified */ jpayne@69: CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), jpayne@69: jpayne@69: /* point to a file to read the initial cookies from, also enables jpayne@69: "cookie awareness" */ jpayne@69: CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), jpayne@69: jpayne@69: /* What version to specifically try to use. jpayne@69: See CURL_SSLVERSION defines below. */ jpayne@69: CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), jpayne@69: jpayne@69: /* What kind of HTTP time condition to use, see defines */ jpayne@69: CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), jpayne@69: jpayne@69: /* Time to use with the above condition. Specified in number of seconds jpayne@69: since 1 Jan 1970 */ jpayne@69: CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), jpayne@69: jpayne@69: /* 35 = OBSOLETE */ jpayne@69: jpayne@69: /* Custom request, for customizing the get command like jpayne@69: HTTP: DELETE, TRACE and others jpayne@69: FTP: to use a different list command jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), jpayne@69: jpayne@69: /* FILE handle to use instead of stderr */ jpayne@69: CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), jpayne@69: jpayne@69: /* 38 is not used */ jpayne@69: jpayne@69: /* send linked-list of post-transfer QUOTE commands */ jpayne@69: CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), jpayne@69: jpayne@69: /* OBSOLETE, do not use! */ jpayne@69: CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), jpayne@69: jpayne@69: /* talk a lot */ jpayne@69: CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), jpayne@69: jpayne@69: /* throw the header out too */ jpayne@69: CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), jpayne@69: jpayne@69: /* shut off the progress meter */ jpayne@69: CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), jpayne@69: jpayne@69: /* use HEAD to get http document */ jpayne@69: CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), jpayne@69: jpayne@69: /* no output on http error codes >= 400 */ jpayne@69: CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), jpayne@69: jpayne@69: /* this is an upload */ jpayne@69: CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), jpayne@69: jpayne@69: /* HTTP POST method */ jpayne@69: CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), jpayne@69: jpayne@69: /* bare names when listing directories */ jpayne@69: CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), jpayne@69: jpayne@69: /* Append instead of overwrite on upload! */ jpayne@69: CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), jpayne@69: jpayne@69: /* Specify whether to read the user+password from the .netrc or the URL. jpayne@69: * This must be one of the CURL_NETRC_* enums below. */ jpayne@69: CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), jpayne@69: jpayne@69: /* use Location: Luke! */ jpayne@69: CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), jpayne@69: jpayne@69: /* transfer data in text/ASCII format */ jpayne@69: CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), jpayne@69: jpayne@69: /* HTTP PUT */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, jpayne@69: 7.12.1, "Use CURLOPT_UPLOAD"), jpayne@69: jpayne@69: /* 55 = OBSOLETE */ jpayne@69: jpayne@69: /* DEPRECATED jpayne@69: * Function that will be called instead of the internal progress display jpayne@69: * function. This function should be defined as the curl_progress_callback jpayne@69: * prototype defines. */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, jpayne@69: 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), jpayne@69: jpayne@69: /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION jpayne@69: callbacks */ jpayne@69: CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), jpayne@69: #define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA jpayne@69: jpayne@69: /* We want the referrer field set automatically when following locations */ jpayne@69: CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), jpayne@69: jpayne@69: /* Port of the proxy, can be set in the proxy string as well with: jpayne@69: "[host]:[port]" */ jpayne@69: CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), jpayne@69: jpayne@69: /* size of the POST input data, if strlen() is not good to use */ jpayne@69: CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), jpayne@69: jpayne@69: /* tunnel non-http operations through an HTTP proxy */ jpayne@69: CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), jpayne@69: jpayne@69: /* Set the interface string to use as outgoing network interface */ jpayne@69: CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), jpayne@69: jpayne@69: /* Set the krb4/5 security level, this also enables krb4/5 awareness. This jpayne@69: * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string jpayne@69: * is set but doesn't match one of these, 'private' will be used. */ jpayne@69: CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), jpayne@69: jpayne@69: /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ jpayne@69: CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), jpayne@69: jpayne@69: /* The CApath or CAfile used to validate the peer certificate jpayne@69: this option is used only if SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), jpayne@69: jpayne@69: /* 66 = OBSOLETE */ jpayne@69: /* 67 = OBSOLETE */ jpayne@69: jpayne@69: /* Maximum number of http redirects to follow */ jpayne@69: CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), jpayne@69: jpayne@69: /* Pass a long set to 1 to get the date of the requested document (if jpayne@69: possible)! Pass a zero to shut it off. */ jpayne@69: CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), jpayne@69: jpayne@69: /* This points to a linked list of telnet options */ jpayne@69: CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), jpayne@69: jpayne@69: /* Max amount of cached alive connections */ jpayne@69: CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), jpayne@69: jpayne@69: /* OBSOLETE, do not use! */ jpayne@69: CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), jpayne@69: jpayne@69: /* 73 = OBSOLETE */ jpayne@69: jpayne@69: /* Set to explicitly use a new connection for the upcoming transfer. jpayne@69: Do not use this unless you're absolutely sure of this, as it makes the jpayne@69: operation slower and is less friendly for the network. */ jpayne@69: CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), jpayne@69: jpayne@69: /* Set to explicitly forbid the upcoming transfer's connection to be re-used jpayne@69: when done. Do not use this unless you're absolutely sure of this, as it jpayne@69: makes the operation slower and is less friendly for the network. */ jpayne@69: CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), jpayne@69: jpayne@69: /* Set to a file name that contains random data for libcurl to use to jpayne@69: seed the random engine when doing SSL connects. */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, jpayne@69: 7.84.0, "Serves no purpose anymore"), jpayne@69: jpayne@69: /* Set to the Entropy Gathering Daemon socket pathname */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, jpayne@69: 7.84.0, "Serves no purpose anymore"), jpayne@69: jpayne@69: /* Time-out connect operations after this amount of seconds, if connects are jpayne@69: OK within this time, then fine... This only aborts the connect phase. */ jpayne@69: CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), jpayne@69: jpayne@69: /* Function that will be called to store headers (instead of fwrite). The jpayne@69: * parameters will use fwrite() syntax, make sure to follow them. */ jpayne@69: CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), jpayne@69: jpayne@69: /* Set this to force the HTTP request to get back to GET. Only really usable jpayne@69: if POST, PUT or a custom request have been used first. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), jpayne@69: jpayne@69: /* Set if we should verify the Common name from the peer certificate in ssl jpayne@69: * handshake, set 1 to check existence, 2 to ensure that it matches the jpayne@69: * provided hostname. */ jpayne@69: CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), jpayne@69: jpayne@69: /* Specify which file name to write all known cookies in after completed jpayne@69: operation. Set file name to "-" (dash) to make it go to stdout. */ jpayne@69: CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), jpayne@69: jpayne@69: /* Specify which SSL ciphers to use */ jpayne@69: CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), jpayne@69: jpayne@69: /* Specify which HTTP version to use! This must be set to one of the jpayne@69: CURL_HTTP_VERSION* enums set below. */ jpayne@69: CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), jpayne@69: jpayne@69: /* Specifically switch on or off the FTP engine's use of the EPSV command. By jpayne@69: default, that one will always be attempted before the more traditional jpayne@69: PASV command. */ jpayne@69: CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), jpayne@69: jpayne@69: /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ jpayne@69: CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), jpayne@69: jpayne@69: /* name of the file keeping your private SSL-key */ jpayne@69: CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), jpayne@69: jpayne@69: /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ jpayne@69: CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), jpayne@69: jpayne@69: /* crypto engine for the SSL-sub system */ jpayne@69: CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), jpayne@69: jpayne@69: /* set the crypto engine for the SSL-sub system as default jpayne@69: the param has no meaning... jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), jpayne@69: jpayne@69: /* Non-zero value means to use the global dns cache */ jpayne@69: /* DEPRECATED, do not use! */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, jpayne@69: 7.11.1, "Use CURLOPT_SHARE"), jpayne@69: jpayne@69: /* DNS cache timeout */ jpayne@69: CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), jpayne@69: jpayne@69: /* send linked-list of pre-transfer QUOTE commands */ jpayne@69: CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), jpayne@69: jpayne@69: /* set the debug function */ jpayne@69: CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), jpayne@69: jpayne@69: /* set the data for the debug function */ jpayne@69: CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), jpayne@69: jpayne@69: /* mark this as start of a cookie session */ jpayne@69: CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), jpayne@69: jpayne@69: /* The CApath directory used to validate the peer certificate jpayne@69: this option is used only if SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), jpayne@69: jpayne@69: /* Instruct libcurl to use a smaller receive buffer */ jpayne@69: CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), jpayne@69: jpayne@69: /* Instruct libcurl to not use any signal/alarm handlers, even when using jpayne@69: timeouts. This option is useful for multi-threaded applications. jpayne@69: See libcurl-the-guide for more background information. */ jpayne@69: CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), jpayne@69: jpayne@69: /* Provide a CURLShare for mutexing non-ts data */ jpayne@69: CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), jpayne@69: jpayne@69: /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), jpayne@69: CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and jpayne@69: CURLPROXY_SOCKS5. */ jpayne@69: CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), jpayne@69: jpayne@69: /* Set the Accept-Encoding string. Use this to tell a server you would like jpayne@69: the response to be compressed. Before 7.21.6, this was known as jpayne@69: CURLOPT_ENCODING */ jpayne@69: CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), jpayne@69: jpayne@69: /* Set pointer to private data */ jpayne@69: CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), jpayne@69: jpayne@69: /* Set aliases for HTTP 200 in the HTTP Response header */ jpayne@69: CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), jpayne@69: jpayne@69: /* Continue to send authentication (user+password) when following locations, jpayne@69: even when hostname changed. This can potentially send off the name jpayne@69: and password to whatever host the server decides. */ jpayne@69: CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), jpayne@69: jpayne@69: /* Specifically switch on or off the FTP engine's use of the EPRT command ( jpayne@69: it also disables the LPRT attempt). By default, those ones will always be jpayne@69: attempted before the good old traditional PORT command. */ jpayne@69: CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), jpayne@69: jpayne@69: /* Set this to a bitmask value to enable the particular authentications jpayne@69: methods you like. Use this in combination with CURLOPT_USERPWD. jpayne@69: Note that setting multiple bits may cause extra network round-trips. */ jpayne@69: CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), jpayne@69: jpayne@69: /* Set the ssl context callback function, currently only for OpenSSL or jpayne@69: WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. jpayne@69: The function must match the curl_ssl_ctx_callback prototype. */ jpayne@69: CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), jpayne@69: jpayne@69: /* Set the userdata for the ssl context callback function's third jpayne@69: argument */ jpayne@69: CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), jpayne@69: jpayne@69: /* FTP Option that causes missing dirs to be created on the remote server. jpayne@69: In 7.19.4 we introduced the convenience enums for this option using the jpayne@69: CURLFTP_CREATE_DIR prefix. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), jpayne@69: jpayne@69: /* Set this to a bitmask value to enable the particular authentications jpayne@69: methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. jpayne@69: Note that setting multiple bits may cause extra network round-trips. */ jpayne@69: CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), jpayne@69: jpayne@69: /* Option that changes the timeout, in seconds, associated with getting a jpayne@69: response. This is different from transfer timeout time and essentially jpayne@69: places a demand on the server to acknowledge commands in a timely jpayne@69: manner. For FTP, SMTP, IMAP and POP3. */ jpayne@69: CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), jpayne@69: jpayne@69: /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to jpayne@69: tell libcurl to use those IP versions only. This only has effect on jpayne@69: systems with support for more than one, i.e IPv4 _and_ IPv6. */ jpayne@69: CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), jpayne@69: jpayne@69: /* Set this option to limit the size of a file that will be downloaded from jpayne@69: an HTTP or FTP server. jpayne@69: jpayne@69: Note there is also _LARGE version which adds large file support for jpayne@69: platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ jpayne@69: CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), jpayne@69: jpayne@69: /* See the comment for INFILESIZE above, but in short, specifies jpayne@69: * the size of the file being uploaded. -1 means unknown. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), jpayne@69: jpayne@69: /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version jpayne@69: * of this; look above for RESUME_FROM. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), jpayne@69: jpayne@69: /* Sets the maximum size of data that will be downloaded from jpayne@69: * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), jpayne@69: jpayne@69: /* Set this option to the file name of your .netrc file you want libcurl jpayne@69: to parse (using the CURLOPT_NETRC option). If not set, libcurl will do jpayne@69: a poor attempt to find the user's home directory and check for a .netrc jpayne@69: file in there. */ jpayne@69: CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), jpayne@69: jpayne@69: /* Enable SSL/TLS for FTP, pick one of: jpayne@69: CURLUSESSL_TRY - try using SSL, proceed anyway otherwise jpayne@69: CURLUSESSL_CONTROL - SSL for the control connection or fail jpayne@69: CURLUSESSL_ALL - SSL for all communication or fail jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), jpayne@69: jpayne@69: /* The _LARGE version of the standard POSTFIELDSIZE option */ jpayne@69: CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), jpayne@69: jpayne@69: /* Enable/disable the TCP Nagle algorithm */ jpayne@69: CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), jpayne@69: jpayne@69: /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ jpayne@69: /* 123 OBSOLETE. Gone in 7.16.0 */ jpayne@69: /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ jpayne@69: /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ jpayne@69: /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ jpayne@69: /* 127 OBSOLETE. Gone in 7.16.0 */ jpayne@69: /* 128 OBSOLETE. Gone in 7.16.0 */ jpayne@69: jpayne@69: /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option jpayne@69: can be used to change libcurl's default action which is to first try jpayne@69: "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK jpayne@69: response has been received. jpayne@69: jpayne@69: Available parameters are: jpayne@69: CURLFTPAUTH_DEFAULT - let libcurl decide jpayne@69: CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS jpayne@69: CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), jpayne@69: jpayne@69: CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, jpayne@69: 7.18.0, "Use CURLOPT_SEEKFUNCTION"), jpayne@69: CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, jpayne@69: 7.18.0, "Use CURLOPT_SEEKDATA"), jpayne@69: jpayne@69: /* 132 OBSOLETE. Gone in 7.16.0 */ jpayne@69: /* 133 OBSOLETE. Gone in 7.16.0 */ jpayne@69: jpayne@69: /* null-terminated string for pass on to the FTP server when asked for jpayne@69: "account" info */ jpayne@69: CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), jpayne@69: jpayne@69: /* feed cookie into cookie engine */ jpayne@69: CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), jpayne@69: jpayne@69: /* ignore Content-Length */ jpayne@69: CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), jpayne@69: jpayne@69: /* Set to non-zero to skip the IP address received in a 227 PASV FTP server jpayne@69: response. Typically used for FTP-SSL purposes but is not restricted to jpayne@69: that. libcurl will then instead use the same IP address it used for the jpayne@69: control connection. */ jpayne@69: CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), jpayne@69: jpayne@69: /* Select "file method" to use when doing FTP, see the curl_ftpmethod jpayne@69: above. */ jpayne@69: CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), jpayne@69: jpayne@69: /* Local port number to bind the socket to */ jpayne@69: CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), jpayne@69: jpayne@69: /* Number of ports to try, including the first one set with LOCALPORT. jpayne@69: Thus, setting it to 1 will make no additional attempts but the first. jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), jpayne@69: jpayne@69: /* no transfer, set up connection and let application use the socket by jpayne@69: extracting it with CURLINFO_LASTSOCKET */ jpayne@69: CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), jpayne@69: jpayne@69: /* Function that will be called to convert from the jpayne@69: network encoding (instead of using the iconv calls in libcurl) */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, jpayne@69: CURLOPTTYPE_FUNCTIONPOINT, 142, jpayne@69: 7.82.0, "Serves no purpose anymore"), jpayne@69: jpayne@69: /* Function that will be called to convert to the jpayne@69: network encoding (instead of using the iconv calls in libcurl) */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, jpayne@69: CURLOPTTYPE_FUNCTIONPOINT, 143, jpayne@69: 7.82.0, "Serves no purpose anymore"), jpayne@69: jpayne@69: /* Function that will be called to convert from UTF8 jpayne@69: (instead of using the iconv calls in libcurl) jpayne@69: Note that this is used only for SSL certificate processing */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, jpayne@69: CURLOPTTYPE_FUNCTIONPOINT, 144, jpayne@69: 7.82.0, "Serves no purpose anymore"), jpayne@69: jpayne@69: /* if the connection proceeds too quickly then need to slow it down */ jpayne@69: /* limit-rate: maximum number of bytes per second to send or receive */ jpayne@69: CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), jpayne@69: CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), jpayne@69: jpayne@69: /* Pointer to command string to send if USER/PASS fails. */ jpayne@69: CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), jpayne@69: jpayne@69: /* callback function for setting socket options */ jpayne@69: CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), jpayne@69: CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), jpayne@69: jpayne@69: /* set to 0 to disable session ID re-use for this transfer, default is jpayne@69: enabled (== 1) */ jpayne@69: CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), jpayne@69: jpayne@69: /* allowed SSH authentication methods */ jpayne@69: CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), jpayne@69: jpayne@69: /* Used by scp/sftp to do public/private key authentication */ jpayne@69: CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), jpayne@69: CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), jpayne@69: jpayne@69: /* Send CCC (Clear Command Channel) after authentication */ jpayne@69: CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), jpayne@69: jpayne@69: /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ jpayne@69: CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), jpayne@69: CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), jpayne@69: jpayne@69: /* set to zero to disable the libcurl's decoding and thus pass the raw body jpayne@69: data to the application even when it is encoded/compressed */ jpayne@69: CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), jpayne@69: CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), jpayne@69: jpayne@69: /* Permission used when creating new files and directories on the remote jpayne@69: server for protocols that support it, SFTP/SCP/FILE */ jpayne@69: CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), jpayne@69: CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), jpayne@69: jpayne@69: /* Set the behavior of POST when redirecting. Values must be set to one jpayne@69: of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ jpayne@69: CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), jpayne@69: jpayne@69: /* used by scp/sftp to verify the host's public key */ jpayne@69: CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), jpayne@69: jpayne@69: /* Callback function for opening socket (instead of socket(2)). Optionally, jpayne@69: callback is able change the address or refuse to connect returning jpayne@69: CURL_SOCKET_BAD. The callback should have type jpayne@69: curl_opensocket_callback */ jpayne@69: CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), jpayne@69: CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), jpayne@69: jpayne@69: /* POST volatile input fields. */ jpayne@69: CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), jpayne@69: jpayne@69: /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), jpayne@69: jpayne@69: /* Callback function for seeking in the input stream */ jpayne@69: CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), jpayne@69: CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), jpayne@69: jpayne@69: /* CRL file */ jpayne@69: CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), jpayne@69: jpayne@69: /* Issuer certificate */ jpayne@69: CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), jpayne@69: jpayne@69: /* (IPv6) Address scope */ jpayne@69: CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), jpayne@69: jpayne@69: /* Collect certificate chain info and allow it to get retrievable with jpayne@69: CURLINFO_CERTINFO after the transfer is complete. */ jpayne@69: CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), jpayne@69: jpayne@69: /* "name" and "pwd" to use when fetching. */ jpayne@69: CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), jpayne@69: CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), jpayne@69: jpayne@69: /* "name" and "pwd" to use with Proxy when fetching. */ jpayne@69: CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), jpayne@69: CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), jpayne@69: jpayne@69: /* Comma separated list of hostnames defining no-proxy zones. These should jpayne@69: match both hostnames directly, and hostnames within a domain. For jpayne@69: example, local.com will match local.com and www.local.com, but NOT jpayne@69: notlocal.com or www.notlocal.com. For compatibility with other jpayne@69: implementations of this, .local.com will be considered to be the same as jpayne@69: local.com. A single * is the only valid wildcard, and effectively jpayne@69: disables the use of proxy. */ jpayne@69: CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), jpayne@69: jpayne@69: /* block size for TFTP transfers */ jpayne@69: CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), jpayne@69: jpayne@69: /* Socks Service */ jpayne@69: /* DEPRECATED, do not use! */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, jpayne@69: CURLOPTTYPE_STRINGPOINT, 179, jpayne@69: 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), jpayne@69: jpayne@69: /* Socks Service */ jpayne@69: CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), jpayne@69: jpayne@69: /* set the bitmask for the protocols that are allowed to be used for the jpayne@69: transfer, which thus helps the app which takes URLs from users or other jpayne@69: external inputs and want to restrict what protocol(s) to deal jpayne@69: with. Defaults to CURLPROTO_ALL. */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, jpayne@69: 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), jpayne@69: jpayne@69: /* set the bitmask for the protocols that libcurl is allowed to follow to, jpayne@69: as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs jpayne@69: to be set in both bitmasks to be allowed to get redirected to. */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, jpayne@69: 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), jpayne@69: jpayne@69: /* set the SSH knownhost file name to use */ jpayne@69: CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), jpayne@69: jpayne@69: /* set the SSH host key callback, must point to a curl_sshkeycallback jpayne@69: function */ jpayne@69: CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), jpayne@69: jpayne@69: /* set the SSH host key callback custom pointer */ jpayne@69: CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), jpayne@69: jpayne@69: /* set the SMTP mail originator */ jpayne@69: CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), jpayne@69: jpayne@69: /* set the list of SMTP mail receiver(s) */ jpayne@69: CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), jpayne@69: jpayne@69: /* FTP: send PRET before PASV */ jpayne@69: CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), jpayne@69: jpayne@69: /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ jpayne@69: CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), jpayne@69: jpayne@69: /* The RTSP session identifier */ jpayne@69: CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), jpayne@69: jpayne@69: /* The RTSP stream URI */ jpayne@69: CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), jpayne@69: jpayne@69: /* The Transport: header to use in RTSP requests */ jpayne@69: CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), jpayne@69: jpayne@69: /* Manually initialize the client RTSP CSeq for this handle */ jpayne@69: CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), jpayne@69: jpayne@69: /* Manually initialize the server RTSP CSeq for this handle */ jpayne@69: CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), jpayne@69: jpayne@69: /* The stream to pass to INTERLEAVEFUNCTION. */ jpayne@69: CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), jpayne@69: jpayne@69: /* Let the application define a custom write method for RTP data */ jpayne@69: CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), jpayne@69: jpayne@69: /* Turn on wildcard matching */ jpayne@69: CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), jpayne@69: jpayne@69: /* Directory matching callback called before downloading of an jpayne@69: individual file (chunk) started */ jpayne@69: CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), jpayne@69: jpayne@69: /* Directory matching callback called after the file (chunk) jpayne@69: was downloaded, or skipped */ jpayne@69: CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), jpayne@69: jpayne@69: /* Change match (fnmatch-like) callback for wildcard matching */ jpayne@69: CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), jpayne@69: jpayne@69: /* Let the application define custom chunk data pointer */ jpayne@69: CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), jpayne@69: jpayne@69: /* FNMATCH_FUNCTION user pointer */ jpayne@69: CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), jpayne@69: jpayne@69: /* send linked-list of name:port:address sets */ jpayne@69: CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), jpayne@69: jpayne@69: /* Set a username for authenticated TLS */ jpayne@69: CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), jpayne@69: jpayne@69: /* Set a password for authenticated TLS */ jpayne@69: CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), jpayne@69: jpayne@69: /* Set authentication type for authenticated TLS */ jpayne@69: CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), jpayne@69: jpayne@69: /* Set to 1 to enable the "TE:" header in HTTP requests to ask for jpayne@69: compressed transfer-encoded responses. Set to 0 to disable the use of TE: jpayne@69: in outgoing requests. The current default is 0, but it might change in a jpayne@69: future libcurl release. jpayne@69: jpayne@69: libcurl will ask for the compressed methods it knows of, and if that jpayne@69: isn't any, it will not ask for transfer-encoding at all even if this jpayne@69: option is set to 1. jpayne@69: jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), jpayne@69: jpayne@69: /* Callback function for closing socket (instead of close(2)). The callback jpayne@69: should have type curl_closesocket_callback */ jpayne@69: CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), jpayne@69: CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), jpayne@69: jpayne@69: /* allow GSSAPI credential delegation */ jpayne@69: CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), jpayne@69: jpayne@69: /* Set the name servers to use for DNS resolution */ jpayne@69: CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), jpayne@69: jpayne@69: /* Time-out accept operations (currently for FTP only) after this amount jpayne@69: of milliseconds. */ jpayne@69: CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), jpayne@69: jpayne@69: /* Set TCP keepalive */ jpayne@69: CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), jpayne@69: jpayne@69: /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ jpayne@69: CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), jpayne@69: CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), jpayne@69: jpayne@69: /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ jpayne@69: CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), jpayne@69: jpayne@69: /* Set the SMTP auth originator */ jpayne@69: CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), jpayne@69: jpayne@69: /* Enable/disable SASL initial response */ jpayne@69: CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), jpayne@69: jpayne@69: /* Function that will be called instead of the internal progress display jpayne@69: * function. This function should be defined as the curl_xferinfo_callback jpayne@69: * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ jpayne@69: CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), jpayne@69: jpayne@69: /* The XOAUTH2 bearer token */ jpayne@69: CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), jpayne@69: jpayne@69: /* Set the interface string to use as outgoing network jpayne@69: * interface for DNS requests. jpayne@69: * Only supported by the c-ares DNS backend */ jpayne@69: CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), jpayne@69: jpayne@69: /* Set the local IPv4 address to use for outgoing DNS requests. jpayne@69: * Only supported by the c-ares DNS backend */ jpayne@69: CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), jpayne@69: jpayne@69: /* Set the local IPv6 address to use for outgoing DNS requests. jpayne@69: * Only supported by the c-ares DNS backend */ jpayne@69: CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), jpayne@69: jpayne@69: /* Set authentication options directly */ jpayne@69: CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), jpayne@69: jpayne@69: /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ jpayne@69: CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, jpayne@69: 7.86.0, "Has no function"), jpayne@69: jpayne@69: /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ jpayne@69: CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), jpayne@69: jpayne@69: /* Time to wait for a response to an HTTP request containing an jpayne@69: * Expect: 100-continue header before sending the data anyway. */ jpayne@69: CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), jpayne@69: jpayne@69: /* This points to a linked list of headers used for proxy requests only, jpayne@69: struct curl_slist kind */ jpayne@69: CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), jpayne@69: jpayne@69: /* Pass in a bitmask of "header options" */ jpayne@69: CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), jpayne@69: jpayne@69: /* The public key in DER form used to validate the peer public key jpayne@69: this option is used only if SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), jpayne@69: jpayne@69: /* Path to Unix domain socket */ jpayne@69: CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), jpayne@69: jpayne@69: /* Set if we should verify the certificate status. */ jpayne@69: CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), jpayne@69: jpayne@69: /* Set if we should enable TLS false start. */ jpayne@69: CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), jpayne@69: jpayne@69: /* Do not squash dot-dot sequences */ jpayne@69: CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), jpayne@69: jpayne@69: /* Proxy Service Name */ jpayne@69: CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), jpayne@69: jpayne@69: /* Service Name */ jpayne@69: CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), jpayne@69: jpayne@69: /* Wait/don't wait for pipe/mutex to clarify */ jpayne@69: CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), jpayne@69: jpayne@69: /* Set the protocol used when curl is given a URL without a protocol */ jpayne@69: CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), jpayne@69: jpayne@69: /* Set stream weight, 1 - 256 (default is 16) */ jpayne@69: CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), jpayne@69: jpayne@69: /* Set stream dependency on another CURL handle */ jpayne@69: CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), jpayne@69: jpayne@69: /* Set E-xclusive stream dependency on another CURL handle */ jpayne@69: CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), jpayne@69: jpayne@69: /* Do not send any tftp option requests to the server */ jpayne@69: CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), jpayne@69: jpayne@69: /* Linked-list of host:port:connect-to-host:connect-to-port, jpayne@69: overrides the URL's host:port (only for the network layer) */ jpayne@69: CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), jpayne@69: jpayne@69: /* Set TCP Fast Open */ jpayne@69: CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), jpayne@69: jpayne@69: /* Continue to send data if the server responds early with an jpayne@69: * HTTP status code >= 300 */ jpayne@69: CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), jpayne@69: jpayne@69: /* The CApath or CAfile used to validate the proxy certificate jpayne@69: this option is used only if PROXY_SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), jpayne@69: jpayne@69: /* The CApath directory used to validate the proxy certificate jpayne@69: this option is used only if PROXY_SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), jpayne@69: jpayne@69: /* Set if we should verify the proxy in ssl handshake, jpayne@69: set 1 to verify. */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), jpayne@69: jpayne@69: /* Set if we should verify the Common name from the proxy certificate in ssl jpayne@69: * handshake, set 1 to check existence, 2 to ensure that it matches jpayne@69: * the provided hostname. */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), jpayne@69: jpayne@69: /* What version to specifically try to use for proxy. jpayne@69: See CURL_SSLVERSION defines below. */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), jpayne@69: jpayne@69: /* Set a username for authenticated TLS for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), jpayne@69: jpayne@69: /* Set a password for authenticated TLS for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), jpayne@69: jpayne@69: /* Set authentication type for authenticated TLS for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), jpayne@69: jpayne@69: /* name of the file keeping your private SSL-certificate for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), jpayne@69: jpayne@69: /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for jpayne@69: proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), jpayne@69: jpayne@69: /* name of the file keeping your private SSL-key for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), jpayne@69: jpayne@69: /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for jpayne@69: proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), jpayne@69: jpayne@69: /* password for the SSL private key for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), jpayne@69: jpayne@69: /* Specify which SSL ciphers to use for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), jpayne@69: jpayne@69: /* CRL file for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), jpayne@69: jpayne@69: /* Enable/disable specific SSL features with a bitmask for proxy, see jpayne@69: CURLSSLOPT_* */ jpayne@69: CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), jpayne@69: jpayne@69: /* Name of pre proxy to use. */ jpayne@69: CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), jpayne@69: jpayne@69: /* The public key in DER form used to validate the proxy public key jpayne@69: this option is used only if PROXY_SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), jpayne@69: jpayne@69: /* Path to an abstract Unix domain socket */ jpayne@69: CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), jpayne@69: jpayne@69: /* Suppress proxy CONNECT response headers from user callbacks */ jpayne@69: CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), jpayne@69: jpayne@69: /* The request target, instead of extracted from the URL */ jpayne@69: CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), jpayne@69: jpayne@69: /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ jpayne@69: CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), jpayne@69: jpayne@69: /* Enable/disable SSH compression */ jpayne@69: CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), jpayne@69: jpayne@69: /* Post MIME data. */ jpayne@69: CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), jpayne@69: jpayne@69: /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of jpayne@69: seconds since 1 Jan 1970. */ jpayne@69: CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), jpayne@69: jpayne@69: /* Head start in milliseconds to give happy eyeballs. */ jpayne@69: CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), jpayne@69: jpayne@69: /* Function that will be called before a resolver request is made */ jpayne@69: CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), jpayne@69: jpayne@69: /* User data to pass to the resolver start callback. */ jpayne@69: CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), jpayne@69: jpayne@69: /* send HAProxy PROXY protocol header? */ jpayne@69: CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), jpayne@69: jpayne@69: /* shuffle addresses before use when DNS returns multiple */ jpayne@69: CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), jpayne@69: jpayne@69: /* Specify which TLS 1.3 ciphers suites to use */ jpayne@69: CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), jpayne@69: CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), jpayne@69: jpayne@69: /* Disallow specifying username/login in URL. */ jpayne@69: CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), jpayne@69: jpayne@69: /* DNS-over-HTTPS URL */ jpayne@69: CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), jpayne@69: jpayne@69: /* Preferred buffer size to use for uploads */ jpayne@69: CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), jpayne@69: jpayne@69: /* Time in ms between connection upkeep calls for long-lived connections. */ jpayne@69: CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), jpayne@69: jpayne@69: /* Specify URL using CURL URL API. */ jpayne@69: CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), jpayne@69: jpayne@69: /* add trailing data just after no more data is available */ jpayne@69: CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), jpayne@69: jpayne@69: /* pointer to be passed to HTTP_TRAILER_FUNCTION */ jpayne@69: CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), jpayne@69: jpayne@69: /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ jpayne@69: CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), jpayne@69: jpayne@69: /* alt-svc control bitmask */ jpayne@69: CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), jpayne@69: jpayne@69: /* alt-svc cache file name to possibly read from/write to */ jpayne@69: CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), jpayne@69: jpayne@69: /* maximum age (idle time) of a connection to consider it for reuse jpayne@69: * (in seconds) */ jpayne@69: CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), jpayne@69: jpayne@69: /* SASL authorization identity */ jpayne@69: CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), jpayne@69: jpayne@69: /* allow RCPT TO command to fail for some recipients */ jpayne@69: CURLOPT(CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOPTTYPE_LONG, 290), jpayne@69: jpayne@69: /* the private SSL-certificate as a "blob" */ jpayne@69: CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), jpayne@69: CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), jpayne@69: CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), jpayne@69: CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), jpayne@69: CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), jpayne@69: jpayne@69: /* Issuer certificate for proxy */ jpayne@69: CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), jpayne@69: CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), jpayne@69: jpayne@69: /* the EC curves requested by the TLS client (RFC 8422, 5.1); jpayne@69: * OpenSSL support via 'set_groups'/'set_curves': jpayne@69: * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html jpayne@69: */ jpayne@69: CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), jpayne@69: jpayne@69: /* HSTS bitmask */ jpayne@69: CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), jpayne@69: /* HSTS file name */ jpayne@69: CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), jpayne@69: jpayne@69: /* HSTS read callback */ jpayne@69: CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), jpayne@69: CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), jpayne@69: jpayne@69: /* HSTS write callback */ jpayne@69: CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), jpayne@69: CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), jpayne@69: jpayne@69: /* Parameters for V4 signature */ jpayne@69: CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), jpayne@69: jpayne@69: /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ jpayne@69: CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), jpayne@69: jpayne@69: /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ jpayne@69: CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), jpayne@69: jpayne@69: /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ jpayne@69: CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), jpayne@69: jpayne@69: /* The CA certificates as "blob" used to validate the peer certificate jpayne@69: this option is used only if SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), jpayne@69: jpayne@69: /* The CA certificates as "blob" used to validate the proxy certificate jpayne@69: this option is used only if PROXY_SSL_VERIFYPEER is true */ jpayne@69: CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), jpayne@69: jpayne@69: /* used by scp/sftp to verify the host's public key */ jpayne@69: CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), jpayne@69: jpayne@69: /* Function that will be called immediately before the initial request jpayne@69: is made on a connection (after any protocol negotiation step). */ jpayne@69: CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), jpayne@69: jpayne@69: /* Data passed to the CURLOPT_PREREQFUNCTION callback */ jpayne@69: CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), jpayne@69: jpayne@69: /* maximum age (since creation) of a connection to consider it for reuse jpayne@69: * (in seconds) */ jpayne@69: CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), jpayne@69: jpayne@69: /* Set MIME option flags. */ jpayne@69: CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), jpayne@69: jpayne@69: /* set the SSH host key callback, must point to a curl_sshkeycallback jpayne@69: function */ jpayne@69: CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), jpayne@69: jpayne@69: /* set the SSH host key callback custom pointer */ jpayne@69: CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), jpayne@69: jpayne@69: /* specify which protocols that are allowed to be used for the transfer, jpayne@69: which thus helps the app which takes URLs from users or other external jpayne@69: inputs and want to restrict what protocol(s) to deal with. Defaults to jpayne@69: all built-in protocols. */ jpayne@69: CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), jpayne@69: jpayne@69: /* specify which protocols that libcurl is allowed to follow directs to */ jpayne@69: CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), jpayne@69: jpayne@69: /* websockets options */ jpayne@69: CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), jpayne@69: jpayne@69: /* CA cache timeout */ jpayne@69: CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), jpayne@69: jpayne@69: /* Can leak things, gonna exit() soon */ jpayne@69: CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), jpayne@69: jpayne@69: CURLOPT_LASTENTRY /* the last unused */ jpayne@69: } CURLoption; jpayne@69: jpayne@69: #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all jpayne@69: the obsolete stuff removed! */ jpayne@69: jpayne@69: /* Backwards compatibility with older names */ jpayne@69: /* These are scheduled to disappear by 2011 */ jpayne@69: jpayne@69: /* This was added in version 7.19.1 */ jpayne@69: #define CURLOPT_POST301 CURLOPT_POSTREDIR jpayne@69: jpayne@69: /* These are scheduled to disappear by 2009 */ jpayne@69: jpayne@69: /* The following were added in 7.17.0 */ jpayne@69: #define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD jpayne@69: #define CURLOPT_FTPAPPEND CURLOPT_APPEND jpayne@69: #define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY jpayne@69: #define CURLOPT_FTP_SSL CURLOPT_USE_SSL jpayne@69: jpayne@69: /* The following were added earlier */ jpayne@69: jpayne@69: #define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD jpayne@69: #define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL jpayne@69: jpayne@69: /* */ jpayne@69: #define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT jpayne@69: jpayne@69: #else jpayne@69: /* This is set if CURL_NO_OLDIES is defined at compile-time */ jpayne@69: #undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ jpayne@69: #endif jpayne@69: jpayne@69: jpayne@69: /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host jpayne@69: name resolves addresses using more than one IP protocol version, this jpayne@69: option might be handy to force libcurl to use a specific IP version. */ jpayne@69: #define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP jpayne@69: versions that your system allows */ jpayne@69: #define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ jpayne@69: #define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ jpayne@69: jpayne@69: /* Convenient "aliases" */ jpayne@69: #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER jpayne@69: jpayne@69: /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ jpayne@69: enum { jpayne@69: CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd jpayne@69: like the library to choose the best possible jpayne@69: for us! */ jpayne@69: CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ jpayne@69: CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ jpayne@69: CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ jpayne@69: CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ jpayne@69: CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 jpayne@69: Upgrade */ jpayne@69: CURL_HTTP_VERSION_3 = 30, /* Makes use of explicit HTTP/3 without fallback. jpayne@69: Use CURLOPT_ALTSVC to enable HTTP/3 upgrade */ jpayne@69: CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ jpayne@69: }; jpayne@69: jpayne@69: /* Convenience definition simple because the name of the version is HTTP/2 and jpayne@69: not 2.0. The 2_0 version of the enum name was set while the version was jpayne@69: still planned to be 2.0 and we stick to it for compatibility. */ jpayne@69: #define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 jpayne@69: jpayne@69: /* jpayne@69: * Public API enums for RTSP requests jpayne@69: */ jpayne@69: enum { jpayne@69: CURL_RTSPREQ_NONE, /* first in list */ jpayne@69: CURL_RTSPREQ_OPTIONS, jpayne@69: CURL_RTSPREQ_DESCRIBE, jpayne@69: CURL_RTSPREQ_ANNOUNCE, jpayne@69: CURL_RTSPREQ_SETUP, jpayne@69: CURL_RTSPREQ_PLAY, jpayne@69: CURL_RTSPREQ_PAUSE, jpayne@69: CURL_RTSPREQ_TEARDOWN, jpayne@69: CURL_RTSPREQ_GET_PARAMETER, jpayne@69: CURL_RTSPREQ_SET_PARAMETER, jpayne@69: CURL_RTSPREQ_RECORD, jpayne@69: CURL_RTSPREQ_RECEIVE, jpayne@69: CURL_RTSPREQ_LAST /* last in list */ jpayne@69: }; jpayne@69: jpayne@69: /* These enums are for use with the CURLOPT_NETRC option. */ jpayne@69: enum CURL_NETRC_OPTION { jpayne@69: CURL_NETRC_IGNORED, /* The .netrc will never be read. jpayne@69: * This is the default. */ jpayne@69: CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred jpayne@69: * to one in the .netrc. */ jpayne@69: CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. jpayne@69: * Unless one is set programmatically, the .netrc jpayne@69: * will be queried. */ jpayne@69: CURL_NETRC_LAST jpayne@69: }; jpayne@69: jpayne@69: enum { jpayne@69: CURL_SSLVERSION_DEFAULT, jpayne@69: CURL_SSLVERSION_TLSv1, /* TLS 1.x */ jpayne@69: CURL_SSLVERSION_SSLv2, jpayne@69: CURL_SSLVERSION_SSLv3, jpayne@69: CURL_SSLVERSION_TLSv1_0, jpayne@69: CURL_SSLVERSION_TLSv1_1, jpayne@69: CURL_SSLVERSION_TLSv1_2, jpayne@69: CURL_SSLVERSION_TLSv1_3, jpayne@69: jpayne@69: CURL_SSLVERSION_LAST /* never use, keep last */ jpayne@69: }; jpayne@69: jpayne@69: enum { jpayne@69: CURL_SSLVERSION_MAX_NONE = 0, jpayne@69: CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), jpayne@69: CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), jpayne@69: CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), jpayne@69: CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), jpayne@69: CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), jpayne@69: jpayne@69: /* never use, keep last */ jpayne@69: CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) jpayne@69: }; jpayne@69: jpayne@69: enum CURL_TLSAUTH { jpayne@69: CURL_TLSAUTH_NONE, jpayne@69: CURL_TLSAUTH_SRP, jpayne@69: CURL_TLSAUTH_LAST /* never use, keep last */ jpayne@69: }; jpayne@69: jpayne@69: /* symbols to use with CURLOPT_POSTREDIR. jpayne@69: CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 jpayne@69: can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 jpayne@69: | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ jpayne@69: jpayne@69: #define CURL_REDIR_GET_ALL 0 jpayne@69: #define CURL_REDIR_POST_301 1 jpayne@69: #define CURL_REDIR_POST_302 2 jpayne@69: #define CURL_REDIR_POST_303 4 jpayne@69: #define CURL_REDIR_POST_ALL \ jpayne@69: (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) jpayne@69: jpayne@69: typedef enum { jpayne@69: CURL_TIMECOND_NONE, jpayne@69: jpayne@69: CURL_TIMECOND_IFMODSINCE, jpayne@69: CURL_TIMECOND_IFUNMODSINCE, jpayne@69: CURL_TIMECOND_LASTMOD, jpayne@69: jpayne@69: CURL_TIMECOND_LAST jpayne@69: } curl_TimeCond; jpayne@69: jpayne@69: /* Special size_t value signaling a null-terminated string. */ jpayne@69: #define CURL_ZERO_TERMINATED ((size_t) -1) jpayne@69: jpayne@69: /* curl_strequal() and curl_strnequal() are subject for removal in a future jpayne@69: release */ jpayne@69: CURL_EXTERN int curl_strequal(const char *s1, const char *s2); jpayne@69: CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); jpayne@69: jpayne@69: /* Mime/form handling support. */ jpayne@69: typedef struct curl_mime curl_mime; /* Mime context. */ jpayne@69: typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ jpayne@69: jpayne@69: /* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ jpayne@69: #define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_init() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Create a mime context and return its handle. The easy parameter is the jpayne@69: * target handle. jpayne@69: */ jpayne@69: CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_free() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * release a mime handle and its substructures. jpayne@69: */ jpayne@69: CURL_EXTERN void curl_mime_free(curl_mime *mime); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_addpart() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Append a new empty part to the given mime context and return a handle to jpayne@69: * the created part. jpayne@69: */ jpayne@69: CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_name() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime/form part name. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_filename() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part remote file name. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, jpayne@69: const char *filename); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_type() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part type. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_encoder() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime data transfer encoder. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, jpayne@69: const char *encoding); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_data() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part data source from memory data, jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, jpayne@69: const char *data, size_t datasize); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_filedata() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part data source from named file. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, jpayne@69: const char *filename); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_data_cb() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part data source from callback function. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, jpayne@69: curl_off_t datasize, jpayne@69: curl_read_callback readfunc, jpayne@69: curl_seek_callback seekfunc, jpayne@69: curl_free_callback freefunc, jpayne@69: void *arg); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_mime_subparts() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part data source from subparts. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, jpayne@69: curl_mime *subparts); jpayne@69: /* jpayne@69: * NAME curl_mime_headers() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Set mime part headers. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, jpayne@69: struct curl_slist *headers, jpayne@69: int take_ownership); jpayne@69: jpayne@69: typedef enum { jpayne@69: /********* the first one is unused ************/ jpayne@69: CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), jpayne@69: CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), jpayne@69: CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), jpayne@69: CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURLFORM_OBSOLETE, jpayne@69: CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), jpayne@69: jpayne@69: CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), jpayne@69: CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: jpayne@69: CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), jpayne@69: CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), jpayne@69: CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), jpayne@69: CURLFORM_END, jpayne@69: CURLFORM_OBSOLETE2, jpayne@69: jpayne@69: CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), jpayne@69: CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ jpayne@69: CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), jpayne@69: jpayne@69: CURLFORM_LASTENTRY /* the last unused */ jpayne@69: } CURLformoption; jpayne@69: jpayne@69: /* structure to be used as parameter for CURLFORM_ARRAY */ jpayne@69: struct curl_forms { jpayne@69: CURLformoption option; jpayne@69: const char *value; jpayne@69: }; jpayne@69: jpayne@69: /* use this for multipart formpost building */ jpayne@69: /* Returns code for curl_formadd() jpayne@69: * jpayne@69: * Returns: jpayne@69: * CURL_FORMADD_OK on success jpayne@69: * CURL_FORMADD_MEMORY if the FormInfo allocation fails jpayne@69: * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form jpayne@69: * CURL_FORMADD_NULL if a null pointer was given for a char jpayne@69: * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed jpayne@69: * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used jpayne@69: * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) jpayne@69: * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated jpayne@69: * CURL_FORMADD_MEMORY if some allocation for string copying failed. jpayne@69: * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array jpayne@69: * jpayne@69: ***************************************************************************/ jpayne@69: typedef enum { jpayne@69: CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ jpayne@69: jpayne@69: CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), jpayne@69: CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), jpayne@69: /* libcurl was built with form api disabled */ jpayne@69: CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), jpayne@69: jpayne@69: CURL_FORMADD_LAST /* last */ jpayne@69: } CURLFORMcode; jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_formadd() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Pretty advanced function for building multi-part formposts. Each invoke jpayne@69: * adds one part that together construct a full post. Then use jpayne@69: * CURLOPT_HTTPPOST to send it off to libcurl. jpayne@69: */ jpayne@69: CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") jpayne@69: curl_formadd(struct curl_httppost **httppost, jpayne@69: struct curl_httppost **last_post, jpayne@69: ...); jpayne@69: jpayne@69: /* jpayne@69: * callback function for curl_formget() jpayne@69: * The void *arg pointer will be the one passed as second argument to jpayne@69: * curl_formget(). jpayne@69: * The character buffer passed to it must not be freed. jpayne@69: * Should return the buffer length passed to it as the argument "len" on jpayne@69: * success. jpayne@69: */ jpayne@69: typedef size_t (*curl_formget_callback)(void *arg, const char *buf, jpayne@69: size_t len); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_formget() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Serialize a curl_httppost struct built with curl_formadd(). jpayne@69: * Accepts a void pointer as second argument which will be passed to jpayne@69: * the curl_formget_callback function. jpayne@69: * Returns 0 on success. jpayne@69: */ jpayne@69: CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") jpayne@69: curl_formget(struct curl_httppost *form, void *arg, jpayne@69: curl_formget_callback append); jpayne@69: /* jpayne@69: * NAME curl_formfree() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Free a multipart formpost previously built with curl_formadd(). jpayne@69: */ jpayne@69: CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") jpayne@69: curl_formfree(struct curl_httppost *form); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_getenv() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Returns a malloc()'ed string that MUST be curl_free()ed after usage is jpayne@69: * complete. DEPRECATED - see lib/README.curlx jpayne@69: */ jpayne@69: CURL_EXTERN char *curl_getenv(const char *variable); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_version() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Returns a static ascii string of the libcurl version. jpayne@69: */ jpayne@69: CURL_EXTERN char *curl_version(void); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_easy_escape() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Escapes URL strings (converts all letters consider illegal in URLs to their jpayne@69: * %XX versions). This function returns a new allocated string or NULL if an jpayne@69: * error occurred. jpayne@69: */ jpayne@69: CURL_EXTERN char *curl_easy_escape(CURL *handle, jpayne@69: const char *string, jpayne@69: int length); jpayne@69: jpayne@69: /* the previous version: */ jpayne@69: CURL_EXTERN char *curl_escape(const char *string, jpayne@69: int length); jpayne@69: jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_easy_unescape() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Unescapes URL encoding in strings (converts all %XX codes to their 8bit jpayne@69: * versions). This function returns a new allocated string or NULL if an error jpayne@69: * occurred. jpayne@69: * Conversion Note: On non-ASCII platforms the ASCII %XX codes are jpayne@69: * converted into the host encoding. jpayne@69: */ jpayne@69: CURL_EXTERN char *curl_easy_unescape(CURL *handle, jpayne@69: const char *string, jpayne@69: int length, jpayne@69: int *outlength); jpayne@69: jpayne@69: /* the previous version */ jpayne@69: CURL_EXTERN char *curl_unescape(const char *string, jpayne@69: int length); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_free() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Provided for de-allocation in the same translation unit that did the jpayne@69: * allocation. Added in libcurl 7.10 jpayne@69: */ jpayne@69: CURL_EXTERN void curl_free(void *p); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_global_init() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * curl_global_init() should be invoked exactly once for each application that jpayne@69: * uses libcurl and before any call of other libcurl functions. jpayne@69: jpayne@69: * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the jpayne@69: * curl_version_info_data.features flag (fetch by curl_version_info()). jpayne@69: jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_global_init(long flags); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_global_init_mem() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * curl_global_init() or curl_global_init_mem() should be invoked exactly once jpayne@69: * for each application that uses libcurl. This function can be used to jpayne@69: * initialize libcurl and set user defined memory management callback jpayne@69: * functions. Users can implement memory management routines to check for jpayne@69: * memory leaks, check for mis-use of the curl library etc. User registered jpayne@69: * callback routines will be invoked by this library instead of the system jpayne@69: * memory management routines like malloc, free etc. jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_global_init_mem(long flags, jpayne@69: curl_malloc_callback m, jpayne@69: curl_free_callback f, jpayne@69: curl_realloc_callback r, jpayne@69: curl_strdup_callback s, jpayne@69: curl_calloc_callback c); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_global_cleanup() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * curl_global_cleanup() should be invoked exactly once for each application jpayne@69: * that uses libcurl jpayne@69: */ jpayne@69: CURL_EXTERN void curl_global_cleanup(void); jpayne@69: jpayne@69: /* linked-list structure for the CURLOPT_QUOTE option (and other) */ jpayne@69: struct curl_slist { jpayne@69: char *data; jpayne@69: struct curl_slist *next; jpayne@69: }; jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_global_sslset() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * When built with multiple SSL backends, curl_global_sslset() allows to jpayne@69: * choose one. This function can only be called once, and it must be called jpayne@69: * *before* curl_global_init(). jpayne@69: * jpayne@69: * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The jpayne@69: * backend can also be specified via the name parameter (passing -1 as id). jpayne@69: * If both id and name are specified, the name will be ignored. If neither id jpayne@69: * nor name are specified, the function will fail with jpayne@69: * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the jpayne@69: * NULL-terminated list of available backends. jpayne@69: * jpayne@69: * Upon success, the function returns CURLSSLSET_OK. jpayne@69: * jpayne@69: * If the specified SSL backend is not available, the function returns jpayne@69: * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated jpayne@69: * list of available SSL backends. jpayne@69: * jpayne@69: * The SSL backend can be set only once. If it has already been set, a jpayne@69: * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. jpayne@69: */ jpayne@69: jpayne@69: struct curl_ssl_backend { jpayne@69: curl_sslbackend id; jpayne@69: const char *name; jpayne@69: }; jpayne@69: typedef struct curl_ssl_backend curl_ssl_backend; jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLSSLSET_OK = 0, jpayne@69: CURLSSLSET_UNKNOWN_BACKEND, jpayne@69: CURLSSLSET_TOO_LATE, jpayne@69: CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ jpayne@69: } CURLsslset; jpayne@69: jpayne@69: CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, jpayne@69: const curl_ssl_backend ***avail); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_slist_append() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Appends a string to a linked list. If no list exists, it will be created jpayne@69: * first. Returns the new list, after appending. jpayne@69: */ jpayne@69: CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, jpayne@69: const char *data); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_slist_free_all() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * free a previously built curl_slist. jpayne@69: */ jpayne@69: CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_getdate() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * Returns the time, in seconds since 1 Jan 1970 of the time string given in jpayne@69: * the first argument. The time argument in the second parameter is unused jpayne@69: * and should be set to NULL. jpayne@69: */ jpayne@69: CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); jpayne@69: jpayne@69: /* info about the certificate chain, only for OpenSSL, GnuTLS, Schannel, NSS jpayne@69: and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ jpayne@69: struct curl_certinfo { jpayne@69: int num_of_certs; /* number of certificates with information */ jpayne@69: struct curl_slist **certinfo; /* for each index in this array, there's a jpayne@69: linked list with textual information in the jpayne@69: format "name: value" */ jpayne@69: }; jpayne@69: jpayne@69: /* Information about the SSL library used and the respective internal SSL jpayne@69: handle, which can be used to obtain further information regarding the jpayne@69: connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ jpayne@69: struct curl_tlssessioninfo { jpayne@69: curl_sslbackend backend; jpayne@69: void *internals; jpayne@69: }; jpayne@69: jpayne@69: #define CURLINFO_STRING 0x100000 jpayne@69: #define CURLINFO_LONG 0x200000 jpayne@69: #define CURLINFO_DOUBLE 0x300000 jpayne@69: #define CURLINFO_SLIST 0x400000 jpayne@69: #define CURLINFO_PTR 0x400000 /* same as SLIST */ jpayne@69: #define CURLINFO_SOCKET 0x500000 jpayne@69: #define CURLINFO_OFF_T 0x600000 jpayne@69: #define CURLINFO_MASK 0x0fffff jpayne@69: #define CURLINFO_TYPEMASK 0xf00000 jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLINFO_NONE, /* first, never use this */ jpayne@69: CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, jpayne@69: CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, jpayne@69: CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, jpayne@69: CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, jpayne@69: CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, jpayne@69: CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, jpayne@69: CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 7, jpayne@69: CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, jpayne@69: CURLINFO_SIZE_DOWNLOAD jpayne@69: CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 8, jpayne@69: CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, jpayne@69: CURLINFO_SPEED_DOWNLOAD jpayne@69: CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 9, jpayne@69: CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, jpayne@69: CURLINFO_SPEED_UPLOAD jpayne@69: CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 10, jpayne@69: CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, jpayne@69: CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, jpayne@69: CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, jpayne@69: CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, jpayne@69: CURLINFO_FILETIME = CURLINFO_LONG + 14, jpayne@69: CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, jpayne@69: CURLINFO_CONTENT_LENGTH_DOWNLOAD jpayne@69: CURL_DEPRECATED(7.55.0, jpayne@69: "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 15, jpayne@69: CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, jpayne@69: CURLINFO_CONTENT_LENGTH_UPLOAD jpayne@69: CURL_DEPRECATED(7.55.0, jpayne@69: "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") jpayne@69: = CURLINFO_DOUBLE + 16, jpayne@69: CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, jpayne@69: CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, jpayne@69: CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, jpayne@69: CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, jpayne@69: CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, jpayne@69: CURLINFO_PRIVATE = CURLINFO_STRING + 21, jpayne@69: CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, jpayne@69: CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, jpayne@69: CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, jpayne@69: CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, jpayne@69: CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, jpayne@69: CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, jpayne@69: CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, jpayne@69: CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") jpayne@69: = CURLINFO_LONG + 29, jpayne@69: CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, jpayne@69: CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, jpayne@69: CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, jpayne@69: CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, jpayne@69: CURLINFO_CERTINFO = CURLINFO_PTR + 34, jpayne@69: CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, jpayne@69: CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, jpayne@69: CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, jpayne@69: CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, jpayne@69: CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, jpayne@69: CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, jpayne@69: CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, jpayne@69: CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, jpayne@69: CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") jpayne@69: = CURLINFO_PTR + 43, jpayne@69: CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, jpayne@69: CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, jpayne@69: CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, jpayne@69: CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, jpayne@69: CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") jpayne@69: = CURLINFO_LONG + 48, jpayne@69: CURLINFO_SCHEME = CURLINFO_STRING + 49, jpayne@69: CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, jpayne@69: CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, jpayne@69: CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, jpayne@69: CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, jpayne@69: CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, jpayne@69: CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, jpayne@69: CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, jpayne@69: CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, jpayne@69: CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, jpayne@69: CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, jpayne@69: CURLINFO_REFERER = CURLINFO_STRING + 60, jpayne@69: CURLINFO_CAINFO = CURLINFO_STRING + 61, jpayne@69: CURLINFO_CAPATH = CURLINFO_STRING + 62, jpayne@69: CURLINFO_LASTONE = 62 jpayne@69: } CURLINFO; jpayne@69: jpayne@69: /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as jpayne@69: CURLINFO_HTTP_CODE */ jpayne@69: #define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLCLOSEPOLICY_NONE, /* first, never use this */ jpayne@69: jpayne@69: CURLCLOSEPOLICY_OLDEST, jpayne@69: CURLCLOSEPOLICY_LEAST_RECENTLY_USED, jpayne@69: CURLCLOSEPOLICY_LEAST_TRAFFIC, jpayne@69: CURLCLOSEPOLICY_SLOWEST, jpayne@69: CURLCLOSEPOLICY_CALLBACK, jpayne@69: jpayne@69: CURLCLOSEPOLICY_LAST /* last, never use this */ jpayne@69: } curl_closepolicy; jpayne@69: jpayne@69: #define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ jpayne@69: #define CURL_GLOBAL_WIN32 (1<<1) jpayne@69: #define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) jpayne@69: #define CURL_GLOBAL_NOTHING 0 jpayne@69: #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL jpayne@69: #define CURL_GLOBAL_ACK_EINTR (1<<2) jpayne@69: jpayne@69: jpayne@69: /***************************************************************************** jpayne@69: * Setup defines, protos etc for the sharing stuff. jpayne@69: */ jpayne@69: jpayne@69: /* Different data locks for a single share */ jpayne@69: typedef enum { jpayne@69: CURL_LOCK_DATA_NONE = 0, jpayne@69: /* CURL_LOCK_DATA_SHARE is used internally to say that jpayne@69: * the locking is just made to change the internal state of the share jpayne@69: * itself. jpayne@69: */ jpayne@69: CURL_LOCK_DATA_SHARE, jpayne@69: CURL_LOCK_DATA_COOKIE, jpayne@69: CURL_LOCK_DATA_DNS, jpayne@69: CURL_LOCK_DATA_SSL_SESSION, jpayne@69: CURL_LOCK_DATA_CONNECT, jpayne@69: CURL_LOCK_DATA_PSL, jpayne@69: CURL_LOCK_DATA_LAST jpayne@69: } curl_lock_data; jpayne@69: jpayne@69: /* Different lock access types */ jpayne@69: typedef enum { jpayne@69: CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ jpayne@69: CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ jpayne@69: CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ jpayne@69: CURL_LOCK_ACCESS_LAST /* never use */ jpayne@69: } curl_lock_access; jpayne@69: jpayne@69: typedef void (*curl_lock_function)(CURL *handle, jpayne@69: curl_lock_data data, jpayne@69: curl_lock_access locktype, jpayne@69: void *userptr); jpayne@69: typedef void (*curl_unlock_function)(CURL *handle, jpayne@69: curl_lock_data data, jpayne@69: void *userptr); jpayne@69: jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLSHE_OK, /* all is fine */ jpayne@69: CURLSHE_BAD_OPTION, /* 1 */ jpayne@69: CURLSHE_IN_USE, /* 2 */ jpayne@69: CURLSHE_INVALID, /* 3 */ jpayne@69: CURLSHE_NOMEM, /* 4 out of memory */ jpayne@69: CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ jpayne@69: CURLSHE_LAST /* never use */ jpayne@69: } CURLSHcode; jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLSHOPT_NONE, /* don't use */ jpayne@69: CURLSHOPT_SHARE, /* specify a data type to share */ jpayne@69: CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ jpayne@69: CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ jpayne@69: CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ jpayne@69: CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock jpayne@69: callback functions */ jpayne@69: CURLSHOPT_LAST /* never use */ jpayne@69: } CURLSHoption; jpayne@69: jpayne@69: CURL_EXTERN CURLSH *curl_share_init(void); jpayne@69: CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, jpayne@69: ...); jpayne@69: CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); jpayne@69: jpayne@69: /**************************************************************************** jpayne@69: * Structures for querying information about the curl library at runtime. jpayne@69: */ jpayne@69: jpayne@69: typedef enum { jpayne@69: CURLVERSION_FIRST, jpayne@69: CURLVERSION_SECOND, jpayne@69: CURLVERSION_THIRD, jpayne@69: CURLVERSION_FOURTH, jpayne@69: CURLVERSION_FIFTH, jpayne@69: CURLVERSION_SIXTH, jpayne@69: CURLVERSION_SEVENTH, jpayne@69: CURLVERSION_EIGHTH, jpayne@69: CURLVERSION_NINTH, jpayne@69: CURLVERSION_TENTH, jpayne@69: CURLVERSION_ELEVENTH, jpayne@69: CURLVERSION_LAST /* never actually use this */ jpayne@69: } CURLversion; jpayne@69: jpayne@69: /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by jpayne@69: basically all programs ever that want to get version information. It is jpayne@69: meant to be a built-in version number for what kind of struct the caller jpayne@69: expects. If the struct ever changes, we redefine the NOW to another enum jpayne@69: from above. */ jpayne@69: #define CURLVERSION_NOW CURLVERSION_ELEVENTH jpayne@69: jpayne@69: struct curl_version_info_data { jpayne@69: CURLversion age; /* age of the returned struct */ jpayne@69: const char *version; /* LIBCURL_VERSION */ jpayne@69: unsigned int version_num; /* LIBCURL_VERSION_NUM */ jpayne@69: const char *host; /* OS/host/cpu/machine when configured */ jpayne@69: int features; /* bitmask, see defines below */ jpayne@69: const char *ssl_version; /* human readable string */ jpayne@69: long ssl_version_num; /* not used anymore, always 0 */ jpayne@69: const char *libz_version; /* human readable string */ jpayne@69: /* protocols is terminated by an entry with a NULL protoname */ jpayne@69: const char * const *protocols; jpayne@69: jpayne@69: /* The fields below this were added in CURLVERSION_SECOND */ jpayne@69: const char *ares; jpayne@69: int ares_num; jpayne@69: jpayne@69: /* This field was added in CURLVERSION_THIRD */ jpayne@69: const char *libidn; jpayne@69: jpayne@69: /* These field were added in CURLVERSION_FOURTH */ jpayne@69: jpayne@69: /* Same as '_libiconv_version' if built with HAVE_ICONV */ jpayne@69: int iconv_ver_num; jpayne@69: jpayne@69: const char *libssh_version; /* human readable string */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_FIFTH */ jpayne@69: unsigned int brotli_ver_num; /* Numeric Brotli version jpayne@69: (MAJOR << 24) | (MINOR << 12) | PATCH */ jpayne@69: const char *brotli_version; /* human readable string. */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_SIXTH */ jpayne@69: unsigned int nghttp2_ver_num; /* Numeric nghttp2 version jpayne@69: (MAJOR << 16) | (MINOR << 8) | PATCH */ jpayne@69: const char *nghttp2_version; /* human readable string. */ jpayne@69: const char *quic_version; /* human readable quic (+ HTTP/3) library + jpayne@69: version or NULL */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_SEVENTH */ jpayne@69: const char *cainfo; /* the built-in default CURLOPT_CAINFO, might jpayne@69: be NULL */ jpayne@69: const char *capath; /* the built-in default CURLOPT_CAPATH, might jpayne@69: be NULL */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_EIGHTH */ jpayne@69: unsigned int zstd_ver_num; /* Numeric Zstd version jpayne@69: (MAJOR << 24) | (MINOR << 12) | PATCH */ jpayne@69: const char *zstd_version; /* human readable string. */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_NINTH */ jpayne@69: const char *hyper_version; /* human readable string. */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_TENTH */ jpayne@69: const char *gsasl_version; /* human readable string. */ jpayne@69: jpayne@69: /* These fields were added in CURLVERSION_ELEVENTH */ jpayne@69: /* feature_names is terminated by an entry with a NULL feature name */ jpayne@69: const char * const *feature_names; jpayne@69: }; jpayne@69: typedef struct curl_version_info_data curl_version_info_data; jpayne@69: jpayne@69: #define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ jpayne@69: #define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported jpayne@69: (deprecated) */ jpayne@69: #define CURL_VERSION_SSL (1<<2) /* SSL options are present */ jpayne@69: #define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ jpayne@69: #define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ jpayne@69: #define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported jpayne@69: (deprecated) */ jpayne@69: #define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ jpayne@69: #define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ jpayne@69: #define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ jpayne@69: #define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ jpayne@69: #define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are jpayne@69: supported */ jpayne@69: #define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ jpayne@69: #define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ jpayne@69: #define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ jpayne@69: #define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ jpayne@69: #define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper jpayne@69: is supported */ jpayne@69: #define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ jpayne@69: #define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ jpayne@69: #define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ jpayne@69: #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ jpayne@69: #define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used jpayne@69: for cookie domain verification */ jpayne@69: #define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ jpayne@69: #define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ jpayne@69: #define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ jpayne@69: #define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ jpayne@69: #define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ jpayne@69: #define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ jpayne@69: #define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ jpayne@69: #define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ jpayne@69: #define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ jpayne@69: #define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_version_info() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * This function returns a pointer to a static copy of the version info jpayne@69: * struct. See above. jpayne@69: */ jpayne@69: CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_easy_strerror() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * The curl_easy_strerror function may be used to turn a CURLcode value jpayne@69: * into the equivalent human readable error string. This is useful jpayne@69: * for printing meaningful error messages. jpayne@69: */ jpayne@69: CURL_EXTERN const char *curl_easy_strerror(CURLcode); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_share_strerror() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * The curl_share_strerror function may be used to turn a CURLSHcode value jpayne@69: * into the equivalent human readable error string. This is useful jpayne@69: * for printing meaningful error messages. jpayne@69: */ jpayne@69: CURL_EXTERN const char *curl_share_strerror(CURLSHcode); jpayne@69: jpayne@69: /* jpayne@69: * NAME curl_easy_pause() jpayne@69: * jpayne@69: * DESCRIPTION jpayne@69: * jpayne@69: * The curl_easy_pause function pauses or unpauses transfers. Select the new jpayne@69: * state by setting the bitmask, use the convenience defines below. jpayne@69: * jpayne@69: */ jpayne@69: CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); jpayne@69: jpayne@69: #define CURLPAUSE_RECV (1<<0) jpayne@69: #define CURLPAUSE_RECV_CONT (0) jpayne@69: jpayne@69: #define CURLPAUSE_SEND (1<<2) jpayne@69: #define CURLPAUSE_SEND_CONT (0) jpayne@69: jpayne@69: #define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) jpayne@69: #define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) jpayne@69: jpayne@69: #ifdef __cplusplus jpayne@69: } /* end of extern "C" */ jpayne@69: #endif jpayne@69: jpayne@69: /* unfortunately, the easy.h and multi.h include files need options and info jpayne@69: stuff before they can be included! */ jpayne@69: #include "easy.h" /* nothing in curl is fun without the easy stuff */ jpayne@69: #include "multi.h" jpayne@69: #include "urlapi.h" jpayne@69: #include "options.h" jpayne@69: #include "header.h" jpayne@69: #include "websockets.h" jpayne@69: jpayne@69: /* the typechecker doesn't work in C++ (yet) */ jpayne@69: #if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ jpayne@69: ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ jpayne@69: !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) jpayne@69: #include "typecheck-gcc.h" jpayne@69: #else jpayne@69: #if defined(__STDC__) && (__STDC__ >= 1) jpayne@69: /* This preprocessor magic that replaces a call with the exact same call is jpayne@69: only done to make sure application authors pass exactly three arguments jpayne@69: to these functions. */ jpayne@69: #define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) jpayne@69: #define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) jpayne@69: #define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) jpayne@69: #define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) jpayne@69: #endif /* __STDC__ >= 1 */ jpayne@69: #endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ jpayne@69: jpayne@69: #endif /* CURLINC_CURL_H */