From cd0b5a361c710e1ab634e48ee66d1fd00cdc57be Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 25 Mar 2022 21:50:29 +0100 Subject: [PATCH] addBetterWinLibSupp --- .gitignore | 3 - {src => include}/curl/curl.h | 5962 +++++++++++++------------ {src => include}/curl/curlver.h | 154 +- {src => include}/curl/easy.h | 235 +- {src => include}/curl/mprintf.h | 100 +- {src => include}/curl/multi.h | 898 ++-- include/curl/options.h | 68 + {src => include}/curl/stdcheaders.h | 66 +- {src => include}/curl/system.h | 981 ++-- {src => include}/curl/typecheck-gcc.h | 1405 +++--- {src => include}/curl/urlapi.h | 268 +- src/S_New4.pro | 14 +- src/accountManager.cpp | 6 +- src/accountManager.h | 11 +- src/curl/.gitignore | 3 - src/curl/LIBCURL.DLL | Bin 566272 -> 0 bytes src/logger.cpp | 2 +- src/logger.h | 2 + src/pageManager.cpp | 11 +- src/pageManager.h | 8 +- src/parameterManager.cpp | 25 +- src/parameterManager.h | 6 + src/programManager.h | 6 +- x86_64-WIN_LIBS/LIBCURL-DLL | 1 - x86_64-WIN_LIBS/libcurl-x64.def | 87 + 25 files changed, 5378 insertions(+), 4944 deletions(-) rename {src => include}/curl/curl.h (75%) mode change 100755 => 100644 rename {src => include}/curl/curlver.h (80%) mode change 100755 => 100644 rename {src => include}/curl/easy.h (87%) mode change 100755 => 100644 rename {src => include}/curl/mprintf.h (87%) mode change 100755 => 100644 rename {src => include}/curl/multi.h (84%) mode change 100755 => 100644 create mode 100644 include/curl/options.h rename {src => include}/curl/stdcheaders.h (82%) mode change 100755 => 100644 rename {src => include}/curl/system.h (89%) mode change 100755 => 100644 rename {src => include}/curl/typecheck-gcc.h (54%) mode change 100755 => 100644 rename {src => include}/curl/urlapi.h (78%) mode change 100755 => 100644 delete mode 100755 src/curl/.gitignore delete mode 100644 src/curl/LIBCURL.DLL delete mode 100644 x86_64-WIN_LIBS/LIBCURL-DLL create mode 100644 x86_64-WIN_LIBS/libcurl-x64.def diff --git a/.gitignore b/.gitignore index d0f7f55..6e22613 100644 --- a/.gitignore +++ b/.gitignore @@ -72,9 +72,6 @@ Thumbs.db *.exe #Own adds: -g++/ build* -src/lib/ - Makefile S_New4 diff --git a/src/curl/curl.h b/include/curl/curl.h old mode 100755 new mode 100644 similarity index 75% rename from src/curl/curl.h rename to include/curl/curl.h index ce42809..2e260d5 --- a/src/curl/curl.h +++ b/include/curl/curl.h @@ -1,2872 +1,3090 @@ -#ifndef __CURL_CURL_H -#define __CURL_CURL_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* - * If you have libcurl problems, all docs and details are found here: - * https://curl.haxx.se/libcurl/ - * - * curl-library mailing list subscription and unsubscription web interface: - * https://cool.haxx.se/mailman/listinfo/curl-library/ - */ - -#ifdef CURL_NO_OLDIES -#define CURL_STRICTER -#endif - -#include "curlver.h" /* libcurl version defines */ -#include "system.h" /* determine things run-time */ - -/* - * Define WIN32 when build target is Win32 API - */ - -#if (defined(_WIN32) || defined(__WIN32__)) && \ - !defined(WIN32) && !defined(__SYMBIAN32__) -#define WIN32 -#endif - -#include -#include - -#if defined(__FreeBSD__) && (__FreeBSD__ >= 2) -/* Needed for __FreeBSD_version symbol definition */ -#include -#endif - -/* The include stuff here below is mainly for time_t! */ -#include -#include - -#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) -#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ - defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) -/* The check above prevents the winsock2 inclusion if winsock.h already was - included, since they can't co-exist without problems */ -#include -#include -#endif -#endif - -/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish - libc5-based Linux systems. Only include it on systems that are known to - require it! */ -#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ - defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ - defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ - defined(__CYGWIN__) || \ - (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) -#include -#endif - -#if !defined(WIN32) && !defined(_WIN32_WCE) -#include -#endif - -#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__) -#include -#endif - -#ifdef __BEOS__ -#include -#endif - -/* Compatibility for non-Clang compilers */ -#ifndef __has_declspec_attribute -# define __has_declspec_attribute(x) 0 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) -typedef struct Curl_easy CURL; -typedef struct Curl_share CURLSH; -#else -typedef void CURL; -typedef void CURLSH; -#endif - -/* - * libcurl external API function linkage decorations. - */ - -#ifdef CURL_STATICLIB -# define CURL_EXTERN -#elif defined(WIN32) || defined(__SYMBIAN32__) || \ - (__has_declspec_attribute(dllexport) && \ - __has_declspec_attribute(dllimport)) -# if defined(BUILDING_LIBCURL) -# define CURL_EXTERN __declspec(dllexport) -# else -# define CURL_EXTERN __declspec(dllimport) -# endif -#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) -# define CURL_EXTERN CURL_EXTERN_SYMBOL -#else -# define CURL_EXTERN -#endif - -#ifndef curl_socket_typedef -/* socket typedef */ -#if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) -typedef SOCKET curl_socket_t; -#define CURL_SOCKET_BAD INVALID_SOCKET -#else -typedef int curl_socket_t; -#define CURL_SOCKET_BAD -1 -#endif -#define curl_socket_typedef -#endif /* curl_socket_typedef */ - -/* enum for the different supported SSL backends */ -typedef enum { - CURLSSLBACKEND_NONE = 0, - CURLSSLBACKEND_OPENSSL = 1, - CURLSSLBACKEND_GNUTLS = 2, - CURLSSLBACKEND_NSS = 3, - CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ - CURLSSLBACKEND_GSKIT = 5, - CURLSSLBACKEND_POLARSSL = 6, - CURLSSLBACKEND_WOLFSSL = 7, - CURLSSLBACKEND_SCHANNEL = 8, - CURLSSLBACKEND_SECURETRANSPORT = 9, - CURLSSLBACKEND_AXTLS = 10, /* never used since 7.63.0 */ - CURLSSLBACKEND_MBEDTLS = 11, - CURLSSLBACKEND_MESALINK = 12 -} curl_sslbackend; - -/* aliases for library clones and renames */ -#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL -#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL - -/* deprecated names: */ -#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL -#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT - -struct curl_httppost { - struct curl_httppost *next; /* next entry in the list */ - char *name; /* pointer to allocated name */ - long namelength; /* length of name length */ - char *contents; /* pointer to allocated data contents */ - long contentslength; /* length of contents field, see also - CURL_HTTPPOST_LARGE */ - char *buffer; /* pointer to allocated buffer contents */ - long bufferlength; /* length of buffer field */ - char *contenttype; /* Content-Type */ - struct curl_slist *contentheader; /* list of extra headers for this form */ - struct curl_httppost *more; /* if one field name has more than one - file, this link should link to following - files */ - long flags; /* as defined below */ - -/* specified content is a file name */ -#define CURL_HTTPPOST_FILENAME (1<<0) -/* specified content is a file name */ -#define CURL_HTTPPOST_READFILE (1<<1) -/* name is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRNAME (1<<2) -/* contents is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRCONTENTS (1<<3) -/* upload file from buffer */ -#define CURL_HTTPPOST_BUFFER (1<<4) -/* upload file from pointer contents */ -#define CURL_HTTPPOST_PTRBUFFER (1<<5) -/* upload file contents by using the regular read callback to get the data and - pass the given pointer as custom pointer */ -#define CURL_HTTPPOST_CALLBACK (1<<6) -/* use size in 'contentlen', added in 7.46.0 */ -#define CURL_HTTPPOST_LARGE (1<<7) - - char *showfilename; /* The file name to show. If not set, the - actual file name will be used (if this - is a file part) */ - void *userp; /* custom pointer used for - HTTPPOST_CALLBACK posts */ - curl_off_t contentlen; /* alternative length of contents - field. Used if CURL_HTTPPOST_LARGE is - set. Added in 7.46.0 */ -}; - -/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now - considered deprecated but was the only choice up until 7.31.0 */ -typedef int (*curl_progress_callback)(void *clientp, - double dltotal, - double dlnow, - double ultotal, - double ulnow); - -/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced - in 7.32.0, avoids the use of floating point numbers and provides more - detailed information. */ -typedef int (*curl_xferinfo_callback)(void *clientp, - curl_off_t dltotal, - curl_off_t dlnow, - curl_off_t ultotal, - curl_off_t ulnow); - -#ifndef CURL_MAX_READ_SIZE - /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ -#define CURL_MAX_READ_SIZE 524288 -#endif - -#ifndef CURL_MAX_WRITE_SIZE - /* Tests have proven that 20K is a very bad buffer size for uploads on - Windows, while 16K for some odd reason performed a lot better. - We do the ifndef check to allow this value to easier be changed at build - time for those who feel adventurous. The practical minimum is about - 400 bytes since libcurl uses a buffer of this size as a scratch area - (unrelated to network send operations). */ -#define CURL_MAX_WRITE_SIZE 16384 -#endif - -#ifndef CURL_MAX_HTTP_HEADER -/* The only reason to have a max limit for this is to avoid the risk of a bad - server feeding libcurl with a never-ending header that will cause reallocs - infinitely */ -#define CURL_MAX_HTTP_HEADER (100*1024) -#endif - -/* This is a magic return code for the write callback that, when returned, - will signal libcurl to pause receiving on the current transfer. */ -#define CURL_WRITEFUNC_PAUSE 0x10000001 - -typedef size_t (*curl_write_callback)(char *buffer, - size_t size, - size_t nitems, - void *outstream); - -/* This callback will be called when a new resolver request is made */ -typedef int (*curl_resolver_start_callback)(void *resolver_state, - void *reserved, void *userdata); - -/* enumeration of file types */ -typedef enum { - CURLFILETYPE_FILE = 0, - CURLFILETYPE_DIRECTORY, - CURLFILETYPE_SYMLINK, - CURLFILETYPE_DEVICE_BLOCK, - CURLFILETYPE_DEVICE_CHAR, - CURLFILETYPE_NAMEDPIPE, - CURLFILETYPE_SOCKET, - CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ - - CURLFILETYPE_UNKNOWN /* should never occur */ -} curlfiletype; - -#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) -#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) -#define CURLFINFOFLAG_KNOWN_TIME (1<<2) -#define CURLFINFOFLAG_KNOWN_PERM (1<<3) -#define CURLFINFOFLAG_KNOWN_UID (1<<4) -#define CURLFINFOFLAG_KNOWN_GID (1<<5) -#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) -#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) - -/* Content of this structure depends on information which is known and is - achievable (e.g. by FTP LIST parsing). Please see the url_easy_setopt(3) man - page for callbacks returning this structure -- some fields are mandatory, - some others are optional. The FLAG field has special meaning. */ -struct curl_fileinfo { - char *filename; - curlfiletype filetype; - time_t time; /* always zero! */ - unsigned int perm; - int uid; - int gid; - curl_off_t size; - long int hardlinks; - - struct { - /* If some of these fields is not NULL, it is a pointer to b_data. */ - char *time; - char *perm; - char *user; - char *group; - char *target; /* pointer to the target filename of a symlink */ - } strings; - - unsigned int flags; - - /* used internally */ - char *b_data; - size_t b_size; - size_t b_used; -}; - -/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ -#define CURL_CHUNK_BGN_FUNC_OK 0 -#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ -#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ - -/* if splitting of data transfer is enabled, this callback is called before - download of an individual chunk started. Note that parameter "remains" works - only for FTP wildcard downloading (for now), otherwise is not used */ -typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, - void *ptr, - int remains); - -/* return codes for CURLOPT_CHUNK_END_FUNCTION */ -#define CURL_CHUNK_END_FUNC_OK 0 -#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ - -/* If splitting of data transfer is enabled this callback is called after - download of an individual chunk finished. - Note! After this callback was set then it have to be called FOR ALL chunks. - Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. - This is the reason why we don't need "transfer_info" parameter in this - callback and we are not interested in "remains" parameter too. */ -typedef long (*curl_chunk_end_callback)(void *ptr); - -/* return codes for FNMATCHFUNCTION */ -#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ -#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ -#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ - -/* callback type for wildcard downloading pattern matching. If the - string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ -typedef int (*curl_fnmatch_callback)(void *ptr, - const char *pattern, - const char *string); - -/* These are the return codes for the seek callbacks */ -#define CURL_SEEKFUNC_OK 0 -#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ -#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so - libcurl might try other means instead */ -typedef int (*curl_seek_callback)(void *instream, - curl_off_t offset, - int origin); /* 'whence' */ - -/* This is a return code for the read callback that, when returned, will - signal libcurl to immediately abort the current transfer. */ -#define CURL_READFUNC_ABORT 0x10000000 -/* This is a return code for the read callback that, when returned, will - signal libcurl to pause sending data on the current transfer. */ -#define CURL_READFUNC_PAUSE 0x10000001 - -/* Return code for when the trailing headers' callback has terminated - without any errors*/ -#define CURL_TRAILERFUNC_OK 0 -/* Return code for when was an error in the trailing header's list and we - want to abort the request */ -#define CURL_TRAILERFUNC_ABORT 1 - -typedef size_t (*curl_read_callback)(char *buffer, - size_t size, - size_t nitems, - void *instream); - -typedef int (*curl_trailer_callback)(struct curl_slist **list, - void *userdata); - -typedef enum { - CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ - CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ - CURLSOCKTYPE_LAST /* never use */ -} curlsocktype; - -/* The return code from the sockopt_callback can signal information back - to libcurl: */ -#define CURL_SOCKOPT_OK 0 -#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return - CURLE_ABORTED_BY_CALLBACK */ -#define CURL_SOCKOPT_ALREADY_CONNECTED 2 - -typedef int (*curl_sockopt_callback)(void *clientp, - curl_socket_t curlfd, - curlsocktype purpose); - -struct curl_sockaddr { - int family; - int socktype; - int protocol; - unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it - turned really ugly and painful on the systems that - lack this type */ - struct sockaddr addr; -}; - -typedef curl_socket_t -(*curl_opensocket_callback)(void *clientp, - curlsocktype purpose, - struct curl_sockaddr *address); - -typedef int -(*curl_closesocket_callback)(void *clientp, curl_socket_t item); - -typedef enum { - CURLIOE_OK, /* I/O operation successful */ - CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ - CURLIOE_FAILRESTART, /* failed to restart the read */ - CURLIOE_LAST /* never use */ -} curlioerr; - -typedef enum { - CURLIOCMD_NOP, /* no operation */ - CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ - CURLIOCMD_LAST /* never use */ -} curliocmd; - -typedef curlioerr (*curl_ioctl_callback)(CURL *handle, - int cmd, - void *clientp); - -#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS -/* - * The following typedef's are signatures of malloc, free, realloc, strdup and - * calloc respectively. Function pointers of these types can be passed to the - * curl_global_init_mem() function to set user defined memory management - * callback routines. - */ -typedef void *(*curl_malloc_callback)(size_t size); -typedef void (*curl_free_callback)(void *ptr); -typedef void *(*curl_realloc_callback)(void *ptr, size_t size); -typedef char *(*curl_strdup_callback)(const char *str); -typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); - -#define CURL_DID_MEMORY_FUNC_TYPEDEFS -#endif - -/* the kind of data that is passed to information_callback*/ -typedef enum { - CURLINFO_TEXT = 0, - CURLINFO_HEADER_IN, /* 1 */ - CURLINFO_HEADER_OUT, /* 2 */ - CURLINFO_DATA_IN, /* 3 */ - CURLINFO_DATA_OUT, /* 4 */ - CURLINFO_SSL_DATA_IN, /* 5 */ - CURLINFO_SSL_DATA_OUT, /* 6 */ - CURLINFO_END -} curl_infotype; - -typedef int (*curl_debug_callback) - (CURL *handle, /* the handle/transfer this concerns */ - curl_infotype type, /* what kind of data */ - char *data, /* points to the data */ - size_t size, /* size of the data pointed to */ - void *userptr); /* whatever the user please */ - -/* All possible error codes from all sorts of curl functions. Future versions - may return other values, stay prepared. - - Always add new return codes last. Never *EVER* remove any. The return - codes must remain the same! - */ - -typedef enum { - CURLE_OK = 0, - CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ - CURLE_FAILED_INIT, /* 2 */ - CURLE_URL_MALFORMAT, /* 3 */ - CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for - 7.17.0, reused in April 2011 for 7.21.5] */ - CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ - CURLE_COULDNT_RESOLVE_HOST, /* 6 */ - CURLE_COULDNT_CONNECT, /* 7 */ - CURLE_WEIRD_SERVER_REPLY, /* 8 */ - CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server - due to lack of access - when login fails - this is not returned. */ - CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for - 7.15.4, reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ - CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server - [was obsoleted in August 2007 for 7.17.0, - reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ - CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ - CURLE_FTP_CANT_GET_HOST, /* 15 */ - CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. - [was obsoleted in August 2007 for 7.17.0, - reused in July 2014 for 7.38.0] */ - CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ - CURLE_PARTIAL_FILE, /* 18 */ - CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ - CURLE_OBSOLETE20, /* 20 - NOT USED */ - CURLE_QUOTE_ERROR, /* 21 - quote command failure */ - CURLE_HTTP_RETURNED_ERROR, /* 22 */ - CURLE_WRITE_ERROR, /* 23 */ - CURLE_OBSOLETE24, /* 24 - NOT USED */ - CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ - CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ - CURLE_OUT_OF_MEMORY, /* 27 */ - /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error - instead of a memory allocation error if CURL_DOES_CONVERSIONS - is defined - */ - CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ - CURLE_OBSOLETE29, /* 29 - NOT USED */ - CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ - CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ - CURLE_OBSOLETE32, /* 32 - NOT USED */ - CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ - CURLE_HTTP_POST_ERROR, /* 34 */ - CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ - CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ - CURLE_FILE_COULDNT_READ_FILE, /* 37 */ - CURLE_LDAP_CANNOT_BIND, /* 38 */ - CURLE_LDAP_SEARCH_FAILED, /* 39 */ - CURLE_OBSOLETE40, /* 40 - NOT USED */ - CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ - CURLE_ABORTED_BY_CALLBACK, /* 42 */ - CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ - CURLE_OBSOLETE44, /* 44 - NOT USED */ - CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ - CURLE_OBSOLETE46, /* 46 - NOT USED */ - CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ - CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ - CURLE_TELNET_OPTION_SYNTAX, /* 49 - Malformed telnet option */ - CURLE_OBSOLETE50, /* 50 - NOT USED */ - CURLE_OBSOLETE51, /* 51 - NOT USED */ - CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ - CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ - CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as - default */ - CURLE_SEND_ERROR, /* 55 - failed sending network data */ - CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ - CURLE_OBSOLETE57, /* 57 - NOT IN USE */ - CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ - CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ - CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint - wasn't verified fine */ - CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ - CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */ - CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ - CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ - CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind - that failed */ - CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ - CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not - accepted and we failed to login */ - CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ - CURLE_TFTP_PERM, /* 69 - permission problem on server */ - CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ - CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ - CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ - CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ - CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ - CURLE_CONV_FAILED, /* 75 - conversion failed */ - CURLE_CONV_REQD, /* 76 - caller must register conversion - callbacks using curl_easy_setopt options - CURLOPT_CONV_FROM_NETWORK_FUNCTION, - CURLOPT_CONV_TO_NETWORK_FUNCTION, and - CURLOPT_CONV_FROM_UTF8_FUNCTION */ - CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing - or wrong format */ - CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ - CURLE_SSH, /* 79 - error from the SSH layer, somewhat - generic so the error message will be of - interest when this has happened */ - - CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL - connection */ - CURLE_AGAIN, /* 81 - socket is not ready for send/recv, - wait till it's ready and try again (Added - in 7.18.2) */ - CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or - wrong format (Added in 7.19.0) */ - CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in - 7.19.0) */ - CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ - CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ - CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ - CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ - CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ - CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the - session will be queued */ - CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not - match */ - CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ - CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer - */ - CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from - inside a callback */ - CURL_LAST /* never use! */ -} CURLcode; - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Previously obsolete error code re-used in 7.38.0 */ -#define CURLE_OBSOLETE16 CURLE_HTTP2 - -/* Previously obsolete error codes re-used in 7.24.0 */ -#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED -#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT - -/* compatibility with older names */ -#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING -#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY - -/* The following were added in 7.62.0 */ -#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION - -/* The following were added in 7.21.5, April 2011 */ -#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION - -/* The following were added in 7.17.1 */ -/* These are scheduled to disappear by 2009 */ -#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION - -/* The following were added in 7.17.0 */ -/* These are scheduled to disappear by 2009 */ -#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ -#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 -#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 -#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 -#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 -#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 -#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 -#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 -#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 -#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 -#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 -#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 -#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN - -#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED -#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE -#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR -#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL -#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS -#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR -#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED - -/* The following were added earlier */ - -#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT - -#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR -#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED -#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED - -#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE -#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME - -/* This was the error code 50 in 7.7.3 and a few earlier versions, this - is no longer used by libcurl but is instead #defined here only to not - make programs break */ -#define CURLE_ALREADY_COMPLETE 99999 - -/* Provide defines for really old option names */ -#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ -#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ -#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA - -/* Since long deprecated options with no code in the lib that does anything - with them. */ -#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 -#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 - -#endif /*!CURL_NO_OLDIES*/ - -/* This prototype applies to all conversion callbacks */ -typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); - -typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ - void *ssl_ctx, /* actually an OpenSSL - or WolfSSL SSL_CTX, - or an mbedTLS - mbedtls_ssl_config */ - void *userptr); - -typedef enum { - CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use - CONNECT HTTP/1.1 */ - CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT - HTTP/1.0 */ - CURLPROXY_HTTPS = 2, /* added in 7.52.0 */ - CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already - in 7.10 */ - CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ - CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the - host name rather than the IP address. added - in 7.18.0 */ -} curl_proxytype; /* this enum was added in 7.10 */ - -/* - * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: - * - * CURLAUTH_NONE - No HTTP authentication - * CURLAUTH_BASIC - HTTP Basic authentication (default) - * CURLAUTH_DIGEST - HTTP Digest authentication - * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication - * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) - * CURLAUTH_NTLM - HTTP NTLM authentication - * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour - * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper - * CURLAUTH_BEARER - HTTP Bearer token authentication - * CURLAUTH_ONLY - Use together with a single other type to force no - * authentication or just that single type - * CURLAUTH_ANY - All fine types set - * CURLAUTH_ANYSAFE - All fine types except Basic - */ - -#define CURLAUTH_NONE ((unsigned long)0) -#define CURLAUTH_BASIC (((unsigned long)1)<<0) -#define CURLAUTH_DIGEST (((unsigned long)1)<<1) -#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) -/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ -#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE -/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ -#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE -#define CURLAUTH_NTLM (((unsigned long)1)<<3) -#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) -#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) -#define CURLAUTH_BEARER (((unsigned long)1)<<6) -#define CURLAUTH_ONLY (((unsigned long)1)<<31) -#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) -#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) - -#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ -#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ -#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ -#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ -#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ -#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ -#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ -#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ -#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY - -#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ -#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ -#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ - -#define CURL_ERROR_SIZE 256 - -enum curl_khtype { - CURLKHTYPE_UNKNOWN, - CURLKHTYPE_RSA1, - CURLKHTYPE_RSA, - CURLKHTYPE_DSS, - CURLKHTYPE_ECDSA, - CURLKHTYPE_ED25519 -}; - -struct curl_khkey { - const char *key; /* points to a zero-terminated string encoded with base64 - if len is zero, otherwise to the "raw" data */ - size_t len; - enum curl_khtype keytype; -}; - -/* this is the set of return values expected from the curl_sshkeycallback - callback */ -enum curl_khstat { - CURLKHSTAT_FINE_ADD_TO_FILE, - CURLKHSTAT_FINE, - CURLKHSTAT_REJECT, /* reject the connection, return an error */ - CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now so - this causes a CURLE_DEFER error but otherwise the - connection will be left intact etc */ - CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ -}; - -/* this is the set of status codes pass in to the callback */ -enum curl_khmatch { - CURLKHMATCH_OK, /* match */ - CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ - CURLKHMATCH_MISSING, /* no matching host/key found */ - CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ -}; - -typedef int - (*curl_sshkeycallback) (CURL *easy, /* easy handle */ - const struct curl_khkey *knownkey, /* known */ - const struct curl_khkey *foundkey, /* found */ - enum curl_khmatch, /* libcurl's view on the keys */ - void *clientp); /* custom pointer passed from app */ - -/* parameter for the CURLOPT_USE_SSL option */ -typedef enum { - CURLUSESSL_NONE, /* do not attempt to use SSL */ - CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ - CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ - CURLUSESSL_ALL, /* SSL for all communication or fail */ - CURLUSESSL_LAST /* not an option, never use */ -} curl_usessl; - -/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ - -/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the - name of improving interoperability with older servers. Some SSL libraries - have introduced work-arounds for this flaw but those work-arounds sometimes - make the SSL communication fail. To regain functionality with those broken - servers, a user can this way allow the vulnerability back. */ -#define CURLSSLOPT_ALLOW_BEAST (1<<0) - -/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those - SSL backends where such behavior is present. */ -#define CURLSSLOPT_NO_REVOKE (1<<1) - -/* The default connection attempt delay in milliseconds for happy eyeballs. - CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document - this value, keep them in sync. */ -#define CURL_HET_DEFAULT 200L - -/* The default connection upkeep interval in milliseconds. */ -#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Backwards compatibility with older names */ -/* These are scheduled to disappear by 2009 */ - -#define CURLFTPSSL_NONE CURLUSESSL_NONE -#define CURLFTPSSL_TRY CURLUSESSL_TRY -#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL -#define CURLFTPSSL_ALL CURLUSESSL_ALL -#define CURLFTPSSL_LAST CURLUSESSL_LAST -#define curl_ftpssl curl_usessl -#endif /*!CURL_NO_OLDIES*/ - -/* parameter for the CURLOPT_FTP_SSL_CCC option */ -typedef enum { - CURLFTPSSL_CCC_NONE, /* do not send CCC */ - CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ - CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ - CURLFTPSSL_CCC_LAST /* not an option, never use */ -} curl_ftpccc; - -/* parameter for the CURLOPT_FTPSSLAUTH option */ -typedef enum { - CURLFTPAUTH_DEFAULT, /* let libcurl decide */ - CURLFTPAUTH_SSL, /* use "AUTH SSL" */ - CURLFTPAUTH_TLS, /* use "AUTH TLS" */ - CURLFTPAUTH_LAST /* not an option, never use */ -} curl_ftpauth; - -/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ -typedef enum { - CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ - CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD - again if MKD succeeded, for SFTP this does - similar magic */ - CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD - again even if MKD failed! */ - CURLFTP_CREATE_DIR_LAST /* not an option, never use */ -} curl_ftpcreatedir; - -/* parameter for the CURLOPT_FTP_FILEMETHOD option */ -typedef enum { - CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ - CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ - CURLFTPMETHOD_NOCWD, /* no CWD at all */ - CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ - CURLFTPMETHOD_LAST /* not an option, never use */ -} curl_ftpmethod; - -/* bitmask defines for CURLOPT_HEADEROPT */ -#define CURLHEADER_UNIFIED 0 -#define CURLHEADER_SEPARATE (1<<0) - -/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ -#define CURLALTSVC_IMMEDIATELY (1<<0) -#define CURLALTSVC_ALTUSED (1<<1) -#define CURLALTSVC_READONLYFILE (1<<2) -#define CURLALTSVC_H1 (1<<3) -#define CURLALTSVC_H2 (1<<4) -#define CURLALTSVC_H3 (1<<5) - -/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ -#define CURLPROTO_HTTP (1<<0) -#define CURLPROTO_HTTPS (1<<1) -#define CURLPROTO_FTP (1<<2) -#define CURLPROTO_FTPS (1<<3) -#define CURLPROTO_SCP (1<<4) -#define CURLPROTO_SFTP (1<<5) -#define CURLPROTO_TELNET (1<<6) -#define CURLPROTO_LDAP (1<<7) -#define CURLPROTO_LDAPS (1<<8) -#define CURLPROTO_DICT (1<<9) -#define CURLPROTO_FILE (1<<10) -#define CURLPROTO_TFTP (1<<11) -#define CURLPROTO_IMAP (1<<12) -#define CURLPROTO_IMAPS (1<<13) -#define CURLPROTO_POP3 (1<<14) -#define CURLPROTO_POP3S (1<<15) -#define CURLPROTO_SMTP (1<<16) -#define CURLPROTO_SMTPS (1<<17) -#define CURLPROTO_RTSP (1<<18) -#define CURLPROTO_RTMP (1<<19) -#define CURLPROTO_RTMPT (1<<20) -#define CURLPROTO_RTMPE (1<<21) -#define CURLPROTO_RTMPTE (1<<22) -#define CURLPROTO_RTMPS (1<<23) -#define CURLPROTO_RTMPTS (1<<24) -#define CURLPROTO_GOPHER (1<<25) -#define CURLPROTO_SMB (1<<26) -#define CURLPROTO_SMBS (1<<27) -#define CURLPROTO_ALL (~0) /* enable everything */ - -/* long may be 32 or 64 bits, but we should never depend on anything else - but 32 */ -#define CURLOPTTYPE_LONG 0 -#define CURLOPTTYPE_OBJECTPOINT 10000 -#define CURLOPTTYPE_FUNCTIONPOINT 20000 -#define CURLOPTTYPE_OFF_T 30000 - -/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the - string options from the header file */ - -/* name is uppercase CURLOPT_, - type is one of the defined CURLOPTTYPE_ - number is unique identifier */ -#ifdef CINIT -#undef CINIT -#endif - -#ifdef CURL_ISOCPP -#define CINIT(na,t,nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define LONG CURLOPTTYPE_LONG -#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT -#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT -#define OFF_T CURLOPTTYPE_OFF_T -#define CINIT(name,type,number) CURLOPT_/**/name = type + number -#endif - -/* handy aliases that make no run-time difference */ -#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT -#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT - -/* - * This macro-mania below setups the CURLOPT_[what] enum, to be used with - * curl_easy_setopt(). The first argument in the CINIT() macro is the [what] - * word. - */ - -typedef enum { - /* This is the FILE * or void * the regular output should be written to. */ - CINIT(WRITEDATA, OBJECTPOINT, 1), - - /* The full URL to get/put */ - CINIT(URL, STRINGPOINT, 2), - - /* Port number to connect to, if other than default. */ - CINIT(PORT, LONG, 3), - - /* Name of proxy to use. */ - CINIT(PROXY, STRINGPOINT, 4), - - /* "user:password;options" to use when fetching. */ - CINIT(USERPWD, STRINGPOINT, 5), - - /* "user:password" to use with proxy. */ - CINIT(PROXYUSERPWD, STRINGPOINT, 6), - - /* Range to get, specified as an ASCII string. */ - CINIT(RANGE, STRINGPOINT, 7), - - /* not used */ - - /* Specified file stream to upload from (use as input): */ - CINIT(READDATA, OBJECTPOINT, 9), - - /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE - * bytes big. */ - CINIT(ERRORBUFFER, OBJECTPOINT, 10), - - /* Function that will be called to store the output (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11), - - /* Function that will be called to read the input (instead of fread). The - * parameters will use fread() syntax, make sure to follow them. */ - CINIT(READFUNCTION, FUNCTIONPOINT, 12), - - /* Time-out the read operation after this amount of seconds */ - CINIT(TIMEOUT, LONG, 13), - - /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about - * how large the file being sent really is. That allows better error - * checking and better verifies that the upload was successful. -1 means - * unknown size. - * - * For large file support, there is also a _LARGE version of the key - * which takes an off_t type, allowing platforms with larger off_t - * sizes to handle larger files. See below for INFILESIZE_LARGE. - */ - CINIT(INFILESIZE, LONG, 14), - - /* POST static input fields. */ - CINIT(POSTFIELDS, OBJECTPOINT, 15), - - /* Set the referrer page (needed by some CGIs) */ - CINIT(REFERER, STRINGPOINT, 16), - - /* Set the FTP PORT string (interface name, named or numerical IP address) - Use i.e '-' to use default address. */ - CINIT(FTPPORT, STRINGPOINT, 17), - - /* Set the User-Agent string (examined by some CGIs) */ - CINIT(USERAGENT, STRINGPOINT, 18), - - /* If the download receives less than "low speed limit" bytes/second - * during "low speed time" seconds, the operations is aborted. - * You could i.e if you have a pretty high speed connection, abort if - * it is less than 2000 bytes/sec during 20 seconds. - */ - - /* Set the "low speed limit" */ - CINIT(LOW_SPEED_LIMIT, LONG, 19), - - /* Set the "low speed time" */ - CINIT(LOW_SPEED_TIME, LONG, 20), - - /* Set the continuation offset. - * - * Note there is also a _LARGE version of this key which uses - * off_t types, allowing for large file offsets on platforms which - * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. - */ - CINIT(RESUME_FROM, LONG, 21), - - /* Set cookie in request: */ - CINIT(COOKIE, STRINGPOINT, 22), - - /* This points to a linked list of headers, struct curl_slist kind. This - list is also used for RTSP (in spite of its name) */ - CINIT(HTTPHEADER, SLISTPOINT, 23), - - /* This points to a linked list of post entries, struct curl_httppost */ - CINIT(HTTPPOST, OBJECTPOINT, 24), - - /* name of the file keeping your private SSL-certificate */ - CINIT(SSLCERT, STRINGPOINT, 25), - - /* password for the SSL or SSH private key */ - CINIT(KEYPASSWD, STRINGPOINT, 26), - - /* send TYPE parameter? */ - CINIT(CRLF, LONG, 27), - - /* send linked-list of QUOTE commands */ - CINIT(QUOTE, SLISTPOINT, 28), - - /* send FILE * or void * to store headers to, if you use a callback it - is simply passed to the callback unmodified */ - CINIT(HEADERDATA, OBJECTPOINT, 29), - - /* point to a file to read the initial cookies from, also enables - "cookie awareness" */ - CINIT(COOKIEFILE, STRINGPOINT, 31), - - /* What version to specifically try to use. - See CURL_SSLVERSION defines below. */ - CINIT(SSLVERSION, LONG, 32), - - /* What kind of HTTP time condition to use, see defines */ - CINIT(TIMECONDITION, LONG, 33), - - /* Time to use with the above condition. Specified in number of seconds - since 1 Jan 1970 */ - CINIT(TIMEVALUE, LONG, 34), - - /* 35 = OBSOLETE */ - - /* Custom request, for customizing the get command like - HTTP: DELETE, TRACE and others - FTP: to use a different list command - */ - CINIT(CUSTOMREQUEST, STRINGPOINT, 36), - - /* FILE handle to use instead of stderr */ - CINIT(STDERR, OBJECTPOINT, 37), - - /* 38 is not used */ - - /* send linked-list of post-transfer QUOTE commands */ - CINIT(POSTQUOTE, SLISTPOINT, 39), - - CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */ - - CINIT(VERBOSE, LONG, 41), /* talk a lot */ - CINIT(HEADER, LONG, 42), /* throw the header out too */ - CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */ - CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */ - CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 400 */ - CINIT(UPLOAD, LONG, 46), /* this is an upload */ - CINIT(POST, LONG, 47), /* HTTP POST method */ - CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */ - - CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */ - - /* Specify whether to read the user+password from the .netrc or the URL. - * This must be one of the CURL_NETRC_* enums below. */ - CINIT(NETRC, LONG, 51), - - CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */ - - CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */ - CINIT(PUT, LONG, 54), /* HTTP PUT */ - - /* 55 = OBSOLETE */ - - /* DEPRECATED - * Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_progress_callback - * prototype defines. */ - CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56), - - /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION - callbacks */ - CINIT(PROGRESSDATA, OBJECTPOINT, 57), -#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA - - /* We want the referrer field set automatically when following locations */ - CINIT(AUTOREFERER, LONG, 58), - - /* Port of the proxy, can be set in the proxy string as well with: - "[host]:[port]" */ - CINIT(PROXYPORT, LONG, 59), - - /* size of the POST input data, if strlen() is not good to use */ - CINIT(POSTFIELDSIZE, LONG, 60), - - /* tunnel non-http operations through a HTTP proxy */ - CINIT(HTTPPROXYTUNNEL, LONG, 61), - - /* Set the interface string to use as outgoing network interface */ - CINIT(INTERFACE, STRINGPOINT, 62), - - /* Set the krb4/5 security level, this also enables krb4/5 awareness. This - * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string - * is set but doesn't match one of these, 'private' will be used. */ - CINIT(KRBLEVEL, STRINGPOINT, 63), - - /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ - CINIT(SSL_VERIFYPEER, LONG, 64), - - /* The CApath or CAfile used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAINFO, STRINGPOINT, 65), - - /* 66 = OBSOLETE */ - /* 67 = OBSOLETE */ - - /* Maximum number of http redirects to follow */ - CINIT(MAXREDIRS, LONG, 68), - - /* Pass a long set to 1 to get the date of the requested document (if - possible)! Pass a zero to shut it off. */ - CINIT(FILETIME, LONG, 69), - - /* This points to a linked list of telnet options */ - CINIT(TELNETOPTIONS, SLISTPOINT, 70), - - /* Max amount of cached alive connections */ - CINIT(MAXCONNECTS, LONG, 71), - - CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */ - - /* 73 = OBSOLETE */ - - /* Set to explicitly use a new connection for the upcoming transfer. - Do not use this unless you're absolutely sure of this, as it makes the - operation slower and is less friendly for the network. */ - CINIT(FRESH_CONNECT, LONG, 74), - - /* Set to explicitly forbid the upcoming transfer's connection to be re-used - when done. Do not use this unless you're absolutely sure of this, as it - makes the operation slower and is less friendly for the network. */ - CINIT(FORBID_REUSE, LONG, 75), - - /* Set to a file name that contains random data for libcurl to use to - seed the random engine when doing SSL connects. */ - CINIT(RANDOM_FILE, STRINGPOINT, 76), - - /* Set to the Entropy Gathering Daemon socket pathname */ - CINIT(EGDSOCKET, STRINGPOINT, 77), - - /* Time-out connect operations after this amount of seconds, if connects are - OK within this time, then fine... This only aborts the connect phase. */ - CINIT(CONNECTTIMEOUT, LONG, 78), - - /* Function that will be called to store headers (instead of fwrite). The - * parameters will use fwrite() syntax, make sure to follow them. */ - CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79), - - /* Set this to force the HTTP request to get back to GET. Only really usable - if POST, PUT or a custom request have been used first. - */ - CINIT(HTTPGET, LONG, 80), - - /* Set if we should verify the Common name from the peer certificate in ssl - * handshake, set 1 to check existence, 2 to ensure that it matches the - * provided hostname. */ - CINIT(SSL_VERIFYHOST, LONG, 81), - - /* Specify which file name to write all known cookies in after completed - operation. Set file name to "-" (dash) to make it go to stdout. */ - CINIT(COOKIEJAR, STRINGPOINT, 82), - - /* Specify which SSL ciphers to use */ - CINIT(SSL_CIPHER_LIST, STRINGPOINT, 83), - - /* Specify which HTTP version to use! This must be set to one of the - CURL_HTTP_VERSION* enums set below. */ - CINIT(HTTP_VERSION, LONG, 84), - - /* Specifically switch on or off the FTP engine's use of the EPSV command. By - default, that one will always be attempted before the more traditional - PASV command. */ - CINIT(FTP_USE_EPSV, LONG, 85), - - /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ - CINIT(SSLCERTTYPE, STRINGPOINT, 86), - - /* name of the file keeping your private SSL-key */ - CINIT(SSLKEY, STRINGPOINT, 87), - - /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ - CINIT(SSLKEYTYPE, STRINGPOINT, 88), - - /* crypto engine for the SSL-sub system */ - CINIT(SSLENGINE, STRINGPOINT, 89), - - /* set the crypto engine for the SSL-sub system as default - the param has no meaning... - */ - CINIT(SSLENGINE_DEFAULT, LONG, 90), - - /* Non-zero value means to use the global dns cache */ - CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */ - - /* DNS cache timeout */ - CINIT(DNS_CACHE_TIMEOUT, LONG, 92), - - /* send linked-list of pre-transfer QUOTE commands */ - CINIT(PREQUOTE, SLISTPOINT, 93), - - /* set the debug function */ - CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94), - - /* set the data for the debug function */ - CINIT(DEBUGDATA, OBJECTPOINT, 95), - - /* mark this as start of a cookie session */ - CINIT(COOKIESESSION, LONG, 96), - - /* The CApath directory used to validate the peer certificate - this option is used only if SSL_VERIFYPEER is true */ - CINIT(CAPATH, STRINGPOINT, 97), - - /* Instruct libcurl to use a smaller receive buffer */ - CINIT(BUFFERSIZE, LONG, 98), - - /* Instruct libcurl to not use any signal/alarm handlers, even when using - timeouts. This option is useful for multi-threaded applications. - See libcurl-the-guide for more background information. */ - CINIT(NOSIGNAL, LONG, 99), - - /* Provide a CURLShare for mutexing non-ts data */ - CINIT(SHARE, OBJECTPOINT, 100), - - /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), - CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and - CURLPROXY_SOCKS5. */ - CINIT(PROXYTYPE, LONG, 101), - - /* Set the Accept-Encoding string. Use this to tell a server you would like - the response to be compressed. Before 7.21.6, this was known as - CURLOPT_ENCODING */ - CINIT(ACCEPT_ENCODING, STRINGPOINT, 102), - - /* Set pointer to private data */ - CINIT(PRIVATE, OBJECTPOINT, 103), - - /* Set aliases for HTTP 200 in the HTTP Response header */ - CINIT(HTTP200ALIASES, SLISTPOINT, 104), - - /* Continue to send authentication (user+password) when following locations, - even when hostname changed. This can potentially send off the name - and password to whatever host the server decides. */ - CINIT(UNRESTRICTED_AUTH, LONG, 105), - - /* Specifically switch on or off the FTP engine's use of the EPRT command ( - it also disables the LPRT attempt). By default, those ones will always be - attempted before the good old traditional PORT command. */ - CINIT(FTP_USE_EPRT, LONG, 106), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_USERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(HTTPAUTH, LONG, 107), - - /* Set the ssl context callback function, currently only for OpenSSL or - WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. - The function must match the curl_ssl_ctx_callback prototype. */ - CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108), - - /* Set the userdata for the ssl context callback function's third - argument */ - CINIT(SSL_CTX_DATA, OBJECTPOINT, 109), - - /* FTP Option that causes missing dirs to be created on the remote server. - In 7.19.4 we introduced the convenience enums for this option using the - CURLFTP_CREATE_DIR prefix. - */ - CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110), - - /* Set this to a bitmask value to enable the particular authentications - methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. - Note that setting multiple bits may cause extra network round-trips. */ - CINIT(PROXYAUTH, LONG, 111), - - /* FTP option that changes the timeout, in seconds, associated with - getting a response. This is different from transfer timeout time and - essentially places a demand on the FTP server to acknowledge commands - in a timely manner. */ - CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112), -#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT - - /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to - tell libcurl to resolve names to those IP versions only. This only has - affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */ - CINIT(IPRESOLVE, LONG, 113), - - /* Set this option to limit the size of a file that will be downloaded from - an HTTP or FTP server. - - Note there is also _LARGE version which adds large file support for - platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ - CINIT(MAXFILESIZE, LONG, 114), - - /* See the comment for INFILESIZE above, but in short, specifies - * the size of the file being uploaded. -1 means unknown. - */ - CINIT(INFILESIZE_LARGE, OFF_T, 115), - - /* Sets the continuation offset. There is also a LONG version of this; - * look above for RESUME_FROM. - */ - CINIT(RESUME_FROM_LARGE, OFF_T, 116), - - /* Sets the maximum size of data that will be downloaded from - * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. - */ - CINIT(MAXFILESIZE_LARGE, OFF_T, 117), - - /* Set this option to the file name of your .netrc file you want libcurl - to parse (using the CURLOPT_NETRC option). If not set, libcurl will do - a poor attempt to find the user's home directory and check for a .netrc - file in there. */ - CINIT(NETRC_FILE, STRINGPOINT, 118), - - /* Enable SSL/TLS for FTP, pick one of: - CURLUSESSL_TRY - try using SSL, proceed anyway otherwise - CURLUSESSL_CONTROL - SSL for the control connection or fail - CURLUSESSL_ALL - SSL for all communication or fail - */ - CINIT(USE_SSL, LONG, 119), - - /* The _LARGE version of the standard POSTFIELDSIZE option */ - CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120), - - /* Enable/disable the TCP Nagle algorithm */ - CINIT(TCP_NODELAY, LONG, 121), - - /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 123 OBSOLETE. Gone in 7.16.0 */ - /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ - /* 127 OBSOLETE. Gone in 7.16.0 */ - /* 128 OBSOLETE. Gone in 7.16.0 */ - - /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option - can be used to change libcurl's default action which is to first try - "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK - response has been received. - - Available parameters are: - CURLFTPAUTH_DEFAULT - let libcurl decide - CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS - CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL - */ - CINIT(FTPSSLAUTH, LONG, 129), - - CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130), - CINIT(IOCTLDATA, OBJECTPOINT, 131), - - /* 132 OBSOLETE. Gone in 7.16.0 */ - /* 133 OBSOLETE. Gone in 7.16.0 */ - - /* zero terminated string for pass on to the FTP server when asked for - "account" info */ - CINIT(FTP_ACCOUNT, STRINGPOINT, 134), - - /* feed cookie into cookie engine */ - CINIT(COOKIELIST, STRINGPOINT, 135), - - /* ignore Content-Length */ - CINIT(IGNORE_CONTENT_LENGTH, LONG, 136), - - /* Set to non-zero to skip the IP address received in a 227 PASV FTP server - response. Typically used for FTP-SSL purposes but is not restricted to - that. libcurl will then instead use the same IP address it used for the - control connection. */ - CINIT(FTP_SKIP_PASV_IP, LONG, 137), - - /* Select "file method" to use when doing FTP, see the curl_ftpmethod - above. */ - CINIT(FTP_FILEMETHOD, LONG, 138), - - /* Local port number to bind the socket to */ - CINIT(LOCALPORT, LONG, 139), - - /* Number of ports to try, including the first one set with LOCALPORT. - Thus, setting it to 1 will make no additional attempts but the first. - */ - CINIT(LOCALPORTRANGE, LONG, 140), - - /* no transfer, set up connection and let application use the socket by - extracting it with CURLINFO_LASTSOCKET */ - CINIT(CONNECT_ONLY, LONG, 141), - - /* Function that will be called to convert from the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142), - - /* Function that will be called to convert to the - network encoding (instead of using the iconv calls in libcurl) */ - CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143), - - /* Function that will be called to convert from UTF8 - (instead of using the iconv calls in libcurl) - Note that this is used only for SSL certificate processing */ - CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144), - - /* if the connection proceeds too quickly then need to slow it down */ - /* limit-rate: maximum number of bytes per second to send or receive */ - CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145), - CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146), - - /* Pointer to command string to send if USER/PASS fails. */ - CINIT(FTP_ALTERNATIVE_TO_USER, STRINGPOINT, 147), - - /* callback function for setting socket options */ - CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148), - CINIT(SOCKOPTDATA, OBJECTPOINT, 149), - - /* set to 0 to disable session ID re-use for this transfer, default is - enabled (== 1) */ - CINIT(SSL_SESSIONID_CACHE, LONG, 150), - - /* allowed SSH authentication methods */ - CINIT(SSH_AUTH_TYPES, LONG, 151), - - /* Used by scp/sftp to do public/private key authentication */ - CINIT(SSH_PUBLIC_KEYFILE, STRINGPOINT, 152), - CINIT(SSH_PRIVATE_KEYFILE, STRINGPOINT, 153), - - /* Send CCC (Clear Command Channel) after authentication */ - CINIT(FTP_SSL_CCC, LONG, 154), - - /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ - CINIT(TIMEOUT_MS, LONG, 155), - CINIT(CONNECTTIMEOUT_MS, LONG, 156), - - /* set to zero to disable the libcurl's decoding and thus pass the raw body - data to the application even when it is encoded/compressed */ - CINIT(HTTP_TRANSFER_DECODING, LONG, 157), - CINIT(HTTP_CONTENT_DECODING, LONG, 158), - - /* Permission used when creating new files and directories on the remote - server for protocols that support it, SFTP/SCP/FILE */ - CINIT(NEW_FILE_PERMS, LONG, 159), - CINIT(NEW_DIRECTORY_PERMS, LONG, 160), - - /* Set the behaviour of POST when redirecting. Values must be set to one - of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ - CINIT(POSTREDIR, LONG, 161), - - /* used by scp/sftp to verify the host's public key */ - CINIT(SSH_HOST_PUBLIC_KEY_MD5, STRINGPOINT, 162), - - /* Callback function for opening socket (instead of socket(2)). Optionally, - callback is able change the address or refuse to connect returning - CURL_SOCKET_BAD. The callback should have type - curl_opensocket_callback */ - CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163), - CINIT(OPENSOCKETDATA, OBJECTPOINT, 164), - - /* POST volatile input fields. */ - CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165), - - /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ - CINIT(PROXY_TRANSFER_MODE, LONG, 166), - - /* Callback function for seeking in the input stream */ - CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167), - CINIT(SEEKDATA, OBJECTPOINT, 168), - - /* CRL file */ - CINIT(CRLFILE, STRINGPOINT, 169), - - /* Issuer certificate */ - CINIT(ISSUERCERT, STRINGPOINT, 170), - - /* (IPv6) Address scope */ - CINIT(ADDRESS_SCOPE, LONG, 171), - - /* Collect certificate chain info and allow it to get retrievable with - CURLINFO_CERTINFO after the transfer is complete. */ - CINIT(CERTINFO, LONG, 172), - - /* "name" and "pwd" to use when fetching. */ - CINIT(USERNAME, STRINGPOINT, 173), - CINIT(PASSWORD, STRINGPOINT, 174), - - /* "name" and "pwd" to use with Proxy when fetching. */ - CINIT(PROXYUSERNAME, STRINGPOINT, 175), - CINIT(PROXYPASSWORD, STRINGPOINT, 176), - - /* Comma separated list of hostnames defining no-proxy zones. These should - match both hostnames directly, and hostnames within a domain. For - example, local.com will match local.com and www.local.com, but NOT - notlocal.com or www.notlocal.com. For compatibility with other - implementations of this, .local.com will be considered to be the same as - local.com. A single * is the only valid wildcard, and effectively - disables the use of proxy. */ - CINIT(NOPROXY, STRINGPOINT, 177), - - /* block size for TFTP transfers */ - CINIT(TFTP_BLKSIZE, LONG, 178), - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_SERVICE, STRINGPOINT, 179), /* DEPRECATED, do not use! */ - - /* Socks Service */ - CINIT(SOCKS5_GSSAPI_NEC, LONG, 180), - - /* set the bitmask for the protocols that are allowed to be used for the - transfer, which thus helps the app which takes URLs from users or other - external inputs and want to restrict what protocol(s) to deal - with. Defaults to CURLPROTO_ALL. */ - CINIT(PROTOCOLS, LONG, 181), - - /* set the bitmask for the protocols that libcurl is allowed to follow to, - as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs - to be set in both bitmasks to be allowed to get redirected to. Defaults - to all protocols except FILE and SCP. */ - CINIT(REDIR_PROTOCOLS, LONG, 182), - - /* set the SSH knownhost file name to use */ - CINIT(SSH_KNOWNHOSTS, STRINGPOINT, 183), - - /* set the SSH host key callback, must point to a curl_sshkeycallback - function */ - CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184), - - /* set the SSH host key callback custom pointer */ - CINIT(SSH_KEYDATA, OBJECTPOINT, 185), - - /* set the SMTP mail originator */ - CINIT(MAIL_FROM, STRINGPOINT, 186), - - /* set the list of SMTP mail receiver(s) */ - CINIT(MAIL_RCPT, SLISTPOINT, 187), - - /* FTP: send PRET before PASV */ - CINIT(FTP_USE_PRET, LONG, 188), - - /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ - CINIT(RTSP_REQUEST, LONG, 189), - - /* The RTSP session identifier */ - CINIT(RTSP_SESSION_ID, STRINGPOINT, 190), - - /* The RTSP stream URI */ - CINIT(RTSP_STREAM_URI, STRINGPOINT, 191), - - /* The Transport: header to use in RTSP requests */ - CINIT(RTSP_TRANSPORT, STRINGPOINT, 192), - - /* Manually initialize the client RTSP CSeq for this handle */ - CINIT(RTSP_CLIENT_CSEQ, LONG, 193), - - /* Manually initialize the server RTSP CSeq for this handle */ - CINIT(RTSP_SERVER_CSEQ, LONG, 194), - - /* The stream to pass to INTERLEAVEFUNCTION. */ - CINIT(INTERLEAVEDATA, OBJECTPOINT, 195), - - /* Let the application define a custom write method for RTP data */ - CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196), - - /* Turn on wildcard matching */ - CINIT(WILDCARDMATCH, LONG, 197), - - /* Directory matching callback called before downloading of an - individual file (chunk) started */ - CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198), - - /* Directory matching callback called after the file (chunk) - was downloaded, or skipped */ - CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199), - - /* Change match (fnmatch-like) callback for wildcard matching */ - CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200), - - /* Let the application define custom chunk data pointer */ - CINIT(CHUNK_DATA, OBJECTPOINT, 201), - - /* FNMATCH_FUNCTION user pointer */ - CINIT(FNMATCH_DATA, OBJECTPOINT, 202), - - /* send linked-list of name:port:address sets */ - CINIT(RESOLVE, SLISTPOINT, 203), - - /* Set a username for authenticated TLS */ - CINIT(TLSAUTH_USERNAME, STRINGPOINT, 204), - - /* Set a password for authenticated TLS */ - CINIT(TLSAUTH_PASSWORD, STRINGPOINT, 205), - - /* Set authentication type for authenticated TLS */ - CINIT(TLSAUTH_TYPE, STRINGPOINT, 206), - - /* Set to 1 to enable the "TE:" header in HTTP requests to ask for - compressed transfer-encoded responses. Set to 0 to disable the use of TE: - in outgoing requests. The current default is 0, but it might change in a - future libcurl release. - - libcurl will ask for the compressed methods it knows of, and if that - isn't any, it will not ask for transfer-encoding at all even if this - option is set to 1. - - */ - CINIT(TRANSFER_ENCODING, LONG, 207), - - /* Callback function for closing socket (instead of close(2)). The callback - should have type curl_closesocket_callback */ - CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208), - CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209), - - /* allow GSSAPI credential delegation */ - CINIT(GSSAPI_DELEGATION, LONG, 210), - - /* Set the name servers to use for DNS resolution */ - CINIT(DNS_SERVERS, STRINGPOINT, 211), - - /* Time-out accept operations (currently for FTP only) after this amount - of milliseconds. */ - CINIT(ACCEPTTIMEOUT_MS, LONG, 212), - - /* Set TCP keepalive */ - CINIT(TCP_KEEPALIVE, LONG, 213), - - /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ - CINIT(TCP_KEEPIDLE, LONG, 214), - CINIT(TCP_KEEPINTVL, LONG, 215), - - /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ - CINIT(SSL_OPTIONS, LONG, 216), - - /* Set the SMTP auth originator */ - CINIT(MAIL_AUTH, STRINGPOINT, 217), - - /* Enable/disable SASL initial response */ - CINIT(SASL_IR, LONG, 218), - - /* Function that will be called instead of the internal progress display - * function. This function should be defined as the curl_xferinfo_callback - * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ - CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219), - - /* The XOAUTH2 bearer token */ - CINIT(XOAUTH2_BEARER, STRINGPOINT, 220), - - /* Set the interface string to use as outgoing network - * interface for DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_INTERFACE, STRINGPOINT, 221), - - /* Set the local IPv4 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP4, STRINGPOINT, 222), - - /* Set the local IPv6 address to use for outgoing DNS requests. - * Only supported by the c-ares DNS backend */ - CINIT(DNS_LOCAL_IP6, STRINGPOINT, 223), - - /* Set authentication options directly */ - CINIT(LOGIN_OPTIONS, STRINGPOINT, 224), - - /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_NPN, LONG, 225), - - /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ - CINIT(SSL_ENABLE_ALPN, LONG, 226), - - /* Time to wait for a response to a HTTP request containing an - * Expect: 100-continue header before sending the data anyway. */ - CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227), - - /* This points to a linked list of headers used for proxy requests only, - struct curl_slist kind */ - CINIT(PROXYHEADER, SLISTPOINT, 228), - - /* Pass in a bitmask of "header options" */ - CINIT(HEADEROPT, LONG, 229), - - /* The public key in DER form used to validate the peer public key - this option is used only if SSL_VERIFYPEER is true */ - CINIT(PINNEDPUBLICKEY, STRINGPOINT, 230), - - /* Path to Unix domain socket */ - CINIT(UNIX_SOCKET_PATH, STRINGPOINT, 231), - - /* Set if we should verify the certificate status. */ - CINIT(SSL_VERIFYSTATUS, LONG, 232), - - /* Set if we should enable TLS false start. */ - CINIT(SSL_FALSESTART, LONG, 233), - - /* Do not squash dot-dot sequences */ - CINIT(PATH_AS_IS, LONG, 234), - - /* Proxy Service Name */ - CINIT(PROXY_SERVICE_NAME, STRINGPOINT, 235), - - /* Service Name */ - CINIT(SERVICE_NAME, STRINGPOINT, 236), - - /* Wait/don't wait for pipe/mutex to clarify */ - CINIT(PIPEWAIT, LONG, 237), - - /* Set the protocol used when curl is given a URL without a protocol */ - CINIT(DEFAULT_PROTOCOL, STRINGPOINT, 238), - - /* Set stream weight, 1 - 256 (default is 16) */ - CINIT(STREAM_WEIGHT, LONG, 239), - - /* Set stream dependency on another CURL handle */ - CINIT(STREAM_DEPENDS, OBJECTPOINT, 240), - - /* Set E-xclusive stream dependency on another CURL handle */ - CINIT(STREAM_DEPENDS_E, OBJECTPOINT, 241), - - /* Do not send any tftp option requests to the server */ - CINIT(TFTP_NO_OPTIONS, LONG, 242), - - /* Linked-list of host:port:connect-to-host:connect-to-port, - overrides the URL's host:port (only for the network layer) */ - CINIT(CONNECT_TO, SLISTPOINT, 243), - - /* Set TCP Fast Open */ - CINIT(TCP_FASTOPEN, LONG, 244), - - /* Continue to send data if the server responds early with an - * HTTP status code >= 300 */ - CINIT(KEEP_SENDING_ON_ERROR, LONG, 245), - - /* The CApath or CAfile used to validate the proxy certificate - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_CAINFO, STRINGPOINT, 246), - - /* The CApath directory used to validate the proxy certificate - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_CAPATH, STRINGPOINT, 247), - - /* Set if we should verify the proxy in ssl handshake, - set 1 to verify. */ - CINIT(PROXY_SSL_VERIFYPEER, LONG, 248), - - /* Set if we should verify the Common name from the proxy certificate in ssl - * handshake, set 1 to check existence, 2 to ensure that it matches - * the provided hostname. */ - CINIT(PROXY_SSL_VERIFYHOST, LONG, 249), - - /* What version to specifically try to use for proxy. - See CURL_SSLVERSION defines below. */ - CINIT(PROXY_SSLVERSION, LONG, 250), - - /* Set a username for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_USERNAME, STRINGPOINT, 251), - - /* Set a password for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_PASSWORD, STRINGPOINT, 252), - - /* Set authentication type for authenticated TLS for proxy */ - CINIT(PROXY_TLSAUTH_TYPE, STRINGPOINT, 253), - - /* name of the file keeping your private SSL-certificate for proxy */ - CINIT(PROXY_SSLCERT, STRINGPOINT, 254), - - /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for - proxy */ - CINIT(PROXY_SSLCERTTYPE, STRINGPOINT, 255), - - /* name of the file keeping your private SSL-key for proxy */ - CINIT(PROXY_SSLKEY, STRINGPOINT, 256), - - /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for - proxy */ - CINIT(PROXY_SSLKEYTYPE, STRINGPOINT, 257), - - /* password for the SSL private key for proxy */ - CINIT(PROXY_KEYPASSWD, STRINGPOINT, 258), - - /* Specify which SSL ciphers to use for proxy */ - CINIT(PROXY_SSL_CIPHER_LIST, STRINGPOINT, 259), - - /* CRL file for proxy */ - CINIT(PROXY_CRLFILE, STRINGPOINT, 260), - - /* Enable/disable specific SSL features with a bitmask for proxy, see - CURLSSLOPT_* */ - CINIT(PROXY_SSL_OPTIONS, LONG, 261), - - /* Name of pre proxy to use. */ - CINIT(PRE_PROXY, STRINGPOINT, 262), - - /* The public key in DER form used to validate the proxy public key - this option is used only if PROXY_SSL_VERIFYPEER is true */ - CINIT(PROXY_PINNEDPUBLICKEY, STRINGPOINT, 263), - - /* Path to an abstract Unix domain socket */ - CINIT(ABSTRACT_UNIX_SOCKET, STRINGPOINT, 264), - - /* Suppress proxy CONNECT response headers from user callbacks */ - CINIT(SUPPRESS_CONNECT_HEADERS, LONG, 265), - - /* The request target, instead of extracted from the URL */ - CINIT(REQUEST_TARGET, STRINGPOINT, 266), - - /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ - CINIT(SOCKS5_AUTH, LONG, 267), - - /* Enable/disable SSH compression */ - CINIT(SSH_COMPRESSION, LONG, 268), - - /* Post MIME data. */ - CINIT(MIMEPOST, OBJECTPOINT, 269), - - /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of - seconds since 1 Jan 1970. */ - CINIT(TIMEVALUE_LARGE, OFF_T, 270), - - /* Head start in milliseconds to give happy eyeballs. */ - CINIT(HAPPY_EYEBALLS_TIMEOUT_MS, LONG, 271), - - /* Function that will be called before a resolver request is made */ - CINIT(RESOLVER_START_FUNCTION, FUNCTIONPOINT, 272), - - /* User data to pass to the resolver start callback. */ - CINIT(RESOLVER_START_DATA, OBJECTPOINT, 273), - - /* send HAProxy PROXY protocol header? */ - CINIT(HAPROXYPROTOCOL, LONG, 274), - - /* shuffle addresses before use when DNS returns multiple */ - CINIT(DNS_SHUFFLE_ADDRESSES, LONG, 275), - - /* Specify which TLS 1.3 ciphers suites to use */ - CINIT(TLS13_CIPHERS, STRINGPOINT, 276), - CINIT(PROXY_TLS13_CIPHERS, STRINGPOINT, 277), - - /* Disallow specifying username/login in URL. */ - CINIT(DISALLOW_USERNAME_IN_URL, LONG, 278), - - /* DNS-over-HTTPS URL */ - CINIT(DOH_URL, STRINGPOINT, 279), - - /* Preferred buffer size to use for uploads */ - CINIT(UPLOAD_BUFFERSIZE, LONG, 280), - - /* Time in ms between connection upkeep calls for long-lived connections. */ - CINIT(UPKEEP_INTERVAL_MS, LONG, 281), - - /* Specify URL using CURL URL API. */ - CINIT(CURLU, OBJECTPOINT, 282), - - /* add trailing data just after no more data is available */ - CINIT(TRAILERFUNCTION, FUNCTIONPOINT, 283), - - /* pointer to be passed to HTTP_TRAILER_FUNCTION */ - CINIT(TRAILERDATA, OBJECTPOINT, 284), - - /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ - CINIT(HTTP09_ALLOWED, LONG, 285), - - /* alt-svc control bitmask */ - CINIT(ALTSVC_CTRL, LONG, 286), - - /* alt-svc cache file name to possibly read from/write to */ - CINIT(ALTSVC, STRINGPOINT, 287), - - /* maximum age of a connection to consider it for reuse (in seconds) */ - CINIT(MAXAGE_CONN, LONG, 288), - - CURLOPT_LASTENTRY /* the last unused */ -} CURLoption; - -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all - the obsolete stuff removed! */ - -/* Backwards compatibility with older names */ -/* These are scheduled to disappear by 2011 */ - -/* This was added in version 7.19.1 */ -#define CURLOPT_POST301 CURLOPT_POSTREDIR - -/* These are scheduled to disappear by 2009 */ - -/* The following were added in 7.17.0 */ -#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD -#define CURLOPT_FTPAPPEND CURLOPT_APPEND -#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY -#define CURLOPT_FTP_SSL CURLOPT_USE_SSL - -/* The following were added earlier */ - -#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD -#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL - -#else -/* This is set if CURL_NO_OLDIES is defined at compile-time */ -#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ -#endif - - - /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host - name resolves addresses using more than one IP protocol version, this - option might be handy to force libcurl to use a specific IP version. */ -#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP - versions that your system allows */ -#define CURL_IPRESOLVE_V4 1 /* resolve to IPv4 addresses */ -#define CURL_IPRESOLVE_V6 2 /* resolve to IPv6 addresses */ - - /* three convenient "aliases" that follow the name scheme better */ -#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER - - /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ -enum { - CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd - like the library to choose the best possible - for us! */ - CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ - CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ - CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ - CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ - CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 - Upgrade */ - - CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ -}; - -/* Convenience definition simple because the name of the version is HTTP/2 and - not 2.0. The 2_0 version of the enum name was set while the version was - still planned to be 2.0 and we stick to it for compatibility. */ -#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 - -/* - * Public API enums for RTSP requests - */ -enum { - CURL_RTSPREQ_NONE, /* first in list */ - CURL_RTSPREQ_OPTIONS, - CURL_RTSPREQ_DESCRIBE, - CURL_RTSPREQ_ANNOUNCE, - CURL_RTSPREQ_SETUP, - CURL_RTSPREQ_PLAY, - CURL_RTSPREQ_PAUSE, - CURL_RTSPREQ_TEARDOWN, - CURL_RTSPREQ_GET_PARAMETER, - CURL_RTSPREQ_SET_PARAMETER, - CURL_RTSPREQ_RECORD, - CURL_RTSPREQ_RECEIVE, - CURL_RTSPREQ_LAST /* last in list */ -}; - - /* These enums are for use with the CURLOPT_NETRC option. */ -enum CURL_NETRC_OPTION { - CURL_NETRC_IGNORED, /* The .netrc will never be read. - * This is the default. */ - CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred - * to one in the .netrc. */ - CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. - * Unless one is set programmatically, the .netrc - * will be queried. */ - CURL_NETRC_LAST -}; - -enum { - CURL_SSLVERSION_DEFAULT, - CURL_SSLVERSION_TLSv1, /* TLS 1.x */ - CURL_SSLVERSION_SSLv2, - CURL_SSLVERSION_SSLv3, - CURL_SSLVERSION_TLSv1_0, - CURL_SSLVERSION_TLSv1_1, - CURL_SSLVERSION_TLSv1_2, - CURL_SSLVERSION_TLSv1_3, - - CURL_SSLVERSION_LAST /* never use, keep last */ -}; - -enum { - CURL_SSLVERSION_MAX_NONE = 0, - CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), - CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), - CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), - CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), - CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), - - /* never use, keep last */ - CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) -}; - -enum CURL_TLSAUTH { - CURL_TLSAUTH_NONE, - CURL_TLSAUTH_SRP, - CURL_TLSAUTH_LAST /* never use, keep last */ -}; - -/* symbols to use with CURLOPT_POSTREDIR. - CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 - can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 - | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ - -#define CURL_REDIR_GET_ALL 0 -#define CURL_REDIR_POST_301 1 -#define CURL_REDIR_POST_302 2 -#define CURL_REDIR_POST_303 4 -#define CURL_REDIR_POST_ALL \ - (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) - -typedef enum { - CURL_TIMECOND_NONE, - - CURL_TIMECOND_IFMODSINCE, - CURL_TIMECOND_IFUNMODSINCE, - CURL_TIMECOND_LASTMOD, - - CURL_TIMECOND_LAST -} curl_TimeCond; - -/* Special size_t value signaling a zero-terminated string. */ -#define CURL_ZERO_TERMINATED ((size_t) -1) - -/* curl_strequal() and curl_strnequal() are subject for removal in a future - release */ -CURL_EXTERN int curl_strequal(const char *s1, const char *s2); -CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); - -/* Mime/form handling support. */ -typedef struct curl_mime_s curl_mime; /* Mime context. */ -typedef struct curl_mimepart_s curl_mimepart; /* Mime part context. */ - -/* - * NAME curl_mime_init() - * - * DESCRIPTION - * - * Create a mime context and return its handle. The easy parameter is the - * target handle. - */ -CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); - -/* - * NAME curl_mime_free() - * - * DESCRIPTION - * - * release a mime handle and its substructures. - */ -CURL_EXTERN void curl_mime_free(curl_mime *mime); - -/* - * NAME curl_mime_addpart() - * - * DESCRIPTION - * - * Append a new empty part to the given mime context and return a handle to - * the created part. - */ -CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); - -/* - * NAME curl_mime_name() - * - * DESCRIPTION - * - * Set mime/form part name. - */ -CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); - -/* - * NAME curl_mime_filename() - * - * DESCRIPTION - * - * Set mime part remote file name. - */ -CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, - const char *filename); - -/* - * NAME curl_mime_type() - * - * DESCRIPTION - * - * Set mime part type. - */ -CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); - -/* - * NAME curl_mime_encoder() - * - * DESCRIPTION - * - * Set mime data transfer encoder. - */ -CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, - const char *encoding); - -/* - * NAME curl_mime_data() - * - * DESCRIPTION - * - * Set mime part data source from memory data, - */ -CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, - const char *data, size_t datasize); - -/* - * NAME curl_mime_filedata() - * - * DESCRIPTION - * - * Set mime part data source from named file. - */ -CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, - const char *filename); - -/* - * NAME curl_mime_data_cb() - * - * DESCRIPTION - * - * Set mime part data source from callback function. - */ -CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, - curl_off_t datasize, - curl_read_callback readfunc, - curl_seek_callback seekfunc, - curl_free_callback freefunc, - void *arg); - -/* - * NAME curl_mime_subparts() - * - * DESCRIPTION - * - * Set mime part data source from subparts. - */ -CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, - curl_mime *subparts); -/* - * NAME curl_mime_headers() - * - * DESCRIPTION - * - * Set mime part headers. - */ -CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, - struct curl_slist *headers, - int take_ownership); - -/* Old form API. */ -/* name is uppercase CURLFORM_ */ -#ifdef CFINIT -#undef CFINIT -#endif - -#ifdef CURL_ISOCPP -#define CFINIT(name) CURLFORM_ ## name -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define CFINIT(name) CURLFORM_/**/name -#endif - -typedef enum { - CFINIT(NOTHING), /********* the first one is unused ************/ - - /* */ - CFINIT(COPYNAME), - CFINIT(PTRNAME), - CFINIT(NAMELENGTH), - CFINIT(COPYCONTENTS), - CFINIT(PTRCONTENTS), - CFINIT(CONTENTSLENGTH), - CFINIT(FILECONTENT), - CFINIT(ARRAY), - CFINIT(OBSOLETE), - CFINIT(FILE), - - CFINIT(BUFFER), - CFINIT(BUFFERPTR), - CFINIT(BUFFERLENGTH), - - CFINIT(CONTENTTYPE), - CFINIT(CONTENTHEADER), - CFINIT(FILENAME), - CFINIT(END), - CFINIT(OBSOLETE2), - - CFINIT(STREAM), - CFINIT(CONTENTLEN), /* added in 7.46.0, provide a curl_off_t length */ - - CURLFORM_LASTENTRY /* the last unused */ -} CURLformoption; - -#undef CFINIT /* done */ - -/* structure to be used as parameter for CURLFORM_ARRAY */ -struct curl_forms { - CURLformoption option; - const char *value; -}; - -/* use this for multipart formpost building */ -/* Returns code for curl_formadd() - * - * Returns: - * CURL_FORMADD_OK on success - * CURL_FORMADD_MEMORY if the FormInfo allocation fails - * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form - * CURL_FORMADD_NULL if a null pointer was given for a char - * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed - * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used - * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) - * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated - * CURL_FORMADD_MEMORY if some allocation for string copying failed. - * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array - * - ***************************************************************************/ -typedef enum { - CURL_FORMADD_OK, /* first, no error */ - - CURL_FORMADD_MEMORY, - CURL_FORMADD_OPTION_TWICE, - CURL_FORMADD_NULL, - CURL_FORMADD_UNKNOWN_OPTION, - CURL_FORMADD_INCOMPLETE, - CURL_FORMADD_ILLEGAL_ARRAY, - CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ - - CURL_FORMADD_LAST /* last */ -} CURLFORMcode; - -/* - * NAME curl_formadd() - * - * DESCRIPTION - * - * Pretty advanced function for building multi-part formposts. Each invoke - * adds one part that together construct a full post. Then use - * CURLOPT_HTTPPOST to send it off to libcurl. - */ -CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, - struct curl_httppost **last_post, - ...); - -/* - * callback function for curl_formget() - * The void *arg pointer will be the one passed as second argument to - * curl_formget(). - * The character buffer passed to it must not be freed. - * Should return the buffer length passed to it as the argument "len" on - * success. - */ -typedef size_t (*curl_formget_callback)(void *arg, const char *buf, - size_t len); - -/* - * NAME curl_formget() - * - * DESCRIPTION - * - * Serialize a curl_httppost struct built with curl_formadd(). - * Accepts a void pointer as second argument which will be passed to - * the curl_formget_callback function. - * Returns 0 on success. - */ -CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, - curl_formget_callback append); -/* - * NAME curl_formfree() - * - * DESCRIPTION - * - * Free a multipart formpost previously built with curl_formadd(). - */ -CURL_EXTERN void curl_formfree(struct curl_httppost *form); - -/* - * NAME curl_getenv() - * - * DESCRIPTION - * - * Returns a malloc()'ed string that MUST be curl_free()ed after usage is - * complete. DEPRECATED - see lib/README.curlx - */ -CURL_EXTERN char *curl_getenv(const char *variable); - -/* - * NAME curl_version() - * - * DESCRIPTION - * - * Returns a static ascii string of the libcurl version. - */ -CURL_EXTERN char *curl_version(void); - -/* - * NAME curl_easy_escape() - * - * DESCRIPTION - * - * Escapes URL strings (converts all letters consider illegal in URLs to their - * %XX versions). This function returns a new allocated string or NULL if an - * error occurred. - */ -CURL_EXTERN char *curl_easy_escape(CURL *handle, - const char *string, - int length); - -/* the previous version: */ -CURL_EXTERN char *curl_escape(const char *string, - int length); - - -/* - * NAME curl_easy_unescape() - * - * DESCRIPTION - * - * Unescapes URL encoding in strings (converts all %XX codes to their 8bit - * versions). This function returns a new allocated string or NULL if an error - * occurred. - * Conversion Note: On non-ASCII platforms the ASCII %XX codes are - * converted into the host encoding. - */ -CURL_EXTERN char *curl_easy_unescape(CURL *handle, - const char *string, - int length, - int *outlength); - -/* the previous version */ -CURL_EXTERN char *curl_unescape(const char *string, - int length); - -/* - * NAME curl_free() - * - * DESCRIPTION - * - * Provided for de-allocation in the same translation unit that did the - * allocation. Added in libcurl 7.10 - */ -CURL_EXTERN void curl_free(void *p); - -/* - * NAME curl_global_init() - * - * DESCRIPTION - * - * curl_global_init() should be invoked exactly once for each application that - * uses libcurl and before any call of other libcurl functions. - * - * This function is not thread-safe! - */ -CURL_EXTERN CURLcode curl_global_init(long flags); - -/* - * NAME curl_global_init_mem() - * - * DESCRIPTION - * - * curl_global_init() or curl_global_init_mem() should be invoked exactly once - * for each application that uses libcurl. This function can be used to - * initialize libcurl and set user defined memory management callback - * functions. Users can implement memory management routines to check for - * memory leaks, check for mis-use of the curl library etc. User registered - * callback routines with be invoked by this library instead of the system - * memory management routines like malloc, free etc. - */ -CURL_EXTERN CURLcode curl_global_init_mem(long flags, - curl_malloc_callback m, - curl_free_callback f, - curl_realloc_callback r, - curl_strdup_callback s, - curl_calloc_callback c); - -/* - * NAME curl_global_cleanup() - * - * DESCRIPTION - * - * curl_global_cleanup() should be invoked exactly once for each application - * that uses libcurl - */ -CURL_EXTERN void curl_global_cleanup(void); - -/* linked-list structure for the CURLOPT_QUOTE option (and other) */ -struct curl_slist { - char *data; - struct curl_slist *next; -}; - -/* - * NAME curl_global_sslset() - * - * DESCRIPTION - * - * When built with multiple SSL backends, curl_global_sslset() allows to - * choose one. This function can only be called once, and it must be called - * *before* curl_global_init(). - * - * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The - * backend can also be specified via the name parameter (passing -1 as id). - * If both id and name are specified, the name will be ignored. If neither id - * nor name are specified, the function will fail with - * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the - * NULL-terminated list of available backends. - * - * Upon success, the function returns CURLSSLSET_OK. - * - * If the specified SSL backend is not available, the function returns - * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated - * list of available SSL backends. - * - * The SSL backend can be set only once. If it has already been set, a - * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. - */ - -typedef struct { - curl_sslbackend id; - const char *name; -} curl_ssl_backend; - -typedef enum { - CURLSSLSET_OK = 0, - CURLSSLSET_UNKNOWN_BACKEND, - CURLSSLSET_TOO_LATE, - CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ -} CURLsslset; - -CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, - const curl_ssl_backend ***avail); - -/* - * NAME curl_slist_append() - * - * DESCRIPTION - * - * Appends a string to a linked list. If no list exists, it will be created - * first. Returns the new list, after appending. - */ -CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, - const char *); - -/* - * NAME curl_slist_free_all() - * - * DESCRIPTION - * - * free a previously built curl_slist. - */ -CURL_EXTERN void curl_slist_free_all(struct curl_slist *); - -/* - * NAME curl_getdate() - * - * DESCRIPTION - * - * Returns the time, in seconds since 1 Jan 1970 of the time string given in - * the first argument. The time argument in the second parameter is unused - * and should be set to NULL. - */ -CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); - -/* info about the certificate chain, only for OpenSSL, GnuTLS, Schannel, NSS - and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ -struct curl_certinfo { - int num_of_certs; /* number of certificates with information */ - struct curl_slist **certinfo; /* for each index in this array, there's a - linked list with textual information in the - format "name: value" */ -}; - -/* Information about the SSL library used and the respective internal SSL - handle, which can be used to obtain further information regarding the - connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ -struct curl_tlssessioninfo { - curl_sslbackend backend; - void *internals; -}; - -#define CURLINFO_STRING 0x100000 -#define CURLINFO_LONG 0x200000 -#define CURLINFO_DOUBLE 0x300000 -#define CURLINFO_SLIST 0x400000 -#define CURLINFO_PTR 0x400000 /* same as SLIST */ -#define CURLINFO_SOCKET 0x500000 -#define CURLINFO_OFF_T 0x600000 -#define CURLINFO_MASK 0x0fffff -#define CURLINFO_TYPEMASK 0xf00000 - -typedef enum { - CURLINFO_NONE, /* first, never use this */ - CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, - CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, - CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, - CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, - CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, - CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, - CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, - CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, - CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, - CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, - CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, - CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, - CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, - CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, - CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, - CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, - CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, - CURLINFO_FILETIME = CURLINFO_LONG + 14, - CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, - CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, - CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, - CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, - CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, - CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, - CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, - CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, - CURLINFO_PRIVATE = CURLINFO_STRING + 21, - CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, - CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, - CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, - CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, - CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, - CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, - CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, - CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, - CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, - CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, - CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, - CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, - CURLINFO_CERTINFO = CURLINFO_PTR + 34, - CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, - CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, - CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, - CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, - CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, - CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, - CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, - CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, - CURLINFO_TLS_SESSION = CURLINFO_PTR + 43, - CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, - CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, - CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, - CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, - CURLINFO_PROTOCOL = CURLINFO_LONG + 48, - CURLINFO_SCHEME = CURLINFO_STRING + 49, - /* Fill in new entries below here! */ - - /* Preferably these would be defined conditionally based on the - sizeof curl_off_t being 64-bits */ - CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, - CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, - CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, - CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, - CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, - CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, - CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, - - CURLINFO_LASTONE = 56 -} CURLINFO; - -/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as - CURLINFO_HTTP_CODE */ -#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE - -typedef enum { - CURLCLOSEPOLICY_NONE, /* first, never use this */ - - CURLCLOSEPOLICY_OLDEST, - CURLCLOSEPOLICY_LEAST_RECENTLY_USED, - CURLCLOSEPOLICY_LEAST_TRAFFIC, - CURLCLOSEPOLICY_SLOWEST, - CURLCLOSEPOLICY_CALLBACK, - - CURLCLOSEPOLICY_LAST /* last, never use this */ -} curl_closepolicy; - -#define CURL_GLOBAL_SSL (1<<0) /* no purpose since since 7.57.0 */ -#define CURL_GLOBAL_WIN32 (1<<1) -#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) -#define CURL_GLOBAL_NOTHING 0 -#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL -#define CURL_GLOBAL_ACK_EINTR (1<<2) - - -/***************************************************************************** - * Setup defines, protos etc for the sharing stuff. - */ - -/* Different data locks for a single share */ -typedef enum { - CURL_LOCK_DATA_NONE = 0, - /* CURL_LOCK_DATA_SHARE is used internally to say that - * the locking is just made to change the internal state of the share - * itself. - */ - CURL_LOCK_DATA_SHARE, - CURL_LOCK_DATA_COOKIE, - CURL_LOCK_DATA_DNS, - CURL_LOCK_DATA_SSL_SESSION, - CURL_LOCK_DATA_CONNECT, - CURL_LOCK_DATA_PSL, - CURL_LOCK_DATA_LAST -} curl_lock_data; - -/* Different lock access types */ -typedef enum { - CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ - CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ - CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ - CURL_LOCK_ACCESS_LAST /* never use */ -} curl_lock_access; - -typedef void (*curl_lock_function)(CURL *handle, - curl_lock_data data, - curl_lock_access locktype, - void *userptr); -typedef void (*curl_unlock_function)(CURL *handle, - curl_lock_data data, - void *userptr); - - -typedef enum { - CURLSHE_OK, /* all is fine */ - CURLSHE_BAD_OPTION, /* 1 */ - CURLSHE_IN_USE, /* 2 */ - CURLSHE_INVALID, /* 3 */ - CURLSHE_NOMEM, /* 4 out of memory */ - CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ - CURLSHE_LAST /* never use */ -} CURLSHcode; - -typedef enum { - CURLSHOPT_NONE, /* don't use */ - CURLSHOPT_SHARE, /* specify a data type to share */ - CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ - CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ - CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ - CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock - callback functions */ - CURLSHOPT_LAST /* never use */ -} CURLSHoption; - -CURL_EXTERN CURLSH *curl_share_init(void); -CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); -CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); - -/**************************************************************************** - * Structures for querying information about the curl library at runtime. - */ - -typedef enum { - CURLVERSION_FIRST, - CURLVERSION_SECOND, - CURLVERSION_THIRD, - CURLVERSION_FOURTH, - CURLVERSION_FIFTH, - CURLVERSION_LAST /* never actually use this */ -} CURLversion; - -/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by - basically all programs ever that want to get version information. It is - meant to be a built-in version number for what kind of struct the caller - expects. If the struct ever changes, we redefine the NOW to another enum - from above. */ -#define CURLVERSION_NOW CURLVERSION_FIFTH - -typedef struct { - CURLversion age; /* age of the returned struct */ - const char *version; /* LIBCURL_VERSION */ - unsigned int version_num; /* LIBCURL_VERSION_NUM */ - const char *host; /* OS/host/cpu/machine when configured */ - int features; /* bitmask, see defines below */ - const char *ssl_version; /* human readable string */ - long ssl_version_num; /* not used anymore, always 0 */ - const char *libz_version; /* human readable string */ - /* protocols is terminated by an entry with a NULL protoname */ - const char * const *protocols; - - /* The fields below this were added in CURLVERSION_SECOND */ - const char *ares; - int ares_num; - - /* This field was added in CURLVERSION_THIRD */ - const char *libidn; - - /* These field were added in CURLVERSION_FOURTH */ - - /* Same as '_libiconv_version' if built with HAVE_ICONV */ - int iconv_ver_num; - - const char *libssh_version; /* human readable string */ - - /* These fields were added in CURLVERSION_FIFTH */ - - unsigned int brotli_ver_num; /* Numeric Brotli version - (MAJOR << 24) | (MINOR << 12) | PATCH */ - const char *brotli_version; /* human readable string. */ - -} curl_version_info_data; - -#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ -#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported - (deprecated) */ -#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ -#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ -#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ -#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported - (deprecated) */ -#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ -#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ -#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ -#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ -#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are - supported */ -#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ -#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ -#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ -#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ -#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper - is supported */ -#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ -#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ -#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ -#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ -#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used - for cookie domain verification */ -#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ -#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ -#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ -#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ - - /* - * NAME curl_version_info() - * - * DESCRIPTION - * - * This function returns a pointer to a static copy of the version info - * struct. See above. - */ -CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); - -/* - * NAME curl_easy_strerror() - * - * DESCRIPTION - * - * The curl_easy_strerror function may be used to turn a CURLcode value - * into the equivalent human readable error string. This is useful - * for printing meaningful error messages. - */ -CURL_EXTERN const char *curl_easy_strerror(CURLcode); - -/* - * NAME curl_share_strerror() - * - * DESCRIPTION - * - * The curl_share_strerror function may be used to turn a CURLSHcode value - * into the equivalent human readable error string. This is useful - * for printing meaningful error messages. - */ -CURL_EXTERN const char *curl_share_strerror(CURLSHcode); - -/* - * NAME curl_easy_pause() - * - * DESCRIPTION - * - * The curl_easy_pause function pauses or unpauses transfers. Select the new - * state by setting the bitmask, use the convenience defines below. - * - */ -CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); - -#define CURLPAUSE_RECV (1<<0) -#define CURLPAUSE_RECV_CONT (0) - -#define CURLPAUSE_SEND (1<<2) -#define CURLPAUSE_SEND_CONT (0) - -#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) -#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) - -#ifdef __cplusplus -} -#endif - -/* unfortunately, the easy.h and multi.h include files need options and info - stuff before they can be included! */ -#include "easy.h" /* nothing in curl is fun without the easy stuff */ -#include "multi.h" -#include "urlapi.h" - -/* the typechecker doesn't work in C++ (yet) */ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ - ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ - !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) -#include "typecheck-gcc.h" -#else -#if defined(__STDC__) && (__STDC__ >= 1) -/* This preprocessor magic that replaces a call with the exact same call is - only done to make sure application authors pass exactly three arguments - to these functions. */ -#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) -#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) -#endif /* __STDC__ >= 1 */ -#endif /* gcc >= 4.3 && !__cplusplus */ - -#endif /* __CURL_CURL_H */ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT = 5, + CURLSSLBACKEND_POLARSSL = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS = 10, /* never used since 7.63.0 */ + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE 524288 +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* used internally */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors*/ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback*/ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_CONV_FAILED, /* 75 - conversion failed */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code re-used in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes re-used in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /*!CURL_NO_OLDIES*/ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* added in 7.52.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now so + this causes a CURLE_DEFER error but otherwise the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key*/ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed from app */ + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /*!CURL_NO_OLDIES*/ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPT(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPT(CURLOPT_PUT, CURLOPTTYPE_LONG, 54), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPT(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through a HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be re-used + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPT(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPT(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPT(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* FTP option that changes the timeout, in seconds, associated with + getting a response. This is different from transfer timeout time and + essentially places a demand on the FTP server to acknowledge commands + in a timely manner. */ + CURLOPT(CURLOPT_FTP_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), +#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPT(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130), + CURLOPT(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPT(CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 142), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPT(CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 143), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPT(CURLOPT_CONV_FROM_UTF8_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 144), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID re-use for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_SERVICE, CURLOPTTYPE_STRINGPOINT, 179), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPT(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to a HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorisation identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* three convenient "aliases" that follow the name scheme better */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Makes use of explicit HTTP/3 without fallback. + Use CURLOPT_ALTSVC to enable HTTP/3 upgrade */ + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + CURLFORM_NOTHING, /********* the first one is unused ************/ + CURLFORM_COPYNAME, + CURLFORM_PTRNAME, + CURLFORM_NAMELENGTH, + CURLFORM_COPYCONTENTS, + CURLFORM_PTRCONTENTS, + CURLFORM_CONTENTSLENGTH, + CURLFORM_FILECONTENT, + CURLFORM_ARRAY, + CURLFORM_OBSOLETE, + CURLFORM_FILE, + + CURLFORM_BUFFER, + CURLFORM_BUFFERPTR, + CURLFORM_BUFFERLENGTH, + + CURLFORM_CONTENTTYPE, + CURLFORM_CONTENTHEADER, + CURLFORM_FILENAME, + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM, + CURLFORM_CONTENTLEN, /* added in 7.46.0, provide a curl_off_t length */ + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK, /* first, no error */ + + CURL_FORMADD_MEMORY, + CURL_FORMADD_OPTION_TWICE, + CURL_FORMADD_NULL, + CURL_FORMADD_UNKNOWN_OPTION, + CURL_FORMADD_INCOMPLETE, + CURL_FORMADD_ILLEGAL_ARRAY, + CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */ + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + * + * This function is not thread-safe! + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *, + const char *); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, only for OpenSSL, GnuTLS, Schannel, NSS + and GSKit builds. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information in the + format "name: value" */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + + CURLINFO_LASTONE = 60 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_TENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus */ + +#endif /* CURLINC_CURL_H */ diff --git a/src/curl/curlver.h b/include/curl/curlver.h old mode 100755 new mode 100644 similarity index 80% rename from src/curl/curlver.h rename to include/curl/curlver.h index 65515bd..14d168e --- a/src/curl/curlver.h +++ b/include/curl/curlver.h @@ -1,77 +1,77 @@ -#ifndef __CURL_CURLVER_H -#define __CURL_CURLVER_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* This header file contains nothing but libcurl version info, generated by - a script at release-time. This was made its own header file in 7.11.2 */ - -/* This is the global package copyright */ -#define LIBCURL_COPYRIGHT "1996 - 2019 Daniel Stenberg, ." - -/* This is the version number of the libcurl package from which this header - file origins: */ -#define LIBCURL_VERSION "7.65.2-DEV" - -/* The numeric version number is also available "in parts" by using these - defines: */ -#define LIBCURL_VERSION_MAJOR 7 -#define LIBCURL_VERSION_MINOR 65 -#define LIBCURL_VERSION_PATCH 2 - -/* This is the numeric version of the libcurl version number, meant for easier - parsing and comparions by programs. The LIBCURL_VERSION_NUM define will - always follow this syntax: - - 0xXXYYZZ - - Where XX, YY and ZZ are the main version, release and patch numbers in - hexadecimal (using 8 bits each). All three numbers are always represented - using two digits. 1.2 would appear as "0x010200" while version 9.11.7 - appears as "0x090b07". - - This 6-digit (24 bits) hexadecimal number does not show pre-release number, - and it is always a greater number in a more recent release. It makes - comparisons with greater than and less than work. - - Note: This define is the full hex number and _does not_ use the - CURL_VERSION_BITS() macro since curl's own configure script greps for it - and needs it to contain the full number. -*/ -#define LIBCURL_VERSION_NUM 0x074102 - -/* - * This is the date and time when the full source package was created. The - * timestamp is not stored in git, as the timestamp is properly set in the - * tarballs by the maketgz script. - * - * The format of the date follows this template: - * - * "2007-11-23" - */ -#define LIBCURL_TIMESTAMP "[unreleased]" - -#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) -#define CURL_AT_LEAST_VERSION(x,y,z) \ - (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) - -#endif /* __CURL_CURLVER_H */ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "1996 - 2022 Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "7.82.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 7 +#define LIBCURL_VERSION_MINOR 82 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x075200 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2022-03-05" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/src/curl/easy.h b/include/curl/easy.h old mode 100755 new mode 100644 similarity index 87% rename from src/curl/easy.h rename to include/curl/easy.h index 69afde1..2dbfb26 --- a/src/curl/easy.h +++ b/include/curl/easy.h @@ -1,112 +1,123 @@ -#ifndef __CURL_EASY_H -#define __CURL_EASY_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -#ifdef __cplusplus -extern "C" { -#endif - -CURL_EXTERN CURL *curl_easy_init(void); -CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); -CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); -CURL_EXTERN void curl_easy_cleanup(CURL *curl); - -/* - * NAME curl_easy_getinfo() - * - * DESCRIPTION - * - * Request internal information from the curl session with this function. The - * third argument MUST be a pointer to a long, a pointer to a char * or a - * pointer to a double (as the documentation describes elsewhere). The data - * pointed to will be filled in accordingly and can be relied upon only if the - * function returns CURLE_OK. This function is intended to get used *AFTER* a - * performed transfer, all results from this function are undefined until the - * transfer is completed. - */ -CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); - - -/* - * NAME curl_easy_duphandle() - * - * DESCRIPTION - * - * Creates a new curl session handle with the same options set for the handle - * passed in. Duplicating a handle could only be a matter of cloning data and - * options, internal state info and things like persistent connections cannot - * be transferred. It is useful in multithreaded applications when you can run - * curl_easy_duphandle() for each new thread to avoid a series of identical - * curl_easy_setopt() invokes in every thread. - */ -CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); - -/* - * NAME curl_easy_reset() - * - * DESCRIPTION - * - * Re-initializes a CURL handle to the default values. This puts back the - * handle to the same state as it was in when it was just created. - * - * It does keep: live connections, the Session ID cache, the DNS cache and the - * cookies. - */ -CURL_EXTERN void curl_easy_reset(CURL *curl); - -/* - * NAME curl_easy_recv() - * - * DESCRIPTION - * - * Receives data from the connected socket. Use after successful - * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. - */ -CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, - size_t *n); - -/* - * NAME curl_easy_send() - * - * DESCRIPTION - * - * Sends data over the connected socket. Use after successful - * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. - */ -CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, - size_t buflen, size_t *n); - - -/* - * NAME curl_easy_upkeep() - * - * DESCRIPTION - * - * Performs connection upkeep for the given session handle. - */ -CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); - -#ifdef __cplusplus -} -#endif - -#endif +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. The + * third argument MUST be a pointer to a long, a pointer to a char * or a + * pointer to a double (as the documentation describes elsewhere). The data + * pointed to will be filled in accordingly and can be relied upon only if the + * function returns CURLE_OK. This function is intended to get used *AFTER* a + * performed transfer, all results from this function are undefined until the + * transfer is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/curl/mprintf.h b/include/curl/mprintf.h old mode 100755 new mode 100644 similarity index 87% rename from src/curl/mprintf.h rename to include/curl/mprintf.h index f7e8684..3549552 --- a/src/curl/mprintf.h +++ b/include/curl/mprintf.h @@ -1,50 +1,50 @@ -#ifndef __CURL_MPRINTF_H -#define __CURL_MPRINTF_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include -#include /* needed for FILE */ -#include "curl.h" /* for CURL_EXTERN */ - -#ifdef __cplusplus -extern "C" { -#endif - -CURL_EXTERN int curl_mprintf(const char *format, ...); -CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); -CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); -CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, - const char *format, ...); -CURL_EXTERN int curl_mvprintf(const char *format, va_list args); -CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); -CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); -CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, - const char *format, va_list args); -CURL_EXTERN char *curl_maprintf(const char *format, ...); -CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); - -#ifdef __cplusplus -} -#endif - -#endif /* __CURL_MPRINTF_H */ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args); +CURL_EXTERN char *curl_maprintf(const char *format, ...); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/src/curl/multi.h b/include/curl/multi.h old mode 100755 new mode 100644 similarity index 84% rename from src/curl/multi.h rename to include/curl/multi.h index 5b27a20..91cd95d --- a/src/curl/multi.h +++ b/include/curl/multi.h @@ -1,441 +1,457 @@ -#ifndef __CURL_MULTI_H -#define __CURL_MULTI_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -/* - This is an "external" header file. Don't give away any internals here! - - GOALS - - o Enable a "pull" interface. The application that uses libcurl decides where - and when to ask libcurl to get/send data. - - o Enable multiple simultaneous transfers in the same thread without making it - complicated for the application. - - o Enable the application to select() on its own file descriptors and curl's - file descriptors simultaneous easily. - -*/ - -/* - * This header file should not really need to include "curl.h" since curl.h - * itself includes this file and we expect user applications to do #include - * without the need for especially including multi.h. - * - * For some reason we added this include here at one point, and rather than to - * break existing (wrongly written) libcurl applications, we leave it as-is - * but with this warning attached. - */ -#include "curl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) -typedef struct Curl_multi CURLM; -#else -typedef void CURLM; -#endif - -typedef enum { - CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or - curl_multi_socket*() soon */ - CURLM_OK, - CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ - CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ - CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ - CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ - CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ - CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ - CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was - attempted to get added - again */ - CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a - callback */ - CURLM_LAST -} CURLMcode; - -/* just to make code nicer when using curl_multi_socket() you can now check - for CURLM_CALL_MULTI_SOCKET too in the same style it works for - curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ -#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM - -/* bitmask bits for CURLMOPT_PIPELINING */ -#define CURLPIPE_NOTHING 0L -#define CURLPIPE_HTTP1 1L -#define CURLPIPE_MULTIPLEX 2L - -typedef enum { - CURLMSG_NONE, /* first, not used */ - CURLMSG_DONE, /* This easy handle has completed. 'result' contains - the CURLcode of the transfer */ - CURLMSG_LAST /* last, not used */ -} CURLMSG; - -struct CURLMsg { - CURLMSG msg; /* what this message means */ - CURL *easy_handle; /* the handle it concerns */ - union { - void *whatever; /* message-specific data */ - CURLcode result; /* return code for transfer */ - } data; -}; -typedef struct CURLMsg CURLMsg; - -/* Based on poll(2) structure and values. - * We don't use pollfd and POLL* constants explicitly - * to cover platforms without poll(). */ -#define CURL_WAIT_POLLIN 0x0001 -#define CURL_WAIT_POLLPRI 0x0002 -#define CURL_WAIT_POLLOUT 0x0004 - -struct curl_waitfd { - curl_socket_t fd; - short events; - short revents; /* not supported yet */ -}; - -/* - * Name: curl_multi_init() - * - * Desc: inititalize multi-style curl usage - * - * Returns: a new CURLM handle to use in all 'curl_multi' functions. - */ -CURL_EXTERN CURLM *curl_multi_init(void); - -/* - * Name: curl_multi_add_handle() - * - * Desc: add a standard curl handle to the multi stack - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, - CURL *curl_handle); - - /* - * Name: curl_multi_remove_handle() - * - * Desc: removes a curl handle from the multi stack again - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, - CURL *curl_handle); - - /* - * Name: curl_multi_fdset() - * - * Desc: Ask curl for its fd_set sets. The app can use these to select() or - * poll() on. We want curl_multi_perform() called as soon as one of - * them are ready. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, - fd_set *read_fd_set, - fd_set *write_fd_set, - fd_set *exc_fd_set, - int *max_fd); - -/* - * Name: curl_multi_wait() - * - * Desc: Poll on all fds within a CURLM set as well as any - * additional fds passed to the function. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, - struct curl_waitfd extra_fds[], - unsigned int extra_nfds, - int timeout_ms, - int *ret); - - /* - * Name: curl_multi_perform() - * - * Desc: When the app thinks there's data available for curl it calls this - * function to read/write whatever there is right now. This returns - * as soon as the reads and writes are done. This function does not - * require that there actually is data available for reading or that - * data can be written, it can be called just in case. It returns - * the number of handles that still transfer data in the second - * argument's integer-pointer. - * - * Returns: CURLMcode type, general multi error code. *NOTE* that this only - * returns errors etc regarding the whole multi stack. There might - * still have occurred problems on individual transfers even when - * this returns OK. - */ -CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, - int *running_handles); - - /* - * Name: curl_multi_cleanup() - * - * Desc: Cleans up and removes a whole multi stack. It does not free or - * touch any individual easy handles in any way. We need to define - * in what state those handles will be if this function is called - * in the middle of a transfer. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); - -/* - * Name: curl_multi_info_read() - * - * Desc: Ask the multi handle if there's any messages/informationals from - * the individual transfers. Messages include informationals such as - * error code from the transfer or just the fact that a transfer is - * completed. More details on these should be written down as well. - * - * Repeated calls to this function will return a new struct each - * time, until a special "end of msgs" struct is returned as a signal - * that there is no more to get at this point. - * - * The data the returned pointer points to will not survive calling - * curl_multi_cleanup(). - * - * The 'CURLMsg' struct is meant to be very simple and only contain - * very basic information. If more involved information is wanted, - * we will provide the particular "transfer handle" in that struct - * and that should/could/would be used in subsequent - * curl_easy_getinfo() calls (or similar). The point being that we - * must never expose complex structs to applications, as then we'll - * undoubtably get backwards compatibility problems in the future. - * - * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out - * of structs. It also writes the number of messages left in the - * queue (after this read) in the integer the second argument points - * to. - */ -CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, - int *msgs_in_queue); - -/* - * Name: curl_multi_strerror() - * - * Desc: The curl_multi_strerror function may be used to turn a CURLMcode - * value into the equivalent human readable error string. This is - * useful for printing meaningful error messages. - * - * Returns: A pointer to a zero-terminated error message. - */ -CURL_EXTERN const char *curl_multi_strerror(CURLMcode); - -/* - * Name: curl_multi_socket() and - * curl_multi_socket_all() - * - * Desc: An alternative version of curl_multi_perform() that allows the - * application to pass in one of the file descriptors that have been - * detected to have "action" on them and let libcurl perform. - * See man page for details. - */ -#define CURL_POLL_NONE 0 -#define CURL_POLL_IN 1 -#define CURL_POLL_OUT 2 -#define CURL_POLL_INOUT 3 -#define CURL_POLL_REMOVE 4 - -#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD - -#define CURL_CSELECT_IN 0x01 -#define CURL_CSELECT_OUT 0x02 -#define CURL_CSELECT_ERR 0x04 - -typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ - curl_socket_t s, /* socket */ - int what, /* see above */ - void *userp, /* private callback - pointer */ - void *socketp); /* private socket - pointer */ -/* - * Name: curl_multi_timer_callback - * - * Desc: Called by libcurl whenever the library detects a change in the - * maximum number of milliseconds the app is allowed to wait before - * curl_multi_socket() or curl_multi_perform() must be called - * (to allow libcurl's timed events to take place). - * - * Returns: The callback should return zero. - */ -typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ - long timeout_ms, /* see above */ - void *userp); /* private callback - pointer */ - -CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, - int *running_handles); - -CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, - curl_socket_t s, - int ev_bitmask, - int *running_handles); - -CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, - int *running_handles); - -#ifndef CURL_ALLOW_OLD_MULTI_SOCKET -/* This macro below was added in 7.16.3 to push users who recompile to use - the new curl_multi_socket_action() instead of the old curl_multi_socket() -*/ -#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) -#endif - -/* - * Name: curl_multi_timeout() - * - * Desc: Returns the maximum number of milliseconds the app is allowed to - * wait before curl_multi_socket() or curl_multi_perform() must be - * called (to allow libcurl's timed events to take place). - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, - long *milliseconds); - -#undef CINIT /* re-using the same name as in curl.h */ - -#ifdef CURL_ISOCPP -#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num -#else -/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */ -#define LONG CURLOPTTYPE_LONG -#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT -#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT -#define OFF_T CURLOPTTYPE_OFF_T -#define CINIT(name,type,number) CURLMOPT_/**/name = type + number -#endif - -typedef enum { - /* This is the socket callback function pointer */ - CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1), - - /* This is the argument passed to the socket callback */ - CINIT(SOCKETDATA, OBJECTPOINT, 2), - - /* set to 1 to enable pipelining for this multi handle */ - CINIT(PIPELINING, LONG, 3), - - /* This is the timer callback function pointer */ - CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4), - - /* This is the argument passed to the timer callback */ - CINIT(TIMERDATA, OBJECTPOINT, 5), - - /* maximum number of entries in the connection cache */ - CINIT(MAXCONNECTS, LONG, 6), - - /* maximum number of (pipelining) connections to one host */ - CINIT(MAX_HOST_CONNECTIONS, LONG, 7), - - /* maximum number of requests in a pipeline */ - CINIT(MAX_PIPELINE_LENGTH, LONG, 8), - - /* a connection with a content-length longer than this - will not be considered for pipelining */ - CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9), - - /* a connection with a chunk length longer than this - will not be considered for pipelining */ - CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10), - - /* a list of site names(+port) that are blacklisted from - pipelining */ - CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11), - - /* a list of server types that are blacklisted from - pipelining */ - CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12), - - /* maximum number of open connections in total */ - CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13), - - /* This is the server push callback function pointer */ - CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14), - - /* This is the argument passed to the server push callback */ - CINIT(PUSHDATA, OBJECTPOINT, 15), - - CURLMOPT_LASTENTRY /* the last unused */ -} CURLMoption; - - -/* - * Name: curl_multi_setopt() - * - * Desc: Sets options for the multi handle. - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, - CURLMoption option, ...); - - -/* - * Name: curl_multi_assign() - * - * Desc: This function sets an association in the multi handle between the - * given socket and a private pointer of the application. This is - * (only) useful for curl_multi_socket uses. - * - * Returns: CURLM error code. - */ -CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, - curl_socket_t sockfd, void *sockp); - - -/* - * Name: curl_push_callback - * - * Desc: This callback gets called when a new stream is being pushed by the - * server. It approves or denies the new stream. - * - * Returns: CURL_PUSH_OK or CURL_PUSH_DENY. - */ -#define CURL_PUSH_OK 0 -#define CURL_PUSH_DENY 1 - -struct curl_pushheaders; /* forward declaration only */ - -CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, - size_t num); -CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, - const char *name); - -typedef int (*curl_push_callback)(CURL *parent, - CURL *easy, - size_t num_headers, - struct curl_pushheaders *headers, - void *userp); - -#ifdef __cplusplus -} /* end of extern "C" */ -#endif - -#endif +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; /* not supported yet */ +}; + +/* + * Name: curl_multi_init() + * + * Desc: inititalize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle, + int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/include/curl/options.h b/include/curl/options.h new file mode 100644 index 0000000..14373b5 --- /dev/null +++ b/include/curl/options.h @@ -0,0 +1,68 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 2018 - 2020, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to zero terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id (CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/src/curl/stdcheaders.h b/include/curl/stdcheaders.h old mode 100755 new mode 100644 similarity index 82% rename from src/curl/stdcheaders.h rename to include/curl/stdcheaders.h index 6fd7963..60596c7 --- a/src/curl/stdcheaders.h +++ b/include/curl/stdcheaders.h @@ -1,33 +1,33 @@ -#ifndef __STDC_HEADERS_H -#define __STDC_HEADERS_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include - -size_t fread(void *, size_t, size_t, FILE *); -size_t fwrite(const void *, size_t, size_t, FILE *); - -int strcasecmp(const char *, const char *); -int strncasecmp(const char *, const char *, size_t); - -#endif /* __STDC_HEADERS_H */ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/src/curl/system.h b/include/curl/system.h old mode 100755 new mode 100644 similarity index 89% rename from src/curl/system.h rename to include/curl/system.h index 047710a..038ac0b --- a/src/curl/system.h +++ b/include/curl/system.h @@ -1,493 +1,488 @@ -#ifndef __CURL_SYSTEM_H -#define __CURL_SYSTEM_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2017, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* - * Try to keep one section per platform, compiler and architecture, otherwise, - * if an existing section is reused for a different one and later on the - * original is adjusted, probably the piggybacking one can be adversely - * changed. - * - * In order to differentiate between platforms/compilers/architectures use - * only compiler built in predefined preprocessor symbols. - * - * curl_off_t - * ---------- - * - * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit - * wide signed integral data type. The width of this data type must remain - * constant and independent of any possible large file support settings. - * - * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit - * wide signed integral data type if there is no 64-bit type. - * - * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall - * only be violated if off_t is the only 64-bit data type available and the - * size of off_t is independent of large file support settings. Keep your - * build on the safe side avoiding an off_t gating. If you have a 64-bit - * off_t then take for sure that another 64-bit data type exists, dig deeper - * and you will find it. - * - */ - -#if defined(__DJGPP__) || defined(__GO32__) -# if defined(__DJGPP__) && (__DJGPP__ > 1) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__SALFORDC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__BORLANDC__) -# if (__BORLANDC__ < 0x520) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__TURBOC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__WATCOMC__) -# if defined(__386__) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__POCC__) -# if (__POCC__ < 280) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# elif defined(_MSC_VER) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__LCC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__SYMBIAN32__) -# if defined(__EABI__) /* Treat all ARM compilers equally */ -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__CW32__) -# pragma longlong on -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__VC32__) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int - -#elif defined(__MWERKS__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(_WIN32_WCE) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__MINGW32__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_WS2TCPIP_H 1 - -#elif defined(__VMS) -# if defined(__VAX) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int - -#elif defined(__OS400__) -# if defined(__ILEC400__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(__MVS__) -# if defined(__IBMC__) || defined(__IBMCPP__) -# if defined(_ILP32) -# elif defined(_LP64) -# endif -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(__370__) -# if defined(__IBMC__) || defined(__IBMCPP__) -# if defined(_ILP32) -# elif defined(_LP64) -# endif -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif - -#elif defined(TPF) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -#elif defined(__TINYC__) /* also known as tcc */ - -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ -# if !defined(__LP64) && (defined(__ILP32) || \ - defined(__i386) || \ - defined(__sparcv8) || \ - defined(__sparcv8plus)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64) || \ - defined(__amd64) || defined(__sparcv9) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -#elif defined(__xlc__) /* IBM xlc compiler */ -# if !defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -/* ===================================== */ -/* KEEP MSVC THE PENULTIMATE ENTRY */ -/* ===================================== */ - -#elif defined(_MSC_VER) -# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int - -/* ===================================== */ -/* KEEP GENERIC GCC THE LAST ENTRY */ -/* ===================================== */ - -#elif defined(__GNUC__) && !defined(_SCO_DS) -# if !defined(__LP64__) && \ - (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ - defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ - defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ - defined(__XTENSA__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64__) || \ - defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 - -#else -/* generic "safe guess" on old 32 bit style */ -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int -#endif - -#ifdef _AIX -/* AIX needs */ -#define CURL_PULL_SYS_POLL_H -#endif - - -/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ -/* ws2tcpip.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_WS2TCPIP_H -# include -# include -# include -#endif - -/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ -/* sys/types.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_TYPES_H -# include -#endif - -/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ -/* sys/socket.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_SOCKET_H -# include -#endif - -/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ -/* sys/poll.h is required here to properly make type definitions below. */ -#ifdef CURL_PULL_SYS_POLL_H -# include -#endif - -/* Data type definition of curl_socklen_t. */ -#ifdef CURL_TYPEOF_CURL_SOCKLEN_T - typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; -#endif - -/* Data type definition of curl_off_t. */ - -#ifdef CURL_TYPEOF_CURL_OFF_T - typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; -#endif - -/* - * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow - * these to be visible and exported by the external libcurl interface API, - * while also making them visible to the library internals, simply including - * curl_setup.h, without actually needing to include curl.h internally. - * If some day this section would grow big enough, all this should be moved - * to its own header file. - */ - -/* - * Figure out if we can use the ## preprocessor operator, which is supported - * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ - * or __cplusplus so we need to carefully check for them too. - */ - -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ - defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ - defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ - defined(__ILEC400__) - /* This compiler is believed to have an ISO compatible preprocessor */ -#define CURL_ISOCPP -#else - /* This compiler is believed NOT to have an ISO compatible preprocessor */ -#undef CURL_ISOCPP -#endif - -/* - * Macros for minimum-width signed and unsigned curl_off_t integer constants. - */ - -#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) -# define __CURL_OFF_T_C_HLPR2(x) x -# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x) -# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \ - __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \ - __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) -#else -# ifdef CURL_ISOCPP -# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix -# else -# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix -# endif -# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix) -# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) -#endif - -#endif /* __CURL_SYSTEM_H */ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__e2k__) /* MCST eLbrus C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__MWERKS__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# if defined(__ILEC400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(__MVS__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/src/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h old mode 100755 new mode 100644 similarity index 54% rename from src/curl/typecheck-gcc.h rename to include/curl/typecheck-gcc.h index ff6310f..9e14d8a --- a/src/curl/typecheck-gcc.h +++ b/include/curl/typecheck-gcc.h @@ -1,698 +1,707 @@ -#ifndef __CURL_TYPECHECK_GCC_H -#define __CURL_TYPECHECK_GCC_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2019, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* wraps curl_easy_setopt() with typechecking */ - -/* To add a new kind of warning, add an - * if(_curl_is_sometype_option(_curl_opt)) - * if(!_curl_is_sometype(value)) - * _curl_easy_setopt_err_sometype(); - * block and define _curl_is_sometype_option, _curl_is_sometype and - * _curl_easy_setopt_err_sometype below - * - * NOTE: We use two nested 'if' statements here instead of the && operator, in - * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x - * when compiling with -Wlogical-op. - * - * To add an option that uses the same type as an existing option, you'll just - * need to extend the appropriate _curl_*_option macro - */ -#define curl_easy_setopt(handle, option, value) \ -__extension__ ({ \ - __typeof__(option) _curl_opt = option; \ - if(__builtin_constant_p(_curl_opt)) { \ - if(_curl_is_long_option(_curl_opt)) \ - if(!_curl_is_long(value)) \ - _curl_easy_setopt_err_long(); \ - if(_curl_is_off_t_option(_curl_opt)) \ - if(!_curl_is_off_t(value)) \ - _curl_easy_setopt_err_curl_off_t(); \ - if(_curl_is_string_option(_curl_opt)) \ - if(!_curl_is_string(value)) \ - _curl_easy_setopt_err_string(); \ - if(_curl_is_write_cb_option(_curl_opt)) \ - if(!_curl_is_write_cb(value)) \ - _curl_easy_setopt_err_write_callback(); \ - if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ - if(!_curl_is_resolver_start_callback(value)) \ - _curl_easy_setopt_err_resolver_start_callback(); \ - if((_curl_opt) == CURLOPT_READFUNCTION) \ - if(!_curl_is_read_cb(value)) \ - _curl_easy_setopt_err_read_cb(); \ - if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ - if(!_curl_is_ioctl_cb(value)) \ - _curl_easy_setopt_err_ioctl_cb(); \ - if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ - if(!_curl_is_sockopt_cb(value)) \ - _curl_easy_setopt_err_sockopt_cb(); \ - if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ - if(!_curl_is_opensocket_cb(value)) \ - _curl_easy_setopt_err_opensocket_cb(); \ - if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ - if(!_curl_is_progress_cb(value)) \ - _curl_easy_setopt_err_progress_cb(); \ - if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ - if(!_curl_is_debug_cb(value)) \ - _curl_easy_setopt_err_debug_cb(); \ - if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ - if(!_curl_is_ssl_ctx_cb(value)) \ - _curl_easy_setopt_err_ssl_ctx_cb(); \ - if(_curl_is_conv_cb_option(_curl_opt)) \ - if(!_curl_is_conv_cb(value)) \ - _curl_easy_setopt_err_conv_cb(); \ - if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ - if(!_curl_is_seek_cb(value)) \ - _curl_easy_setopt_err_seek_cb(); \ - if(_curl_is_cb_data_option(_curl_opt)) \ - if(!_curl_is_cb_data(value)) \ - _curl_easy_setopt_err_cb_data(); \ - if((_curl_opt) == CURLOPT_ERRORBUFFER) \ - if(!_curl_is_error_buffer(value)) \ - _curl_easy_setopt_err_error_buffer(); \ - if((_curl_opt) == CURLOPT_STDERR) \ - if(!_curl_is_FILE(value)) \ - _curl_easy_setopt_err_FILE(); \ - if(_curl_is_postfields_option(_curl_opt)) \ - if(!_curl_is_postfields(value)) \ - _curl_easy_setopt_err_postfields(); \ - if((_curl_opt) == CURLOPT_HTTPPOST) \ - if(!_curl_is_arr((value), struct curl_httppost)) \ - _curl_easy_setopt_err_curl_httpost(); \ - if((_curl_opt) == CURLOPT_MIMEPOST) \ - if(!_curl_is_ptr((value), curl_mime)) \ - _curl_easy_setopt_err_curl_mimepost(); \ - if(_curl_is_slist_option(_curl_opt)) \ - if(!_curl_is_arr((value), struct curl_slist)) \ - _curl_easy_setopt_err_curl_slist(); \ - if((_curl_opt) == CURLOPT_SHARE) \ - if(!_curl_is_ptr((value), CURLSH)) \ - _curl_easy_setopt_err_CURLSH(); \ - } \ - curl_easy_setopt(handle, _curl_opt, value); \ -}) - -/* wraps curl_easy_getinfo() with typechecking */ -#define curl_easy_getinfo(handle, info, arg) \ -__extension__ ({ \ - __typeof__(info) _curl_info = info; \ - if(__builtin_constant_p(_curl_info)) { \ - if(_curl_is_string_info(_curl_info)) \ - if(!_curl_is_arr((arg), char *)) \ - _curl_easy_getinfo_err_string(); \ - if(_curl_is_long_info(_curl_info)) \ - if(!_curl_is_arr((arg), long)) \ - _curl_easy_getinfo_err_long(); \ - if(_curl_is_double_info(_curl_info)) \ - if(!_curl_is_arr((arg), double)) \ - _curl_easy_getinfo_err_double(); \ - if(_curl_is_slist_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_slist *)) \ - _curl_easy_getinfo_err_curl_slist(); \ - if(_curl_is_tlssessioninfo_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_tlssessioninfo *)) \ - _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ - if(_curl_is_certinfo_info(_curl_info)) \ - if(!_curl_is_arr((arg), struct curl_certinfo *)) \ - _curl_easy_getinfo_err_curl_certinfo(); \ - if(_curl_is_socket_info(_curl_info)) \ - if(!_curl_is_arr((arg), curl_socket_t)) \ - _curl_easy_getinfo_err_curl_socket(); \ - if(_curl_is_off_t_info(_curl_info)) \ - if(!_curl_is_arr((arg), curl_off_t)) \ - _curl_easy_getinfo_err_curl_off_t(); \ - } \ - curl_easy_getinfo(handle, _curl_info, arg); \ -}) - -/* - * For now, just make sure that the functions are called with three arguments - */ -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) - - -/* the actual warnings, triggered by calling the _curl_easy_setopt_err* - * functions */ - -/* To define a new warning, use _CURL_WARNING(identifier, "message") */ -#define _CURL_WARNING(id, message) \ - static void __attribute__((__warning__(message))) \ - __attribute__((__unused__)) __attribute__((__noinline__)) \ - id(void) { __asm__(""); } - -_CURL_WARNING(_curl_easy_setopt_err_long, - "curl_easy_setopt expects a long argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_off_t, - "curl_easy_setopt expects a curl_off_t argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_string, - "curl_easy_setopt expects a " - "string ('char *' or char[]) argument for this option" - ) -_CURL_WARNING(_curl_easy_setopt_err_write_callback, - "curl_easy_setopt expects a curl_write_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_resolver_start_callback, - "curl_easy_setopt expects a " - "curl_resolver_start_callback argument for this option" - ) -_CURL_WARNING(_curl_easy_setopt_err_read_cb, - "curl_easy_setopt expects a curl_read_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb, - "curl_easy_setopt expects a curl_ioctl_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb, - "curl_easy_setopt expects a curl_sockopt_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb, - "curl_easy_setopt expects a " - "curl_opensocket_callback argument for this option" - ) -_CURL_WARNING(_curl_easy_setopt_err_progress_cb, - "curl_easy_setopt expects a curl_progress_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_debug_cb, - "curl_easy_setopt expects a curl_debug_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb, - "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_conv_cb, - "curl_easy_setopt expects a curl_conv_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_seek_cb, - "curl_easy_setopt expects a curl_seek_callback argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_cb_data, - "curl_easy_setopt expects a " - "private data pointer as argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_error_buffer, - "curl_easy_setopt expects a " - "char buffer of CURL_ERROR_SIZE as argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_FILE, - "curl_easy_setopt expects a 'FILE *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_postfields, - "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_httpost, - "curl_easy_setopt expects a 'struct curl_httppost *' " - "argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_mimepost, - "curl_easy_setopt expects a 'curl_mime *' " - "argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_curl_slist, - "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") -_CURL_WARNING(_curl_easy_setopt_err_CURLSH, - "curl_easy_setopt expects a CURLSH* argument for this option") - -_CURL_WARNING(_curl_easy_getinfo_err_string, - "curl_easy_getinfo expects a pointer to 'char *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_long, - "curl_easy_getinfo expects a pointer to long for this info") -_CURL_WARNING(_curl_easy_getinfo_err_double, - "curl_easy_getinfo expects a pointer to double for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_slist, - "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_tlssessioninfo *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_certinfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_certinfo *' for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_socket, - "curl_easy_getinfo expects a pointer to curl_socket_t for this info") -_CURL_WARNING(_curl_easy_getinfo_err_curl_off_t, - "curl_easy_getinfo expects a pointer to curl_off_t for this info") - -/* groups of curl_easy_setops options that take the same type of argument */ - -/* To add a new option to one of the groups, just add - * (option) == CURLOPT_SOMETHING - * to the or-expression. If the option takes a long or curl_off_t, you don't - * have to do anything - */ - -/* evaluates to true if option takes a long argument */ -#define _curl_is_long_option(option) \ - (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) - -#define _curl_is_off_t_option(option) \ - ((option) > CURLOPTTYPE_OFF_T) - -/* evaluates to true if option takes a char* argument */ -#define _curl_is_string_option(option) \ - ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ - (option) == CURLOPT_ACCEPT_ENCODING || \ - (option) == CURLOPT_ALTSVC || \ - (option) == CURLOPT_CAINFO || \ - (option) == CURLOPT_CAPATH || \ - (option) == CURLOPT_COOKIE || \ - (option) == CURLOPT_COOKIEFILE || \ - (option) == CURLOPT_COOKIEJAR || \ - (option) == CURLOPT_COOKIELIST || \ - (option) == CURLOPT_CRLFILE || \ - (option) == CURLOPT_CUSTOMREQUEST || \ - (option) == CURLOPT_DEFAULT_PROTOCOL || \ - (option) == CURLOPT_DNS_INTERFACE || \ - (option) == CURLOPT_DNS_LOCAL_IP4 || \ - (option) == CURLOPT_DNS_LOCAL_IP6 || \ - (option) == CURLOPT_DNS_SERVERS || \ - (option) == CURLOPT_DOH_URL || \ - (option) == CURLOPT_EGDSOCKET || \ - (option) == CURLOPT_FTPPORT || \ - (option) == CURLOPT_FTP_ACCOUNT || \ - (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ - (option) == CURLOPT_INTERFACE || \ - (option) == CURLOPT_ISSUERCERT || \ - (option) == CURLOPT_KEYPASSWD || \ - (option) == CURLOPT_KRBLEVEL || \ - (option) == CURLOPT_LOGIN_OPTIONS || \ - (option) == CURLOPT_MAIL_AUTH || \ - (option) == CURLOPT_MAIL_FROM || \ - (option) == CURLOPT_NETRC_FILE || \ - (option) == CURLOPT_NOPROXY || \ - (option) == CURLOPT_PASSWORD || \ - (option) == CURLOPT_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PRE_PROXY || \ - (option) == CURLOPT_PROXY || \ - (option) == CURLOPT_PROXYPASSWORD || \ - (option) == CURLOPT_PROXYUSERNAME || \ - (option) == CURLOPT_PROXYUSERPWD || \ - (option) == CURLOPT_PROXY_CAINFO || \ - (option) == CURLOPT_PROXY_CAPATH || \ - (option) == CURLOPT_PROXY_CRLFILE || \ - (option) == CURLOPT_PROXY_KEYPASSWD || \ - (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PROXY_SERVICE_NAME || \ - (option) == CURLOPT_PROXY_SSLCERT || \ - (option) == CURLOPT_PROXY_SSLCERTTYPE || \ - (option) == CURLOPT_PROXY_SSLKEY || \ - (option) == CURLOPT_PROXY_SSLKEYTYPE || \ - (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ - (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ - (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ - (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ - (option) == CURLOPT_RANDOM_FILE || \ - (option) == CURLOPT_RANGE || \ - (option) == CURLOPT_REFERER || \ - (option) == CURLOPT_REQUEST_TARGET || \ - (option) == CURLOPT_RTSP_SESSION_ID || \ - (option) == CURLOPT_RTSP_STREAM_URI || \ - (option) == CURLOPT_RTSP_TRANSPORT || \ - (option) == CURLOPT_SERVICE_NAME || \ - (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ - (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ - (option) == CURLOPT_SSH_KNOWNHOSTS || \ - (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ - (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ - (option) == CURLOPT_SSLCERT || \ - (option) == CURLOPT_SSLCERTTYPE || \ - (option) == CURLOPT_SSLENGINE || \ - (option) == CURLOPT_SSLKEY || \ - (option) == CURLOPT_SSLKEYTYPE || \ - (option) == CURLOPT_SSL_CIPHER_LIST || \ - (option) == CURLOPT_TLS13_CIPHERS || \ - (option) == CURLOPT_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_TLSAUTH_TYPE || \ - (option) == CURLOPT_TLSAUTH_USERNAME || \ - (option) == CURLOPT_UNIX_SOCKET_PATH || \ - (option) == CURLOPT_URL || \ - (option) == CURLOPT_USERAGENT || \ - (option) == CURLOPT_USERNAME || \ - (option) == CURLOPT_USERPWD || \ - (option) == CURLOPT_XOAUTH2_BEARER || \ - 0) - -/* evaluates to true if option takes a curl_write_callback argument */ -#define _curl_is_write_cb_option(option) \ - ((option) == CURLOPT_HEADERFUNCTION || \ - (option) == CURLOPT_WRITEFUNCTION) - -/* evaluates to true if option takes a curl_conv_callback argument */ -#define _curl_is_conv_cb_option(option) \ - ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ - (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ - (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) - -/* evaluates to true if option takes a data argument to pass to a callback */ -#define _curl_is_cb_data_option(option) \ - ((option) == CURLOPT_CHUNK_DATA || \ - (option) == CURLOPT_CLOSESOCKETDATA || \ - (option) == CURLOPT_DEBUGDATA || \ - (option) == CURLOPT_FNMATCH_DATA || \ - (option) == CURLOPT_HEADERDATA || \ - (option) == CURLOPT_INTERLEAVEDATA || \ - (option) == CURLOPT_IOCTLDATA || \ - (option) == CURLOPT_OPENSOCKETDATA || \ - (option) == CURLOPT_PRIVATE || \ - (option) == CURLOPT_PROGRESSDATA || \ - (option) == CURLOPT_READDATA || \ - (option) == CURLOPT_SEEKDATA || \ - (option) == CURLOPT_SOCKOPTDATA || \ - (option) == CURLOPT_SSH_KEYDATA || \ - (option) == CURLOPT_SSL_CTX_DATA || \ - (option) == CURLOPT_WRITEDATA || \ - (option) == CURLOPT_RESOLVER_START_DATA || \ - (option) == CURLOPT_TRAILERDATA || \ - 0) - -/* evaluates to true if option takes a POST data argument (void* or char*) */ -#define _curl_is_postfields_option(option) \ - ((option) == CURLOPT_POSTFIELDS || \ - (option) == CURLOPT_COPYPOSTFIELDS || \ - 0) - -/* evaluates to true if option takes a struct curl_slist * argument */ -#define _curl_is_slist_option(option) \ - ((option) == CURLOPT_HTTP200ALIASES || \ - (option) == CURLOPT_HTTPHEADER || \ - (option) == CURLOPT_MAIL_RCPT || \ - (option) == CURLOPT_POSTQUOTE || \ - (option) == CURLOPT_PREQUOTE || \ - (option) == CURLOPT_PROXYHEADER || \ - (option) == CURLOPT_QUOTE || \ - (option) == CURLOPT_RESOLVE || \ - (option) == CURLOPT_TELNETOPTIONS || \ - (option) == CURLOPT_CONNECT_TO || \ - 0) - -/* groups of curl_easy_getinfo infos that take the same type of argument */ - -/* evaluates to true if info expects a pointer to char * argument */ -#define _curl_is_string_info(info) \ - (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG) - -/* evaluates to true if info expects a pointer to long argument */ -#define _curl_is_long_info(info) \ - (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) - -/* evaluates to true if info expects a pointer to double argument */ -#define _curl_is_double_info(info) \ - (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) - -/* true if info expects a pointer to struct curl_slist * argument */ -#define _curl_is_slist_info(info) \ - (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) - -/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ -#define _curl_is_tlssessioninfo_info(info) \ - (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) - -/* true if info expects a pointer to struct curl_certinfo * argument */ -#define _curl_is_certinfo_info(info) ((info) == CURLINFO_CERTINFO) - -/* true if info expects a pointer to struct curl_socket_t argument */ -#define _curl_is_socket_info(info) \ - (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) - -/* true if info expects a pointer to curl_off_t argument */ -#define _curl_is_off_t_info(info) \ - (CURLINFO_OFF_T < (info)) - - -/* typecheck helpers -- check whether given expression has requested type*/ - -/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros, - * otherwise define a new macro. Search for __builtin_types_compatible_p - * in the GCC manual. - * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is - * the actual expression passed to the curl_easy_setopt macro. This - * means that you can only apply the sizeof and __typeof__ operators, no - * == or whatsoever. - */ - -/* XXX: should evaluate to true if expr is a pointer */ -#define _curl_is_any_ptr(expr) \ - (sizeof(expr) == sizeof(void *)) - -/* evaluates to true if expr is NULL */ -/* XXX: must not evaluate expr, so this check is not accurate */ -#define _curl_is_NULL(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) - -/* evaluates to true if expr is type*, const type* or NULL */ -#define _curl_is_ptr(expr, type) \ - (_curl_is_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), type *) || \ - __builtin_types_compatible_p(__typeof__(expr), const type *)) - -/* evaluates to true if expr is one of type[], type*, NULL or const type* */ -#define _curl_is_arr(expr, type) \ - (_curl_is_ptr((expr), type) || \ - __builtin_types_compatible_p(__typeof__(expr), type [])) - -/* evaluates to true if expr is a string */ -#define _curl_is_string(expr) \ - (_curl_is_arr((expr), char) || \ - _curl_is_arr((expr), signed char) || \ - _curl_is_arr((expr), unsigned char)) - -/* evaluates to true if expr is a long (no matter the signedness) - * XXX: for now, int is also accepted (and therefore short and char, which - * are promoted to int when passed to a variadic function) */ -#define _curl_is_long(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), long) || \ - __builtin_types_compatible_p(__typeof__(expr), signed long) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ - __builtin_types_compatible_p(__typeof__(expr), int) || \ - __builtin_types_compatible_p(__typeof__(expr), signed int) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ - __builtin_types_compatible_p(__typeof__(expr), short) || \ - __builtin_types_compatible_p(__typeof__(expr), signed short) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ - __builtin_types_compatible_p(__typeof__(expr), char) || \ - __builtin_types_compatible_p(__typeof__(expr), signed char) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned char)) - -/* evaluates to true if expr is of type curl_off_t */ -#define _curl_is_off_t(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) - -/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ -/* XXX: also check size of an char[] array? */ -#define _curl_is_error_buffer(expr) \ - (_curl_is_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), char *) || \ - __builtin_types_compatible_p(__typeof__(expr), char[])) - -/* evaluates to true if expr is of type (const) void* or (const) FILE* */ -#if 0 -#define _curl_is_cb_data(expr) \ - (_curl_is_ptr((expr), void) || \ - _curl_is_ptr((expr), FILE)) -#else /* be less strict */ -#define _curl_is_cb_data(expr) \ - _curl_is_any_ptr(expr) -#endif - -/* evaluates to true if expr is of type FILE* */ -#define _curl_is_FILE(expr) \ - (_curl_is_NULL(expr) || \ - (__builtin_types_compatible_p(__typeof__(expr), FILE *))) - -/* evaluates to true if expr can be passed as POST data (void* or char*) */ -#define _curl_is_postfields(expr) \ - (_curl_is_ptr((expr), void) || \ - _curl_is_arr((expr), char) || \ - _curl_is_arr((expr), unsigned char)) - -/* helper: __builtin_types_compatible_p distinguishes between functions and - * function pointers, hide it */ -#define _curl_callback_compatible(func, type) \ - (__builtin_types_compatible_p(__typeof__(func), type) || \ - __builtin_types_compatible_p(__typeof__(func) *, type)) - -/* evaluates to true if expr is of type curl_resolver_start_callback */ -#define _curl_is_resolver_start_callback(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_resolver_start_callback)) - -/* evaluates to true if expr is of type curl_read_callback or "similar" */ -#define _curl_is_read_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), __typeof__(fread) *) || \ - _curl_callback_compatible((expr), curl_read_callback) || \ - _curl_callback_compatible((expr), _curl_read_callback1) || \ - _curl_callback_compatible((expr), _curl_read_callback2) || \ - _curl_callback_compatible((expr), _curl_read_callback3) || \ - _curl_callback_compatible((expr), _curl_read_callback4) || \ - _curl_callback_compatible((expr), _curl_read_callback5) || \ - _curl_callback_compatible((expr), _curl_read_callback6)) -typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); -typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); -typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); -typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); -typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); -typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); - -/* evaluates to true if expr is of type curl_write_callback or "similar" */ -#define _curl_is_write_cb(expr) \ - (_curl_is_read_cb(expr) || \ - _curl_callback_compatible((expr), __typeof__(fwrite) *) || \ - _curl_callback_compatible((expr), curl_write_callback) || \ - _curl_callback_compatible((expr), _curl_write_callback1) || \ - _curl_callback_compatible((expr), _curl_write_callback2) || \ - _curl_callback_compatible((expr), _curl_write_callback3) || \ - _curl_callback_compatible((expr), _curl_write_callback4) || \ - _curl_callback_compatible((expr), _curl_write_callback5) || \ - _curl_callback_compatible((expr), _curl_write_callback6)) -typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); -typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, - const void *); -typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); -typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); -typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, - const void *); -typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); - -/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ -#define _curl_is_ioctl_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_ioctl_callback) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback1) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback2) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback3) || \ - _curl_callback_compatible((expr), _curl_ioctl_callback4)) -typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); -typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); -typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); -typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); - -/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ -#define _curl_is_sockopt_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_sockopt_callback) || \ - _curl_callback_compatible((expr), _curl_sockopt_callback1) || \ - _curl_callback_compatible((expr), _curl_sockopt_callback2)) -typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); -typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, - curlsocktype); - -/* evaluates to true if expr is of type curl_opensocket_callback or - "similar" */ -#define _curl_is_opensocket_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_opensocket_callback) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback1) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback2) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback3) || \ - _curl_callback_compatible((expr), _curl_opensocket_callback4)) -typedef curl_socket_t (*_curl_opensocket_callback1) - (void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback2) - (void *, curlsocktype, const struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback3) - (const void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback4) - (const void *, curlsocktype, const struct curl_sockaddr *); - -/* evaluates to true if expr is of type curl_progress_callback or "similar" */ -#define _curl_is_progress_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_progress_callback) || \ - _curl_callback_compatible((expr), _curl_progress_callback1) || \ - _curl_callback_compatible((expr), _curl_progress_callback2)) -typedef int (*_curl_progress_callback1)(void *, - double, double, double, double); -typedef int (*_curl_progress_callback2)(const void *, - double, double, double, double); - -/* evaluates to true if expr is of type curl_debug_callback or "similar" */ -#define _curl_is_debug_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_debug_callback) || \ - _curl_callback_compatible((expr), _curl_debug_callback1) || \ - _curl_callback_compatible((expr), _curl_debug_callback2) || \ - _curl_callback_compatible((expr), _curl_debug_callback3) || \ - _curl_callback_compatible((expr), _curl_debug_callback4) || \ - _curl_callback_compatible((expr), _curl_debug_callback5) || \ - _curl_callback_compatible((expr), _curl_debug_callback6) || \ - _curl_callback_compatible((expr), _curl_debug_callback7) || \ - _curl_callback_compatible((expr), _curl_debug_callback8)) -typedef int (*_curl_debug_callback1) (CURL *, - curl_infotype, char *, size_t, void *); -typedef int (*_curl_debug_callback2) (CURL *, - curl_infotype, char *, size_t, const void *); -typedef int (*_curl_debug_callback3) (CURL *, - curl_infotype, const char *, size_t, void *); -typedef int (*_curl_debug_callback4) (CURL *, - curl_infotype, const char *, size_t, const void *); -typedef int (*_curl_debug_callback5) (CURL *, - curl_infotype, unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback6) (CURL *, - curl_infotype, unsigned char *, size_t, const void *); -typedef int (*_curl_debug_callback7) (CURL *, - curl_infotype, const unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback8) (CURL *, - curl_infotype, const unsigned char *, size_t, const void *); - -/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ -/* this is getting even messier... */ -#define _curl_is_ssl_ctx_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_ssl_ctx_callback) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback1) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback2) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback3) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback4) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback5) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback6) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback7) || \ - _curl_callback_compatible((expr), _curl_ssl_ctx_callback8)) -typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); -typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); -typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); -typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, - const void *); -#ifdef HEADER_SSL_H -/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX - * this will of course break if we're included before OpenSSL headers... - */ -typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *); -typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *); -typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *); -typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX, - const void *); -#else -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; -typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; -#endif - -/* evaluates to true if expr is of type curl_conv_callback or "similar" */ -#define _curl_is_conv_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_conv_callback) || \ - _curl_callback_compatible((expr), _curl_conv_callback1) || \ - _curl_callback_compatible((expr), _curl_conv_callback2) || \ - _curl_callback_compatible((expr), _curl_conv_callback3) || \ - _curl_callback_compatible((expr), _curl_conv_callback4)) -typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); -typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); -typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); -typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); - -/* evaluates to true if expr is of type curl_seek_callback or "similar" */ -#define _curl_is_seek_cb(expr) \ - (_curl_is_NULL(expr) || \ - _curl_callback_compatible((expr), curl_seek_callback) || \ - _curl_callback_compatible((expr), _curl_seek_callback1) || \ - _curl_callback_compatible((expr), _curl_seek_callback2)) -typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); -typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); - - -#endif /* __CURL_TYPECHECK_GCC_H */ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + __typeof__(option) _curl_opt = option; \ + if(__builtin_constant_p(_curl_opt)) { \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + __typeof__(info) _curl_info = info; \ + if(__builtin_constant_p(_curl_info)) { \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type*/ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/src/curl/urlapi.h b/include/curl/urlapi.h old mode 100755 new mode 100644 similarity index 78% rename from src/curl/urlapi.h rename to include/curl/urlapi.h index 26fbd29..a475f91 --- a/src/curl/urlapi.h +++ b/include/curl/urlapi.h @@ -1,123 +1,145 @@ -#ifndef __CURL_URLAPI_H -#define __CURL_URLAPI_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 2018 - 2019, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.haxx.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -#include "curl.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* the error codes for the URL API */ -typedef enum { - CURLUE_OK, - CURLUE_BAD_HANDLE, /* 1 */ - CURLUE_BAD_PARTPOINTER, /* 2 */ - CURLUE_MALFORMED_INPUT, /* 3 */ - CURLUE_BAD_PORT_NUMBER, /* 4 */ - CURLUE_UNSUPPORTED_SCHEME, /* 5 */ - CURLUE_URLDECODE, /* 6 */ - CURLUE_OUT_OF_MEMORY, /* 7 */ - CURLUE_USER_NOT_ALLOWED, /* 8 */ - CURLUE_UNKNOWN_PART, /* 9 */ - CURLUE_NO_SCHEME, /* 10 */ - CURLUE_NO_USER, /* 11 */ - CURLUE_NO_PASSWORD, /* 12 */ - CURLUE_NO_OPTIONS, /* 13 */ - CURLUE_NO_HOST, /* 14 */ - CURLUE_NO_PORT, /* 15 */ - CURLUE_NO_QUERY, /* 16 */ - CURLUE_NO_FRAGMENT /* 17 */ -} CURLUcode; - -typedef enum { - CURLUPART_URL, - CURLUPART_SCHEME, - CURLUPART_USER, - CURLUPART_PASSWORD, - CURLUPART_OPTIONS, - CURLUPART_HOST, - CURLUPART_PORT, - CURLUPART_PATH, - CURLUPART_QUERY, - CURLUPART_FRAGMENT, - CURLUPART_ZONEID /* added in 7.65.0 */ -} CURLUPart; - -#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ -#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, - if the port number matches the - default for the scheme */ -#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if - missing */ -#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ -#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ -#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ -#define CURLU_URLDECODE (1<<6) /* URL decode on get */ -#define CURLU_URLENCODE (1<<7) /* URL encode on set */ -#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ -#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ - -typedef struct Curl_URL CURLU; - -/* - * curl_url() creates a new CURLU handle and returns a pointer to it. - * Must be freed with curl_url_cleanup(). - */ -CURL_EXTERN CURLU *curl_url(void); - -/* - * curl_url_cleanup() frees the CURLU handle and related resources used for - * the URL parsing. It will not free strings previously returned with the URL - * API. - */ -CURL_EXTERN void curl_url_cleanup(CURLU *handle); - -/* - * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new - * handle must also be freed with curl_url_cleanup(). - */ -CURL_EXTERN CURLU *curl_url_dup(CURLU *in); - -/* - * curl_url_get() extracts a specific part of the URL from a CURLU - * handle. Returns error code. The returned pointer MUST be freed with - * curl_free() afterwards. - */ -CURL_EXTERN CURLUcode curl_url_get(CURLU *handle, CURLUPart what, - char **part, unsigned int flags); - -/* - * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns - * error code. The passed in string will be copied. Passing a NULL instead of - * a part string, clears that part. - */ -CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, - const char *part, unsigned int flags); - - -#ifdef __cplusplus -} /* end of extern "C" */ -#endif - -#endif +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 2018 - 2021, Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/src/S_New4.pro b/src/S_New4.pro index 2e7f2a5..1d775b8 100644 --- a/src/S_New4.pro +++ b/src/S_New4.pro @@ -1,21 +1,15 @@ QT -= gui - - -#INCLUDEPATH += -L$${_PRO_FILE_PWD_}\openssl-android-arm64-v8a\include - -#LIBS += -L$${_PRO_FILE_PWD_}\lib -lssl -#LIBS += -L$${_PRO_FILE_PWD_}\lib -lcrypto -#LIBS += -L$${_PRO_FILE_PWD_}\lib -lcurl - +CONFIG += -static -libstdc++ -static-libgcc #-static #Linux: unix: LIBS += -lcurl #Windows -win32: LIBS += -L$${_PRO_FILE_PWD_}\curl -lcurl +win32: LIBS += -L$${_PRO_FILE_PWD_}\..\lib\ -lcurl # 7.82.0 +#win32: LIBS += -L$${_PRO_FILE_PWD_}\..\alt\curl -lcurl # 7.64.1 -CONFIG += c++14 console +CONFIG += c++17 console CONFIG -= app_bundle # The following define makes your compiler emit warnings if you use diff --git a/src/accountManager.cpp b/src/accountManager.cpp index bcd0822..a2e6541 100644 --- a/src/accountManager.cpp +++ b/src/accountManager.cpp @@ -10,7 +10,7 @@ AccountManager::AccountManager(std::string pathToFil, std::string pathToAccountN exit(12); ifs.open(pathToAccountsFile); if(!ifs.is_open()) { - std::cout << " => Error: Konnte Account File nicht öffnen" << std::endl; + std::cout << " => Error: Konnte Account File nicht aufmachen" << std::endl; exit(13); } } @@ -61,7 +61,7 @@ int AccountManager::writeDefault(std::string path) { std::ofstream ofs(path); if(!ofs.is_open()) { - perror((std::string(" => Error: Konnte Account Datei nicht öffnen: ") + path).c_str()); + perror((std::string(" => Error: Konnte Account Datei nicht aufmachen: ") + path).c_str()); return -1; } std::cout << " => Erstelle Datei mit Accounts unter: " << path << "..." < Error: Account Number Datei ist nicht geöffnet." << std::endl; + std::cout << " => Error: Account Number Datei ist nicht aufgemacht." << std::endl; return 110; } //fStream.clear(); diff --git a/src/accountManager.h b/src/accountManager.h index b11b6b7..c9f5f08 100644 --- a/src/accountManager.h +++ b/src/accountManager.h @@ -1,22 +1,21 @@ #ifndef ACCOUNTMANAGER_H #define ACCOUNTMANAGER_H + + #include #include #include - - -#include "parameterManager.h" - - - struct Account { std::string Email, Password; }; +//wichtig vor Account declaration!!!! +#include "parameterManager.h" + class AccountManager { public: diff --git a/src/curl/.gitignore b/src/curl/.gitignore deleted file mode 100755 index 190c666..0000000 --- a/src/curl/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -curlver.h.dist -stamp-h2 -stamp-h3 diff --git a/src/curl/LIBCURL.DLL b/src/curl/LIBCURL.DLL deleted file mode 100644 index fee2bf0dcf5ba4f040b1a8f307511c9fc995cc19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 566272 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

