@ -7,11 +7,11 @@
* | ( __ | | _ | | _ < | | ___
* | ( __ | | _ | | _ < | | ___
* \ ___ | \ ___ / | _ | \ _ \ _____ |
* \ ___ | \ ___ / | _ | \ _ \ _____ |
*
*
* Copyright ( C ) 1998 - 201 5 , Daniel Stenberg , < daniel @ haxx . se > , et al .
* Copyright ( C ) 1998 - 201 6 , Daniel Stenberg , < daniel @ haxx . se > , et al .
*
*
* This software is licensed as described in the file COPYING , which
* This software is licensed as described in the file COPYING , which
* you should have received as part of this distribution . The terms
* you should have received as part of this distribution . The terms
* are also available at http : //curl.haxx.se/docs/copyright.html.
* are also available at http s : //curl.haxx.se/docs/copyright.html.
*
*
* You may opt to use , copy , modify , merge , publish , distribute and / or sell
* 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
* copies of the Software , and permit persons to whom the Software is
@ -24,10 +24,10 @@
/*
/*
* If you have libcurl problems , all docs and details are found here :
* If you have libcurl problems , all docs and details are found here :
* http : //curl.haxx.se/libcurl/
* http s : //curl.haxx.se/libcurl/
*
*
* curl - library mailing list subscription and unsubscription web interface :
* curl - library mailing list subscription and unsubscription web interface :
* http : //cool.haxx.se/mailman/listinfo/curl-library/
* http s : //cool.haxx.se/mailman/listinfo/curl-library/
*/
*/
# include "curlver.h" /* libcurl version defines */
# include "curlver.h" /* libcurl version defines */
@ -56,7 +56,8 @@
# include <time.h>
# include <time.h>
# if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
# if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
# if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || defined(__LWIP_OPT_H__))
# 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
/* The check above prevents the winsock2 inclusion if winsock.h already was
included , since they can ' t co - exist without problems */
included , since they can ' t co - exist without problems */
# include <winsock2.h>
# include <winsock2.h>
@ -90,7 +91,13 @@
extern " C " {
extern " C " {
# endif
# endif
# if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
typedef struct Curl_easy CURL ;
typedef struct Curl_share CURLSH ;
# else
typedef void CURL ;
typedef void CURL ;
typedef void CURLSH ;
# endif
/*
/*
* libcurl external API function linkage decorations .
* libcurl external API function linkage decorations .
@ -112,7 +119,7 @@ typedef void CURL;
# ifndef curl_socket_typedef
# ifndef curl_socket_typedef
/* socket typedef */
/* socket typedef */
# if defined(WIN32) && !defined(__LWIP_OPT_H__)
# if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
typedef SOCKET curl_socket_t ;
typedef SOCKET curl_socket_t ;
# define CURL_SOCKET_BAD INVALID_SOCKET
# define CURL_SOCKET_BAD INVALID_SOCKET
# else
# else
@ -127,7 +134,8 @@ struct curl_httppost {
char * name ; /* pointer to allocated name */
char * name ; /* pointer to allocated name */
long namelength ; /* length of name length */
long namelength ; /* length of name length */
char * contents ; /* pointer to allocated data contents */
char * contents ; /* pointer to allocated data contents */
long contentslength ; /* length of contents field */
long contentslength ; /* length of contents field, see also
CURL_HTTPPOST_LARGE */
char * buffer ; /* pointer to allocated buffer contents */
char * buffer ; /* pointer to allocated buffer contents */
long bufferlength ; /* length of buffer field */
long bufferlength ; /* length of buffer field */
char * contenttype ; /* Content-Type */
char * contenttype ; /* Content-Type */
@ -136,24 +144,33 @@ struct curl_httppost {
file , this link should link to following
file , this link should link to following
files */
files */
long flags ; /* as defined below */
long flags ; /* as defined below */
# define HTTPPOST_FILENAME (1<<0) /* specified content is a file name */
# define HTTPPOST_READFILE (1<<1) /* specified content is a file name */
/* specified content is a file name */
# define HTTPPOST_PTRNAME (1<<2) / * name is only stored pointer
# define CURL_HTTPPOST_FILENAME (1<<0)
do not free in formfree */
/* specified content is a file name */
# define HTTPPOST_PTRCONTENTS (1<<3) / * contents is only stored pointer
# define CURL_HTTPPOST_READFILE (1<<1)
do not free in formfree */
/* name is only stored pointer do not free in formfree */
# define HTTPPOST_BUFFER (1<<4) /* upload file from buffer */
# define CURL_HTTPPOST_PTRNAME (1<<2)
# define HTTPPOST_PTRBUFFER (1<<5) /* upload file from pointer contents */
/* contents is only stored pointer do not free in formfree */
# define HTTPPOST_CALLBACK (1<<6) / * upload file contents by using the
# define CURL_HTTPPOST_PTRCONTENTS (1<<3)
regular read callback to get the data
/* upload file from buffer */
and pass the given pointer as custom
# define CURL_HTTPPOST_BUFFER (1<<4)
pointer */
/* 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
char * showfilename ; /* The file name to show. If not set, the
actual file name will be used ( if this
actual file name will be used ( if this
is a file part ) */
is a file part ) */
void * userp ; /* custom pointer used for
void * userp ; /* custom pointer used for
HTTPPOST_CALLBACK posts */
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 proto. It is now considered
/* This is the CURLOPT_PROGRESSFUNCTION callback proto. It is now considered
@ -362,6 +379,7 @@ typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
int cmd ,
int cmd ,
void * clientp ) ;
void * clientp ) ;
# ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS
/*
/*
* The following typedef ' s are signatures of malloc , free , realloc , strdup and
* The following typedef ' s are signatures of malloc , free , realloc , strdup and
* calloc respectively . Function pointers of these types can be passed to the
* calloc respectively . Function pointers of these types can be passed to the
@ -374,6 +392,9 @@ typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
typedef char * ( * curl_strdup_callback ) ( const char * str ) ;
typedef char * ( * curl_strdup_callback ) ( const char * str ) ;
typedef void * ( * curl_calloc_callback ) ( size_t nmemb , size_t size ) ;
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*/
/* the kind of data that is passed to information_callback*/
typedef enum {
typedef enum {
CURLINFO_TEXT = 0 ,
CURLINFO_TEXT = 0 ,
@ -460,9 +481,9 @@ typedef enum {
CURLE_OBSOLETE44 , /* 44 - NOT USED */
CURLE_OBSOLETE44 , /* 44 - NOT USED */
CURLE_INTERFACE_FAILED , /* 45 - CURLOPT_INTERFACE failed */
CURLE_INTERFACE_FAILED , /* 45 - CURLOPT_INTERFACE failed */
CURLE_OBSOLETE46 , /* 46 - NOT USED */
CURLE_OBSOLETE46 , /* 46 - NOT USED */
CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */
CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */
CURLE_UNKNOWN_OPTION , /* 48 - User specified an unknown option */
CURLE_UNKNOWN_OPTION , /* 48 - User specified an unknown option */
CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */
CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */
CURLE_OBSOLETE50 , /* 50 - NOT USED */
CURLE_OBSOLETE50 , /* 50 - NOT USED */
CURLE_PEER_FAILED_VERIFICATION , /* 51 - peer's certificate or fingerprint
CURLE_PEER_FAILED_VERIFICATION , /* 51 - peer's certificate or fingerprint
wasn ' t verified fine */
wasn ' t verified fine */
@ -524,6 +545,8 @@ typedef enum {
CURLE_SSL_PINNEDPUBKEYNOTMATCH , /* 90 - specified pinned public key did not
CURLE_SSL_PINNEDPUBKEYNOTMATCH , /* 90 - specified pinned public key did not
match */
match */
CURLE_SSL_INVALIDCERTSTATUS , /* 91 - invalid certificate status */
CURLE_SSL_INVALIDCERTSTATUS , /* 91 - invalid certificate status */
CURLE_HTTP2_STREAM , /* 92 - stream error in HTTP/2 framing layer
*/
CURL_LAST /* never use! */
CURL_LAST /* never use! */
} CURLcode ;
} CURLcode ;
@ -818,9 +841,13 @@ typedef enum {
but 32 */
but 32 */
# define CURLOPTTYPE_LONG 0
# define CURLOPTTYPE_LONG 0
# define CURLOPTTYPE_OBJECTPOINT 10000
# define CURLOPTTYPE_OBJECTPOINT 10000
# define CURLOPTTYPE_STRINGPOINT 10000
# define CURLOPTTYPE_FUNCTIONPOINT 20000
# define CURLOPTTYPE_FUNCTIONPOINT 20000
# define CURLOPTTYPE_OFF_T 30000
# 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_<name>,
/* name is uppercase CURLOPT_<name>,
type is one of the defined CURLOPTTYPE_ < type >
type is one of the defined CURLOPTTYPE_ < type >
number is unique identifier */
number is unique identifier */
@ -834,6 +861,7 @@ typedef enum {
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
# define LONG CURLOPTTYPE_LONG
# define LONG CURLOPTTYPE_LONG
# define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
# define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
# define STRINGPOINT CURLOPTTYPE_OBJECTPOINT
# define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
# define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
# define OFF_T CURLOPTTYPE_OFF_T
# define OFF_T CURLOPTTYPE_OFF_T
# define CINIT(name,type,number) CURLOPT_ /**/ name = type + number
# define CINIT(name,type,number) CURLOPT_ /**/ name = type + number
@ -850,22 +878,22 @@ typedef enum {
CINIT ( WRITEDATA , OBJECTPOINT , 1 ) ,
CINIT ( WRITEDATA , OBJECTPOINT , 1 ) ,
/* The full URL to get/put */
/* The full URL to get/put */
CINIT ( URL , OBJECT POINT, 2 ) ,
CINIT ( URL , STRING POINT, 2 ) ,
/* Port number to connect to, if other than default. */
/* Port number to connect to, if other than default. */
CINIT ( PORT , LONG , 3 ) ,
CINIT ( PORT , LONG , 3 ) ,
/* Name of proxy to use. */
/* Name of proxy to use. */
CINIT ( PROXY , OBJECT POINT, 4 ) ,
CINIT ( PROXY , STRING POINT, 4 ) ,
/* "user:password;options" to use when fetching. */
/* "user:password;options" to use when fetching. */
CINIT ( USERPWD , OBJECT POINT, 5 ) ,
CINIT ( USERPWD , STRING POINT, 5 ) ,
/* "user:password" to use with proxy. */
/* "user:password" to use with proxy. */
CINIT ( PROXYUSERPWD , OBJECT POINT, 6 ) ,
CINIT ( PROXYUSERPWD , STRING POINT, 6 ) ,
/* Range to get, specified as an ASCII string. */
/* Range to get, specified as an ASCII string. */
CINIT ( RANGE , OBJECT POINT, 7 ) ,
CINIT ( RANGE , STRING POINT, 7 ) ,
/* not used */
/* not used */
@ -902,14 +930,14 @@ typedef enum {
CINIT ( POSTFIELDS , OBJECTPOINT , 15 ) ,
CINIT ( POSTFIELDS , OBJECTPOINT , 15 ) ,
/* Set the referrer page (needed by some CGIs) */
/* Set the referrer page (needed by some CGIs) */
CINIT ( REFERER , OBJECT POINT, 16 ) ,
CINIT ( REFERER , STRING POINT, 16 ) ,
/* Set the FTP PORT string (interface name, named or numerical IP address)
/* Set the FTP PORT string (interface name, named or numerical IP address)
Use i . e ' - ' to use default address . */
Use i . e ' - ' to use default address . */
CINIT ( FTPPORT , OBJECT POINT, 17 ) ,
CINIT ( FTPPORT , STRING POINT, 17 ) ,
/* Set the User-Agent string (examined by some CGIs) */
/* Set the User-Agent string (examined by some CGIs) */
CINIT ( USERAGENT , OBJECT POINT, 18 ) ,
CINIT ( USERAGENT , STRING POINT, 18 ) ,
/* If the download receives less than "low speed limit" bytes/second
/* If the download receives less than "low speed limit" bytes/second
* during " low speed time " seconds , the operations is aborted .
* during " low speed time " seconds , the operations is aborted .
@ -932,7 +960,7 @@ typedef enum {
CINIT ( RESUME_FROM , LONG , 21 ) ,
CINIT ( RESUME_FROM , LONG , 21 ) ,
/* Set cookie in request: */
/* Set cookie in request: */
CINIT ( COOKIE , OBJECT POINT, 22 ) ,
CINIT ( COOKIE , STRING POINT, 22 ) ,
/* This points to a linked list of headers, struct curl_slist kind. This
/* This points to a linked list of headers, struct curl_slist kind. This
list is also used for RTSP ( in spite of its name ) */
list is also used for RTSP ( in spite of its name ) */
@ -942,10 +970,10 @@ typedef enum {
CINIT ( HTTPPOST , OBJECTPOINT , 24 ) ,
CINIT ( HTTPPOST , OBJECTPOINT , 24 ) ,
/* name of the file keeping your private SSL-certificate */
/* name of the file keeping your private SSL-certificate */
CINIT ( SSLCERT , OBJECT POINT, 25 ) ,
CINIT ( SSLCERT , STRING POINT, 25 ) ,
/* password for the SSL or SSH private key */
/* password for the SSL or SSH private key */
CINIT ( KEYPASSWD , OBJECT POINT, 26 ) ,
CINIT ( KEYPASSWD , STRING POINT, 26 ) ,
/* send TYPE parameter? */
/* send TYPE parameter? */
CINIT ( CRLF , LONG , 27 ) ,
CINIT ( CRLF , LONG , 27 ) ,
@ -959,7 +987,7 @@ typedef enum {
/* point to a file to read the initial cookies from, also enables
/* point to a file to read the initial cookies from, also enables
" cookie awareness " */
" cookie awareness " */
CINIT ( COOKIEFILE , OBJECT POINT, 31 ) ,
CINIT ( COOKIEFILE , STRING POINT, 31 ) ,
/* What version to specifically try to use.
/* What version to specifically try to use.
See CURL_SSLVERSION defines below . */
See CURL_SSLVERSION defines below . */
@ -978,9 +1006,9 @@ typedef enum {
HTTP : DELETE , TRACE and others
HTTP : DELETE , TRACE and others
FTP : to use a different list command
FTP : to use a different list command
*/
*/
CINIT ( CUSTOMREQUEST , OBJECT POINT, 36 ) ,
CINIT ( CUSTOMREQUEST , STRING POINT, 36 ) ,
/* HTTP request, for odd commands like DELETE, TRACE and others */
/* FILE handle to use instead of stderr */
CINIT ( STDERR , OBJECTPOINT , 37 ) ,
CINIT ( STDERR , OBJECTPOINT , 37 ) ,
/* 38 is not used */
/* 38 is not used */
@ -1037,19 +1065,19 @@ typedef enum {
CINIT ( HTTPPROXYTUNNEL , LONG , 61 ) ,
CINIT ( HTTPPROXYTUNNEL , LONG , 61 ) ,
/* Set the interface string to use as outgoing network interface */
/* Set the interface string to use as outgoing network interface */
CINIT ( INTERFACE , OBJECT POINT, 62 ) ,
CINIT ( INTERFACE , STRING POINT, 62 ) ,
/* Set the krb4/5 security level, this also enables krb4/5 awareness. This
/* 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 a string , ' clear ' , ' safe ' , ' confidential ' or ' private ' . If the string
* is set but doesn ' t match one of these , ' private ' will be used . */
* is set but doesn ' t match one of these , ' private ' will be used . */
CINIT ( KRBLEVEL , OBJECT POINT, 63 ) ,
CINIT ( KRBLEVEL , STRING POINT, 63 ) ,
/* Set if we should verify the peer in ssl handshake, set 1 to verify. */
/* Set if we should verify the peer in ssl handshake, set 1 to verify. */
CINIT ( SSL_VERIFYPEER , LONG , 64 ) ,
CINIT ( SSL_VERIFYPEER , LONG , 64 ) ,
/* The CApath or CAfile used to validate the peer certificate
/* The CApath or CAfile used to validate the peer certificate
this option is used only if SSL_VERIFYPEER is true */
this option is used only if SSL_VERIFYPEER is true */
CINIT ( CAINFO , OBJECT POINT, 65 ) ,
CINIT ( CAINFO , STRING POINT, 65 ) ,
/* 66 = OBSOLETE */
/* 66 = OBSOLETE */
/* 67 = OBSOLETE */
/* 67 = OBSOLETE */
@ -1083,10 +1111,10 @@ typedef enum {
/* Set to a file name that contains random data for libcurl to use to
/* Set to a file name that contains random data for libcurl to use to
seed the random engine when doing SSL connects . */
seed the random engine when doing SSL connects . */
CINIT ( RANDOM_FILE , OBJECT POINT, 76 ) ,
CINIT ( RANDOM_FILE , STRING POINT, 76 ) ,
/* Set to the Entropy Gathering Daemon socket pathname */
/* Set to the Entropy Gathering Daemon socket pathname */
CINIT ( EGDSOCKET , OBJECT POINT, 77 ) ,
CINIT ( EGDSOCKET , STRING POINT, 77 ) ,
/* Time-out connect operations after this amount of seconds, if connects are
/* Time-out connect operations after this amount of seconds, if connects are
OK within this time , then fine . . . This only aborts the connect phase . */
OK within this time , then fine . . . This only aborts the connect phase . */
@ -1108,10 +1136,10 @@ typedef enum {
/* Specify which file name to write all known cookies in after completed
/* Specify which file name to write all known cookies in after completed
operation . Set file name to " - " ( dash ) to make it go to stdout . */
operation . Set file name to " - " ( dash ) to make it go to stdout . */
CINIT ( COOKIEJAR , OBJECT POINT, 82 ) ,
CINIT ( COOKIEJAR , STRING POINT, 82 ) ,
/* Specify which SSL ciphers to use */
/* Specify which SSL ciphers to use */
CINIT ( SSL_CIPHER_LIST , OBJECT POINT, 83 ) ,
CINIT ( SSL_CIPHER_LIST , STRING POINT, 83 ) ,
/* Specify which HTTP version to use! This must be set to one of the
/* Specify which HTTP version to use! This must be set to one of the
CURL_HTTP_VERSION * enums set below . */
CURL_HTTP_VERSION * enums set below . */
@ -1123,16 +1151,16 @@ typedef enum {
CINIT ( FTP_USE_EPSV , LONG , 85 ) ,
CINIT ( FTP_USE_EPSV , LONG , 85 ) ,
/* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
/* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
CINIT ( SSLCERTTYPE , OBJECT POINT, 86 ) ,
CINIT ( SSLCERTTYPE , STRING POINT, 86 ) ,
/* name of the file keeping your private SSL-key */
/* name of the file keeping your private SSL-key */
CINIT ( SSLKEY , OBJECT POINT, 87 ) ,
CINIT ( SSLKEY , STRING POINT, 87 ) ,
/* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
/* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
CINIT ( SSLKEYTYPE , OBJECT POINT, 88 ) ,
CINIT ( SSLKEYTYPE , STRING POINT, 88 ) ,
/* crypto engine for the SSL-sub system */
/* crypto engine for the SSL-sub system */
CINIT ( SSLENGINE , OBJECT POINT, 89 ) ,
CINIT ( SSLENGINE , STRING POINT, 89 ) ,
/* set the crypto engine for the SSL-sub system as default
/* set the crypto engine for the SSL-sub system as default
the param has no meaning . . .
the param has no meaning . . .
@ -1159,7 +1187,7 @@ typedef enum {
/* The CApath directory used to validate the peer certificate
/* The CApath directory used to validate the peer certificate
this option is used only if SSL_VERIFYPEER is true */
this option is used only if SSL_VERIFYPEER is true */
CINIT ( CAPATH , OBJECT POINT, 97 ) ,
CINIT ( CAPATH , STRING POINT, 97 ) ,
/* Instruct libcurl to use a smaller receive buffer */
/* Instruct libcurl to use a smaller receive buffer */
CINIT ( BUFFERSIZE , LONG , 98 ) ,
CINIT ( BUFFERSIZE , LONG , 98 ) ,
@ -1179,7 +1207,7 @@ typedef enum {
/* Set the Accept-Encoding string. Use this to tell a server you would like
/* 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
the response to be compressed . Before 7.21 .6 , this was known as
CURLOPT_ENCODING */
CURLOPT_ENCODING */
CINIT ( ACCEPT_ENCODING , OBJECT POINT, 102 ) ,
CINIT ( ACCEPT_ENCODING , STRING POINT, 102 ) ,
/* Set pointer to private data */
/* Set pointer to private data */
CINIT ( PRIVATE , OBJECTPOINT , 103 ) ,
CINIT ( PRIVATE , OBJECTPOINT , 103 ) ,
@ -1260,7 +1288,7 @@ typedef enum {
to parse ( using the CURLOPT_NETRC option ) . If not set , libcurl will do
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
a poor attempt to find the user ' s home directory and check for a . netrc
file in there . */
file in there . */
CINIT ( NETRC_FILE , OBJECT POINT, 118 ) ,
CINIT ( NETRC_FILE , STRING POINT, 118 ) ,
/* Enable SSL/TLS for FTP, pick one of:
/* Enable SSL/TLS for FTP, pick one of:
CURLUSESSL_TRY - try using SSL , proceed anyway otherwise
CURLUSESSL_TRY - try using SSL , proceed anyway otherwise
@ -1303,10 +1331,10 @@ typedef enum {
/* zero terminated string for pass on to the FTP server when asked for
/* zero terminated string for pass on to the FTP server when asked for
" account " info */
" account " info */
CINIT ( FTP_ACCOUNT , OBJECT POINT, 134 ) ,
CINIT ( FTP_ACCOUNT , STRING POINT, 134 ) ,
/* feed cookie s into cookie engine */
/* feed cookie into cookie engine */
CINIT ( COOKIELIST , OBJECT POINT, 135 ) ,
CINIT ( COOKIELIST , STRING POINT, 135 ) ,
/* ignore Content-Length */
/* ignore Content-Length */
CINIT ( IGNORE_CONTENT_LENGTH , LONG , 136 ) ,
CINIT ( IGNORE_CONTENT_LENGTH , LONG , 136 ) ,
@ -1352,7 +1380,7 @@ typedef enum {
CINIT ( MAX_RECV_SPEED_LARGE , OFF_T , 146 ) ,
CINIT ( MAX_RECV_SPEED_LARGE , OFF_T , 146 ) ,
/* Pointer to command string to send if USER/PASS fails. */
/* Pointer to command string to send if USER/PASS fails. */
CINIT ( FTP_ALTERNATIVE_TO_USER , OBJECT POINT, 147 ) ,
CINIT ( FTP_ALTERNATIVE_TO_USER , STRING POINT, 147 ) ,
/* callback function for setting socket options */
/* callback function for setting socket options */
CINIT ( SOCKOPTFUNCTION , FUNCTIONPOINT , 148 ) ,
CINIT ( SOCKOPTFUNCTION , FUNCTIONPOINT , 148 ) ,
@ -1366,8 +1394,8 @@ typedef enum {
CINIT ( SSH_AUTH_TYPES , LONG , 151 ) ,
CINIT ( SSH_AUTH_TYPES , LONG , 151 ) ,
/* Used by scp/sftp to do public/private key authentication */
/* Used by scp/sftp to do public/private key authentication */
CINIT ( SSH_PUBLIC_KEYFILE , OBJECT POINT, 152 ) ,
CINIT ( SSH_PUBLIC_KEYFILE , STRING POINT, 152 ) ,
CINIT ( SSH_PRIVATE_KEYFILE , OBJECT POINT, 153 ) ,
CINIT ( SSH_PRIVATE_KEYFILE , STRING POINT, 153 ) ,
/* Send CCC (Clear Command Channel) after authentication */
/* Send CCC (Clear Command Channel) after authentication */
CINIT ( FTP_SSL_CCC , LONG , 154 ) ,
CINIT ( FTP_SSL_CCC , LONG , 154 ) ,
@ -1391,7 +1419,7 @@ typedef enum {
CINIT ( POSTREDIR , LONG , 161 ) ,
CINIT ( POSTREDIR , LONG , 161 ) ,
/* used by scp/sftp to verify the host's public key */
/* used by scp/sftp to verify the host's public key */
CINIT ( SSH_HOST_PUBLIC_KEY_MD5 , OBJECT POINT, 162 ) ,
CINIT ( SSH_HOST_PUBLIC_KEY_MD5 , STRING POINT, 162 ) ,
/* Callback function for opening socket (instead of socket(2)). Optionally,
/* Callback function for opening socket (instead of socket(2)). Optionally,
callback is able change the address or refuse to connect returning
callback is able change the address or refuse to connect returning
@ -1411,10 +1439,10 @@ typedef enum {
CINIT ( SEEKDATA , OBJECTPOINT , 168 ) ,
CINIT ( SEEKDATA , OBJECTPOINT , 168 ) ,
/* CRL file */
/* CRL file */
CINIT ( CRLFILE , OBJECT POINT, 169 ) ,
CINIT ( CRLFILE , STRING POINT, 169 ) ,
/* Issuer certificate */
/* Issuer certificate */
CINIT ( ISSUERCERT , OBJECT POINT, 170 ) ,
CINIT ( ISSUERCERT , STRING POINT, 170 ) ,
/* (IPv6) Address scope */
/* (IPv6) Address scope */
CINIT ( ADDRESS_SCOPE , LONG , 171 ) ,
CINIT ( ADDRESS_SCOPE , LONG , 171 ) ,
@ -1424,12 +1452,12 @@ typedef enum {
CINIT ( CERTINFO , LONG , 172 ) ,
CINIT ( CERTINFO , LONG , 172 ) ,
/* "name" and "pwd" to use when fetching. */
/* "name" and "pwd" to use when fetching. */
CINIT ( USERNAME , OBJECT POINT, 173 ) ,
CINIT ( USERNAME , STRING POINT, 173 ) ,
CINIT ( PASSWORD , OBJECT POINT, 174 ) ,
CINIT ( PASSWORD , STRING POINT, 174 ) ,
/* "name" and "pwd" to use with Proxy when fetching. */
/* "name" and "pwd" to use with Proxy when fetching. */
CINIT ( PROXYUSERNAME , OBJECT POINT, 175 ) ,
CINIT ( PROXYUSERNAME , STRING POINT, 175 ) ,
CINIT ( PROXYPASSWORD , OBJECT POINT, 176 ) ,
CINIT ( PROXYPASSWORD , STRING POINT, 176 ) ,
/* Comma separated list of hostnames defining no-proxy zones. These should
/* Comma separated list of hostnames defining no-proxy zones. These should
match both hostnames directly , and hostnames within a domain . For
match both hostnames directly , and hostnames within a domain . For
@ -1438,13 +1466,13 @@ typedef enum {
implementations of this , . local . com will be considered to be the same as
implementations of this , . local . com will be considered to be the same as
local . com . A single * is the only valid wildcard , and effectively
local . com . A single * is the only valid wildcard , and effectively
disables the use of proxy . */
disables the use of proxy . */
CINIT ( NOPROXY , OBJECT POINT, 177 ) ,
CINIT ( NOPROXY , STRING POINT, 177 ) ,
/* block size for TFTP transfers */
/* block size for TFTP transfers */
CINIT ( TFTP_BLKSIZE , LONG , 178 ) ,
CINIT ( TFTP_BLKSIZE , LONG , 178 ) ,
/* Socks Service */
/* Socks Service */
CINIT ( SOCKS5_GSSAPI_SERVICE , OBJECTPOINT, 179 ) ,
CINIT ( SOCKS5_GSSAPI_SERVICE , STRINGPOINT, 179 ) , /* DEPRECATED, do not use! */
/* Socks Service */
/* Socks Service */
CINIT ( SOCKS5_GSSAPI_NEC , LONG , 180 ) ,
CINIT ( SOCKS5_GSSAPI_NEC , LONG , 180 ) ,
@ -1462,7 +1490,7 @@ typedef enum {
CINIT ( REDIR_PROTOCOLS , LONG , 182 ) ,
CINIT ( REDIR_PROTOCOLS , LONG , 182 ) ,
/* set the SSH knownhost file name to use */
/* set the SSH knownhost file name to use */
CINIT ( SSH_KNOWNHOSTS , OBJECT POINT, 183 ) ,
CINIT ( SSH_KNOWNHOSTS , STRING POINT, 183 ) ,
/* set the SSH host key callback, must point to a curl_sshkeycallback
/* set the SSH host key callback, must point to a curl_sshkeycallback
function */
function */
@ -1472,9 +1500,9 @@ typedef enum {
CINIT ( SSH_KEYDATA , OBJECTPOINT , 185 ) ,
CINIT ( SSH_KEYDATA , OBJECTPOINT , 185 ) ,
/* set the SMTP mail originator */
/* set the SMTP mail originator */
CINIT ( MAIL_FROM , OBJECT POINT, 186 ) ,
CINIT ( MAIL_FROM , STRING POINT, 186 ) ,
/* set the SMTP mail receiver(s) */
/* set the list of SMTP mail receiver(s) */
CINIT ( MAIL_RCPT , OBJECTPOINT , 187 ) ,
CINIT ( MAIL_RCPT , OBJECTPOINT , 187 ) ,
/* FTP: send PRET before PASV */
/* FTP: send PRET before PASV */
@ -1484,13 +1512,13 @@ typedef enum {
CINIT ( RTSP_REQUEST , LONG , 189 ) ,
CINIT ( RTSP_REQUEST , LONG , 189 ) ,
/* The RTSP session identifier */
/* The RTSP session identifier */
CINIT ( RTSP_SESSION_ID , OBJECT POINT, 190 ) ,
CINIT ( RTSP_SESSION_ID , STRING POINT, 190 ) ,
/* The RTSP stream URI */
/* The RTSP stream URI */
CINIT ( RTSP_STREAM_URI , OBJECT POINT, 191 ) ,
CINIT ( RTSP_STREAM_URI , STRING POINT, 191 ) ,
/* The Transport: header to use in RTSP requests */
/* The Transport: header to use in RTSP requests */
CINIT ( RTSP_TRANSPORT , OBJECT POINT, 192 ) ,
CINIT ( RTSP_TRANSPORT , STRING POINT, 192 ) ,
/* Manually initialize the client RTSP CSeq for this handle */
/* Manually initialize the client RTSP CSeq for this handle */
CINIT ( RTSP_CLIENT_CSEQ , LONG , 193 ) ,
CINIT ( RTSP_CLIENT_CSEQ , LONG , 193 ) ,
@ -1528,13 +1556,13 @@ typedef enum {
CINIT ( RESOLVE , OBJECTPOINT , 203 ) ,
CINIT ( RESOLVE , OBJECTPOINT , 203 ) ,
/* Set a username for authenticated TLS */
/* Set a username for authenticated TLS */
CINIT ( TLSAUTH_USERNAME , OBJECT POINT, 204 ) ,
CINIT ( TLSAUTH_USERNAME , STRING POINT, 204 ) ,
/* Set a password for authenticated TLS */
/* Set a password for authenticated TLS */
CINIT ( TLSAUTH_PASSWORD , OBJECT POINT, 205 ) ,
CINIT ( TLSAUTH_PASSWORD , STRING POINT, 205 ) ,
/* Set authentication type for authenticated TLS */
/* Set authentication type for authenticated TLS */
CINIT ( TLSAUTH_TYPE , OBJECT POINT, 206 ) ,
CINIT ( TLSAUTH_TYPE , STRING POINT, 206 ) ,
/* Set to 1 to enable the "TE:" header in HTTP requests to ask for
/* 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 :
compressed transfer - encoded responses . Set to 0 to disable the use of TE :
@ -1557,7 +1585,7 @@ typedef enum {
CINIT ( GSSAPI_DELEGATION , LONG , 210 ) ,
CINIT ( GSSAPI_DELEGATION , LONG , 210 ) ,
/* Set the name servers to use for DNS resolution */
/* Set the name servers to use for DNS resolution */
CINIT ( DNS_SERVERS , OBJECT POINT, 211 ) ,
CINIT ( DNS_SERVERS , STRING POINT, 211 ) ,
/* Time-out accept operations (currently for FTP only) after this amount
/* Time-out accept operations (currently for FTP only) after this amount
of miliseconds . */
of miliseconds . */
@ -1574,7 +1602,7 @@ typedef enum {
CINIT ( SSL_OPTIONS , LONG , 216 ) ,
CINIT ( SSL_OPTIONS , LONG , 216 ) ,
/* Set the SMTP auth originator */
/* Set the SMTP auth originator */
CINIT ( MAIL_AUTH , OBJECT POINT, 217 ) ,
CINIT ( MAIL_AUTH , STRING POINT, 217 ) ,
/* Enable/disable SASL initial response */
/* Enable/disable SASL initial response */
CINIT ( SASL_IR , LONG , 218 ) ,
CINIT ( SASL_IR , LONG , 218 ) ,
@ -1585,23 +1613,23 @@ typedef enum {
CINIT ( XFERINFOFUNCTION , FUNCTIONPOINT , 219 ) ,
CINIT ( XFERINFOFUNCTION , FUNCTIONPOINT , 219 ) ,
/* The XOAUTH2 bearer token */
/* The XOAUTH2 bearer token */
CINIT ( XOAUTH2_BEARER , OBJECT POINT, 220 ) ,
CINIT ( XOAUTH2_BEARER , STRING POINT, 220 ) ,
/* Set the interface string to use as outgoing network
/* Set the interface string to use as outgoing network
* interface for DNS requests .
* interface for DNS requests .
* Only supported by the c - ares DNS backend */
* Only supported by the c - ares DNS backend */
CINIT ( DNS_INTERFACE , OBJECT POINT, 221 ) ,
CINIT ( DNS_INTERFACE , STRING POINT, 221 ) ,
/* Set the local IPv4 address to use for outgoing DNS requests.
/* Set the local IPv4 address to use for outgoing DNS requests.
* Only supported by the c - ares DNS backend */
* Only supported by the c - ares DNS backend */
CINIT ( DNS_LOCAL_IP4 , OBJECT POINT, 222 ) ,
CINIT ( DNS_LOCAL_IP4 , STRING POINT, 222 ) ,
/* Set the local IPv4 address to use for outgoing DNS requests.
/* Set the local IPv4 address to use for outgoing DNS requests.
* Only supported by the c - ares DNS backend */
* Only supported by the c - ares DNS backend */
CINIT ( DNS_LOCAL_IP6 , OBJECT POINT, 223 ) ,
CINIT ( DNS_LOCAL_IP6 , STRING POINT, 223 ) ,
/* Set authentication options directly */
/* Set authentication options directly */
CINIT ( LOGIN_OPTIONS , OBJECT POINT, 224 ) ,
CINIT ( LOGIN_OPTIONS , STRING POINT, 224 ) ,
/* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
/* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
CINIT ( SSL_ENABLE_NPN , LONG , 225 ) ,
CINIT ( SSL_ENABLE_NPN , LONG , 225 ) ,
@ -1622,10 +1650,10 @@ typedef enum {
/* The public key in DER form used to validate the peer public key
/* The public key in DER form used to validate the peer public key
this option is used only if SSL_VERIFYPEER is true */
this option is used only if SSL_VERIFYPEER is true */
CINIT ( PINNEDPUBLICKEY , OBJECT POINT, 230 ) ,
CINIT ( PINNEDPUBLICKEY , STRING POINT, 230 ) ,
/* Path to Unix domain socket */
/* Path to Unix domain socket */
CINIT ( UNIX_SOCKET_PATH , OBJECT POINT, 231 ) ,
CINIT ( UNIX_SOCKET_PATH , STRING POINT, 231 ) ,
/* Set if we should verify the certificate status. */
/* Set if we should verify the certificate status. */
CINIT ( SSL_VERIFYSTATUS , LONG , 232 ) ,
CINIT ( SSL_VERIFYSTATUS , LONG , 232 ) ,
@ -1637,14 +1665,36 @@ typedef enum {
CINIT ( PATH_AS_IS , LONG , 234 ) ,
CINIT ( PATH_AS_IS , LONG , 234 ) ,
/* Proxy Service Name */
/* Proxy Service Name */
CINIT ( PROXY_SERVICE_NAME , OBJECT POINT, 235 ) ,
CINIT ( PROXY_SERVICE_NAME , STRING POINT, 235 ) ,
/* Service Name */
/* Service Name */
CINIT ( SERVICE_NAME , OBJECT POINT, 236 ) ,
CINIT ( SERVICE_NAME , STRING POINT, 236 ) ,
/* Wait/don't wait for pipe/mutex to clarify */
/* Wait/don't wait for pipe/mutex to clarify */
CINIT ( PIPEWAIT , LONG , 237 ) ,
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 , OBJECTPOINT , 243 ) ,
/* Set TCP Fast Open */
CINIT ( TCP_FASTOPEN , LONG , 244 ) ,
CURLOPT_LASTENTRY /* the last unused */
CURLOPT_LASTENTRY /* the last unused */
} CURLoption ;
} CURLoption ;
@ -1694,7 +1744,10 @@ enum {
for us ! */
for us ! */
CURL_HTTP_VERSION_1_0 , /* please use HTTP 1.0 in the request */
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_1_1 , /* please use HTTP 1.1 in the request */
CURL_HTTP_VERSION_2_0 , /* please use HTTP 2.0 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 */
CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
} ;
} ;
@ -1819,6 +1872,7 @@ typedef enum {
CFINIT ( OBSOLETE2 ) ,
CFINIT ( OBSOLETE2 ) ,
CFINIT ( STREAM ) ,
CFINIT ( STREAM ) ,
CFINIT ( CONTENTLEN ) , /* added in 7.46.0, provide a curl_off_t length */
CURLFORM_LASTENTRY /* the last unused */
CURLFORM_LASTENTRY /* the last unused */
} CURLformoption ;
} CURLformoption ;
@ -2073,12 +2127,18 @@ typedef enum {
CURLSSLBACKEND_CYASSL = 7 ,
CURLSSLBACKEND_CYASSL = 7 ,
CURLSSLBACKEND_SCHANNEL = 8 ,
CURLSSLBACKEND_SCHANNEL = 8 ,
CURLSSLBACKEND_DARWINSSL = 9 ,
CURLSSLBACKEND_DARWINSSL = 9 ,
CURLSSLBACKEND_AXTLS = 10
CURLSSLBACKEND_AXTLS = 10 ,
CURLSSLBACKEND_MBEDTLS = 11
} curl_sslbackend ;
} curl_sslbackend ;
/* aliases for library clones and renames */
# define CURLSSLBACKEND_LIBRESSL 1
# define CURLSSLBACKEND_BORINGSSL 1
# define CURLSSLBACKEND_WOLFSSL 6
/* Information about the SSL library used and the respective internal SSL
/* Information about the SSL library used and the respective internal SSL
handle , which can be used to obtain further information regarding the
handle , which can be used to obtain further information regarding the
connection . Asked for with CURLINFO_TLS_SESSION . */
connection . Asked for with CURLINFO_TLS_S SL_PTR or CURLINFO_TLS_S ESSION. */
struct curl_tlssessioninfo {
struct curl_tlssessioninfo {
curl_sslbackend backend ;
curl_sslbackend backend ;
void * internals ;
void * internals ;
@ -2088,6 +2148,7 @@ struct curl_tlssessioninfo {
# define CURLINFO_LONG 0x200000
# define CURLINFO_LONG 0x200000
# define CURLINFO_DOUBLE 0x300000
# define CURLINFO_DOUBLE 0x300000
# define CURLINFO_SLIST 0x400000
# define CURLINFO_SLIST 0x400000
# define CURLINFO_SOCKET 0x500000
# define CURLINFO_MASK 0x0fffff
# define CURLINFO_MASK 0x0fffff
# define CURLINFO_TYPEMASK 0xf00000
# define CURLINFO_TYPEMASK 0xf00000
@ -2136,9 +2197,12 @@ typedef enum {
CURLINFO_LOCAL_IP = CURLINFO_STRING + 41 ,
CURLINFO_LOCAL_IP = CURLINFO_STRING + 41 ,
CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42 ,
CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42 ,
CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43 ,
CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43 ,
CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44 ,
CURLINFO_TLS_SSL_PTR = CURLINFO_SLIST + 45 ,
CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46 ,
/* Fill in new entries below here! */
/* Fill in new entries below here! */
CURLINFO_LASTONE = 43
CURLINFO_LASTONE = 4 6
} CURLINFO ;
} CURLINFO ;
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
@ -2200,7 +2264,6 @@ typedef void (*curl_unlock_function)(CURL *handle,
curl_lock_data data ,
curl_lock_data data ,
void * userptr ) ;
void * userptr ) ;
typedef void CURLSH ;
typedef enum {
typedef enum {
CURLSHE_OK , /* all is fine */
CURLSHE_OK , /* all is fine */
@ -2298,6 +2361,8 @@ typedef struct {
# define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */
# 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_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */
# define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */
# 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 */
/*
/*
* NAME curl_version_info ( )
* NAME curl_version_info ( )