l8^(VAMDUXT81Q)wf}n+)a@_ds}fFjEj7DZWVI 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

3X4#AOf& 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%0Ap&+M7SXBeb%Yco%qn1o|+^$`my; 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

jjlu_>RRHI!nOj)}>>7Ph~ux#D$6R_^Gb--HUsZ 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 Error: Konnte LogDatei nicht öffnen: '" + path + "'").c_str()); + perror((" => Error: Konnte LogDatei nicht aufmachen: '" + path + "'").c_str()); return (5657); } } diff --git a/src/logger.h b/src/logger.h index 03a90d6..e078972 100644 --- a/src/logger.h +++ b/src/logger.h @@ -1,6 +1,8 @@ #ifndef LOGGER_H #define LOGGER_H + + #include #include #include diff --git a/src/pageManager.cpp b/src/pageManager.cpp index 7364dd6..2b05ffb 100644 --- a/src/pageManager.cpp +++ b/src/pageManager.cpp @@ -87,7 +87,7 @@ Reply PageManager::getServerRequest(std::string Url, bool useCookies, std::strin std::string returnUrl; - int width; + int width = 0; get_terminal_size(width); if(width < 1) width = 999999; @@ -559,7 +559,7 @@ int PageManager::writeToFile(std::vector paths, std::string text) for(const auto &path : paths) { of.open(path, std::ios::out | std::ios::app); if(!of.is_open()) { - perror((" => Error: Konnte Output: '" + path + "' Datei nicht öffnen").c_str()); + perror((" => Error: Konnte Output: '" + path + "' Datei nicht aufmachen").c_str()); return -1; } of << text << std::endl; @@ -569,6 +569,13 @@ int PageManager::writeToFile(std::vector paths, std::string text) return 0; } +std::string PageManager::getCurlVersion() +{ + auto data = curl_version_info(CURLVERSION_NOW); + return data->version; +} + + std::string PageManager::chooseHosterLink(std::string HosterList, std::string Hoster_with_Highst_Priority_at_First, std::string languages_with_highst_priority_at_first, bool withWarnMsg) { std::istringstream SListLang ( replace( languages_with_highst_priority_at_first, ",", "\n") + "\n" ); diff --git a/src/pageManager.h b/src/pageManager.h index 12755fa..56db192 100644 --- a/src/pageManager.h +++ b/src/pageManager.h @@ -3,13 +3,13 @@ #include "accountManager.h" -#include "curl/curl.h" - - #include "parameterManager.h" // for isNumber #ifdef _WIN32 +#include "./../include/curl/curl.h" #include +#else +#include "curl/curl.h" #endif #include @@ -67,6 +67,8 @@ public: int writeToFile(std::vector paths, std::string text); + static std::string getCurlVersion(); + std::string sock5Proxy; private: bool debugMode = false; diff --git a/src/parameterManager.cpp b/src/parameterManager.cpp index 24b8816..594dff5 100644 --- a/src/parameterManager.cpp +++ b/src/parameterManager.cpp @@ -153,23 +153,26 @@ int manageParameter(Settings &settings, int argc, char **argv) void unterOption_printVersion(Settings &settings) { - std::cout << "Programinfos:" << std::endl - << " > Build-Datum: " << __DATE__ << std::endl - << " > Build-Uhrzeit: " << __TIME__ << std::endl - << " > Program Version: " << settings.version << std::endl - << " > Defaults Datei Version: " << settings.defaultFileVersion << std::endl + std::cout << "Programminformationen:" << std::endl + << " > Build-Datum: \t\t" << __DATE__ << std::endl + << " > Build-Uhrzeit: \t\t" << __TIME__ << std::endl + << " > Program Version: \t" << settings.version << std::endl + << " > Defaults Datei Version: \t" << settings.defaultFileVersion << std::endl + #ifdef __MINGW_GCC_VERSION - << " > MINGW GCC Version: " <<__GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << std::endl + << " > MINGW GCC Version: \t" <<__GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << std::endl #endif - << " > C++ Standart: "; + << " > Curl Version: \t\t" << PageManager::getCurlVersion() << std::endl + + << " > C++ Standart: \t\t"; if(__cplusplus == 1) std::cout << "C++_Pre_C++98" << std::endl; else if (__cplusplus == 199711) std::cout << "C++98" << std::endl; else if (__cplusplus == 201103) std::cout << "C++11" << std::endl; else if (__cplusplus == 201402) std::cout << "C++14" << std::endl; else if (__cplusplus == 201703) std::cout << "C++17" << std::endl; else std::cout << "C++_Newer_C++17" << std::endl; - std::cout << " > " << sizeof (void *) * 8 << " Bit Version" << std::endl; + std::cout << " > Bit Version: \t\tx" << sizeof (void *) * 8 << "" << std::endl; } int loadDefaulOptions(Settings &settings) @@ -178,7 +181,7 @@ int loadDefaulOptions(Settings &settings) if(!ifs.is_open()) { std::ofstream ofs(settings.defaultsFilePath); if(!ofs.is_open()) { - perror((" => Error: Konnte Defaults-Datei nicht öffnen: " + settings.defaultsFilePath).c_str()); + perror((" => Error: Konnte Defaults-Datei nicht aufmachen: " + settings.defaultsFilePath).c_str()); return 89; } else { std::cout << " => Erstelle Defaults-Datei: " << settings.defaultsFilePath << std::endl; @@ -257,7 +260,7 @@ int loadDefaulOptions(Settings &settings) } ifs.open(settings.defaultsFilePath); if(!ifs.is_open()) { - perror((" => Error: Konnte Defaults-Datei nach dem erstellen nicht öffnen: " + settings.defaultsFilePath).c_str()); + perror((" => Error: Konnte Defaults-Datei nach dem erstellen nicht aufmachen: " + settings.defaultsFilePath).c_str()); return 97; } } @@ -1593,7 +1596,7 @@ bool removeDirIsOk(std::string path, Settings *settings, bool askForDelete) DIR* dirp = nullptr; if( (dirp = opendir( path.c_str() )) == nullptr ) { - perror(std::string(" => Error: Konnte Verzeichnis nicht öffnen: '" + path + "'").c_str()); + perror(std::string(" => Error: Konnte Verzeichnis nicht aufmachen: '" + path + "'").c_str()); return false; } diff --git a/src/parameterManager.h b/src/parameterManager.h index db18278..ae629fa 100644 --- a/src/parameterManager.h +++ b/src/parameterManager.h @@ -1,6 +1,9 @@ #ifndef PARAMETERMANAGER_H #define PARAMETERMANAGER_H + + + #ifndef __linux__ #ifndef _WIN32 #error "Error Invalid System: Only for Linux and Windows systems!" @@ -60,6 +63,9 @@ struct PAGE { }; +//Wichtig nach MODUS UND PAGE DECLARATION +#include "pageManager.h" + struct Settings { diff --git a/src/programManager.h b/src/programManager.h index f859aec..0b7e1bd 100644 --- a/src/programManager.h +++ b/src/programManager.h @@ -2,9 +2,11 @@ #define MANAGEPROGRAM_H -#include "pageManager.h" + + +//#include "pageManager.h" #include "parameterManager.h" -#include "accountManager.h" +//#include "accountManager.h" #include #include diff --git a/x86_64-WIN_LIBS/LIBCURL-DLL b/x86_64-WIN_LIBS/LIBCURL-DLL deleted file mode 100644 index e90b319..0000000 --- a/x86_64-WIN_LIBS/LIBCURL-DLL +++ /dev/null @@ -1 +0,0 @@ -../src/curl/ diff --git a/x86_64-WIN_LIBS/libcurl-x64.def b/x86_64-WIN_LIBS/libcurl-x64.def new file mode 100644 index 0000000..752e2e6 --- /dev/null +++ b/x86_64-WIN_LIBS/libcurl-x64.def @@ -0,0 +1,87 @@ +EXPORTS + curl_easy_cleanup @1 + curl_easy_duphandle @2 + curl_easy_escape @3 + curl_easy_getinfo @4 + curl_easy_init @5 + curl_easy_option_by_id @6 + curl_easy_option_by_name @7 + curl_easy_option_next @8 + curl_easy_pause @9 + curl_easy_perform @10 + curl_easy_recv @11 + curl_easy_reset @12 + curl_easy_send @13 + curl_easy_setopt @14 + curl_easy_strerror @15 + curl_easy_unescape @16 + curl_easy_upkeep @17 + curl_escape @18 + curl_formadd @19 + curl_formfree @20 + curl_formget @21 + curl_free @22 + curl_getdate @23 + curl_getenv @24 + curl_global_cleanup @25 + curl_global_init @26 + curl_global_init_mem @27 + curl_global_sslset @28 + curl_maprintf @29 + curl_mfprintf @30 + curl_mime_addpart @31 + curl_mime_data @32 + curl_mime_data_cb @33 + curl_mime_encoder @34 + curl_mime_filedata @35 + curl_mime_filename @36 + curl_mime_free @37 + curl_mime_headers @38 + curl_mime_init @39 + curl_mime_name @40 + curl_mime_subparts @41 + curl_mime_type @42 + curl_mprintf @43 + curl_msnprintf @44 + curl_msprintf @45 + curl_multi_add_handle @46 + curl_multi_assign @47 + curl_multi_cleanup @48 + curl_multi_fdset @49 + curl_multi_info_read @50 + curl_multi_init @51 + curl_multi_perform @52 + curl_multi_poll @53 + curl_multi_remove_handle @54 + curl_multi_setopt @55 + curl_multi_socket @56 + curl_multi_socket_action @57 + curl_multi_socket_all @58 + curl_multi_strerror @59 + curl_multi_timeout @60 + curl_multi_wait @61 + curl_multi_wakeup @62 + curl_mvaprintf @63 + curl_mvfprintf @64 + curl_mvprintf @65 + curl_mvsnprintf @66 + curl_mvsprintf @67 + curl_pushheader_byname @68 + curl_pushheader_bynum @69 + curl_share_cleanup @70 + curl_share_init @71 + curl_share_setopt @72 + curl_share_strerror @73 + curl_slist_append @74 + curl_slist_free_all @75 + curl_strequal @76 + curl_strnequal @77 + curl_unescape @78 + curl_url @79 + curl_url_cleanup @80 + curl_url_dup @81 + curl_url_get @82 + curl_url_set @83 + curl_url_strerror @84 + curl_version @85 + curl_version_info @86