diff options
Diffstat (limited to 'pawn/scripting/include')
| -rw-r--r-- | pawn/scripting/include/cURL.inc | 565 | ||||
| -rw-r--r-- | pawn/scripting/include/cURL_header.inc | 1206 | 
2 files changed, 1771 insertions, 0 deletions
| diff --git a/pawn/scripting/include/cURL.inc b/pawn/scripting/include/cURL.inc new file mode 100644 index 0000000..1d79093 --- /dev/null +++ b/pawn/scripting/include/cURL.inc @@ -0,0 +1,565 @@ + +#if defined _cURL_included +  #endinput +#endif +#define _cURL_included + +#include <cURL_header> + + +/* +======================================== +The Following CURLOPT_* NOT support  +ERRORBUFFER              // use curl_get_error_buffer +WRITEINFO                // ??? +PROGRESSFUNCTION         // unused +PROGRESSDATA             // same +HEADERFUNCTION           // unused +DEBUGFUNCTION            // unused +DEBUGDATA                // same +SHARE                    // unsupport +PRIVATE                  // unsupport +SSL_CTX_FUNC             // unused +SSL_CTX_DATA             // same +IOCTLFUNCTION            // unused +IOCTLDATA                // same +CONV_FROM_NETWORK_FUNC   // unused +CONV_TO_NETWORK_FUNC     // unused +CONV_FROM_UTF8_FUNC      // unused +SOCKOPTFUNCTION          // unused +SOCKOPTDATA              // unused +OPENSOCKETFUNCTION       // used +OPENSOCKETDATA           // used +COPYPOSTFIELDS           // unsupport +SEEKFUNCTION             // unused +SEEKDATA                 // unused +SOCKS5_GSSAPI_SERVICE    // unsupport +SOCKS5_GSSAPI_NEC        // unsupport +SSH_KEYFUNCTION          // unsupport +SSH_KEYDATA              // unsupport +INTERLEAVEFUNCTION       // unsupport +CHUNK_BGN_FUNC           // unsupport +CHUNK_END_FUNC           // unsupport +FNMATCH_FUNC             // unsupport +CHUNK_DATA               // unsupport +FNMATCH_DATA             // unsupport +TLSAUTH_USERNAME         // unsupport, require tls-srp +TLSAUTH_PASSWORD         // unsupport, require tls-srp +TLSAUTH_TYPE             // unsupport, require tls-srp +CLOSESOCKETFUNCTION      // unsupport +CLOSESOCKETDATA          // unsupport +========================================*/ + +/* +======================================== +The Following CURLOPT_* supports the "file //" notation. +COOKIEFILE +COOKIEJAR +RANDOM_FILE +EGDSOCKET +SSLKEY +CAPATH +NETRC_FILE +SSH_PUBLIC_KEYFILE +SSH_PRIVATE_KEYFILE +_CRLFILE +ISSUERCERT +SSH_KNOWNHOSTS + +========================================*/ + +/* +======================================== +The Following CURLINFO_* NOT support  +CURLINFO_SLIST + +========================================*/ + +/* +======================================== +The Following CURLFORM_* NOT support  +CURLFORM_PTRNAME +CURLFORM_PTRCONTENTS +CURLFORM_ARRAY +CURLFORM_BUFFER +CURLFORM_BUFFERPTR +CURLFORM_BUFFERLENGTH +CURLFORM_STREAM + +========================================*/ + + + + +/*************************************************************************************************/ +/******************************************** OPTIONS ********************************************/ +/*************************************************************************************************/ + + +/** + * The Send & Receive Action + * Using on CURL_OnSend, CURL_OnReceive + * SendRecv_Act_GOTO_SEND = go to send + * SendRecv_Act_GOTO_RECV = go to receive + * SendRecv_Act_GOTO_WAIT = go to wait + * SendRecv_Act_GOTO_END = end the connection + * SendRecv_Act_GOTO_SEND_NO_WAIT = go to send but no select + * SendRecv_Act_GOTO_RECV_NO_WAIT = go to receive but no select + * To see how it work? see curl_echo_test.sp & curl_rcon_test.sp examples + */ +enum SendRecv_Act { +	SendRecv_Act_NOTHING = 0, + +	SendRecv_Act_GOTO_SEND, +	SendRecv_Act_GOTO_RECV, +	SendRecv_Act_GOTO_WAIT, +	SendRecv_Act_GOTO_END, +	SendRecv_Act_GOTO_SEND_NO_WAIT, +	SendRecv_Act_GOTO_RECV_NO_WAIT, + +	SendRecv_Act_LAST, +}; + +/** + * Hash type for curl_hash_file, curl_hash_string + */ +enum Openssl_Hash { +	Openssl_Hash_MD5 = 0, +	Openssl_Hash_MD4, +	Openssl_Hash_MD2, +	Openssl_Hash_SHA, +	Openssl_Hash_SHA1, +	Openssl_Hash_SHA224, +	Openssl_Hash_SHA256, +	Openssl_Hash_SHA384, +	Openssl_Hash_SHA512, +	Openssl_Hash_RIPEMD160, +}; + + +/*************************************************************************************************/ +/******************************************* CALLBACKS *******************************************/ +/*************************************************************************************************/ + + +/** + * called if curl_easy_perform_thread() or curl_easy_send_recv() Complete + * @ param Handle	hndl		The curl handle + * @ param CURLcode	code		The CURLcode code, see cURL_header.inc + * @ param any		data		Data passed to curl_easy_perform_thread() + * @ noreturn + */ +typeset CURL_OnComplete +{ +	function void (Handle hndl, CURLcode code); +	function void (Handle hndl, CURLcode code , any data); +}; + +/** + * called if curl_easy_send_recv() before sending data + * @ param Handle	hndl				The curl handle + * @ param CURLcode	code				The last CURLcode code, see cURL_header.inc + * @ param cell_t	last_sent_dataSize	The last sent datasize + * @ param any		data				Data passed to curl_easy_send_recv() + * @ return 								SendRecv_Act + */ +typeset CURL_OnSend +{ +	function SendRecv_Act (Handle hndl, CURLcode code, const int last_sent_dataSize); +	function SendRecv_Act (Handle hndl, CURLcode code, const int last_sent_dataSize, any data); +} + +/** + * called if curl_easy_send_recv() after received data + * @ param Handle	hndl		The curl handle + * @ param CURLcode	code		The CURLcode code, see cURL_header.inc + * @ param String	dataSize	The received datasize + * @ param any		data		Data passed to curl_easy_send_recv() + * @ return 						SendRecv_Act + */ +typeset CURL_OnReceive +{ +	function SendRecv_Act (Handle hndl, CURLcode code, const char[] receiveData, const int dataSize); +	function SendRecv_Act (Handle hndl, CURLcode code, const char[] receiveData, const int dataSize, any data); +} + +/** + * called if Openssl_Hash_file() after hashed the file + * @ param bool		success		True on success, false if hash file fail + * @ param String	buffer		The hash string + * @ param any		data		Data passed to Openssl_Hash_file() + * @ noreturn + */ +typeset Openssl_Hash_Complete +{ +	function void (const bool success, const char[] buffer); +	function void (const bool success, const char[] buffer, any data); +} + + +typeset CURL_Function_CB +{ +	// CURLOPT_WRITEFUNCTION +	function void (Handle hndl, const char[] buffer, const int bytes, const int nmemb); +	function void (Handle hndl, const char[] buffer, const int bytes, const int nmemb, any data); +	 +	// CURLOPT_READFUNCTION +	function void (Handle hndl, const int bytes, const int nmemb); +	function void (Handle hndl, const int bytes, const int nmemb, any data); +} + +/*************************************************************************************************/ +/******************************************** NATIVES ********************************************/ +/*************************************************************************************************/ + + +/** + * Create a curl handle + * @ return Handle				The curl handle. Returns INVALID_HANDLE on failure + */ +native Handle curl_easy_init(); + +/** + * Set a curl option for CURLOPTTYPE_OBJECTPOINT type + * + * @ param Handle		hndl	The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURLoption	opt		The option to add (see enum CURLoption for details). + * @ param String		buffer	The value to set the option to. + * @ return bool				1 on success. 0 = The option not accept string or unsupport. + */ +native bool curl_easy_setopt_string(Handle hndl, CURLoption opt, const char[] buffer); + +/** + * Set a curl option for CURLOPTTYPE_LONG type + * + * @ param Handle		hndl	The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURLoption	opt		The option to add (see enum CURLoption for details). + * @ param cell_t		value	The value to set the option to. + * @ return bool				1 on success. 0 = The option not accept integer or unsupport. + */ +native bool curl_easy_setopt_int(Handle hndl, CURLoption opt, int value); + +/** + * Set a curl option for CURLOPTTYPE_LONG type + * @ example" +	new opt[][2] = { +		{_ CURLOPT_NOPROGRESS,1}, +		{_ CURLOPT_VERBOSE,0} +	}; + * + * @ param Handle		hndl		The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param cell_t		array		The option array to add (see enum CURLoption for details). + * @ param cell_t		array_size	The array size. + * @ return bool					1 on success. 0 = The option not accept integer or unsupport. + */ +native bool curl_easy_setopt_int_array(Handle hndl, int[][] array, int array_size); // int array[][2] + +/** + * Set a curl option for CURLOPTTYPE_OFF_T type + * + * @ param Handle		hndl	The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURLoption	opt		The option to add (see enum CURLoption for details). + * @ param String		buffer	The value to set the option to. + * @ return bool				1 on success. 0 = The option not accept string or unsupport. + */ +native bool curl_easy_setopt_int64(Handle hndl, CURLoption opt, const char buffer); + +/** + * Set a curl option for CURLOPTTYPE_OBJECTPOINT type + * @ note only accept the following handle type + 	curl_OpenFile() + 	curl_httppost() + 	curl_slist() + * + * @ param Handle		hndl		The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURLoption	opt			The option to add (see enum CURLoption for details). + * @ param Handle		other_hndl	The other handle to set the option to. + * @ return bool					1 on success. 0 = The option not accept string or unsupport. + */ +native bool curl_easy_setopt_handle(Handle hndl, CURLoption opt, Handle other_hndl); + +/** + * Set a curl option for CURLOPTTYPE_FUNCTIONPOINT type + * + * @ param Handle				hndl		The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURLoption			opt			The option to add (see enum CURLoption for details). + * @ param CURL_Function_CB		callback	The value to set the option to. + * @ param cell_t				value		Value to set. + * @ return bool							1 on success. 0 = The option unsupport or invalid callback function. + */ +native bool curl_easy_setopt_function(Handle hndl, CURLoption opt, CURL_Function_CB callback, any value=0); + +/** + * Load all CURLoption to curl Handle + * @ note + * 		Using curl_easy_perform_thread() will load option in thread + * 		Use this on curl_easy_perform or check all CURLoption are valid or not + * 		Only can use one time for each curl handle + * @ return 		The CURLcode code, see cURL_header.inc + */ +native CURLcode curl_load_opt(Handle hndl); + +/** + * Perform a file transfer + * @ return 		The CURLcode code, see cURL_header.inc + */ +native CURLcode curl_easy_perform(Handle hndl); + +/** + * Perform a file transfer, using thread + * @ param Handle			hndl				The handle of the curl to be used. May be INVALID_HANDLE if not essential. + * @ param CURL_OnComplete	perform_callback	The complete callback. + * @ param cell_t			value				Value to set. + * @ noreturn + */ +native void curl_easy_perform_thread(Handle hndl, CURL_OnComplete perform_callback, any value=0); + +/** + * Create a send & receive function for a connected curl handle + * @ param Handle			hndl				The handle of the curl to be used. + * @ param CURL_OnSend		send_callback		The send callback. + * @ param CURL_OnReceive	receive_callback	The receive callback. + * @ param CURL_OnComplete	complete_callback	The complete callback. + * @ param SendRecv_Act		act 				The first SendRecv_Act action + * @ param cell_t			send_timeout 		Send timeout value in milliseconds. + * @ param cell_t			recv_timeout 		Receive timeout value in milliseconds. + * @ param cenn_t			recv_buffer_Size	Receive buffer size. + * @ param cell_t			value				Value to set. + * @ noreturn + */ +native void curl_easy_send_recv(Handle hndl, CURL_OnSend send_callback, CURL_OnReceive receive_callback, CURL_OnComplete complete_callback, SendRecv_Act act, int send_timeout, int recv_timeout, int recv_buffer_Size = 1024, any value=0); + +/** + * Send a signal to a send & receive curl handle  + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ param SendRecv_Act		act				The SendRecv_Act action after the singal + * @ return bool							1 on success. 0 = not a curl_easy_send_recv() curl, or not running/waiting + */ +native bool curl_send_recv_Signal(Handle hndl, SendRecv_Act act); + +/** + * Check send & receive curl handle is Waiting or not + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ return bool		1 = is waiting. 0 = not a curl_easy_send_recv() curl, or not running/waiting + */ +native bool curl_send_recv_IsWaiting(Handle hndl); + +/** + * Send the send buffer for send & receive curl handle + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ param cell_t			data			The data to send + * @ param cell_t			size			if specified the \0 terminator will not be included + * @ noreturn + */ +native void curl_set_send_buffer(Handle hndl, const char[] data, int size=-1); + +/** + * Send the receive data size for send & receive curl handle + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ param cell_t			size			The receive size + * @ noreturn + */ +native void curl_set_receive_size(Handle hndl, int size); + +/** + * Set send timeout for curl_easy_send_recv() + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ param cell_t			timeout			How long will try to send data before it timeout (milliseconds). + * @ noreturn + */ +native void curl_set_send_timeout(Handle hndl, int timeout); + +/** + * Set receive timeout for curl_easy_send_recv() + * @ param Handle			hndl			The handle of the send & receive curl to be used. + * @ param cell_t			timeout			How long will try to receive data before it timeout (milliseconds). + * @ noreturn + */ +native void curl_set_recv_timeout(Handle hndl, int timeout); + +/** + * Get CURLOPT_ERRORBUFFER error string in curl handle + * @ param Handle		hndl		The handle of the curl to be used. + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ noreturn + */ +native void curl_get_error_buffer(Handle hndl, char[] buffer, int maxlen); + +/** + * Extract information from a curl handle. (CURLINFO_STRING only) + * @ param Handle		hndl		The handle of the curl to be used. + * @ param CURLINFO		info		The enum CURLINFO, see cURL_header.inc + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ return 						The CURLcode code, see cURL_header.inc + */ +native CURLcode curl_easy_getinfo_string(Handle hndl, CURLINFO info, char[] buffer, int maxlen); + +/** + * Extract information from a curl handle. (CURLINFO_LONG, CURLINFO_DOUBLE only) + * @ param Handle		hndl		The handle of the curl to be used. + * @ param CURLINFO		info		The enum CURLINFO, see cURL_header.inc + * @ param 				value		Variable to store the value. + * @ return 						The CURLcode code, see cURL_header.inc + */ +native CURLcode curl_easy_getinfo_int(Handle hndl, CURLINFO info, any &value); + +/** + * URL encodes the given string  + * @ param Handle		hndl		The handle of the curl to be used. + * @ param String		url			The string to encodes. + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ return 						1 on success. + */ +native bool curl_easy_escape(Handle hndl, const char[] url, char[] buffer, int maxlen); + +/** + * URL decodes the given string  + * @ param Handle		hndl		The handle of the curl to be used. + * @ param String		url			The string to dencodes. + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ return 						The output length. + */ +native int curl_easy_unescape(Handle hndl, const char[] url, char[] buffer, int maxlen); + +/** + * Return string describing error code + * @ param CURLcode		code		The CURLcode code, see cURL_header.inc + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ noreturn + */ +native void curl_easy_strerror(CURLcode code, char[] buffer, int maxlen); + +/** + * Returns the libcurl version string + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ noreturn + */ +native void curl_version(char[] buffer, int maxlen); + +/** + * Returns the libcurl supported protocols string + * @ param String		buffer		Destination string buffer to copy to. + * @ param cell_t		maxlen		Destination buffer length (includes null terminator). + * @ noreturn + */ +native void curl_protocols(char[] buffer, int maxlen); + +/** + * Returns the libcurl supported features + * @ return			The currently features bits. see CURL_VERSION_* + */ +native int curl_features(); + +/** + * This funcitopn same as Sourcemod OpenFile() + * For the following CUROPT_* only + * 		CURLOPT_WRITEDATA + *		CURLOPT_HEADERDATA + *		CURLOPT_READDATA + *		CURLOPT_STDERR + *		CURLOPT_INTERLEAVEDATA + * + * @ note + * 		Should not share to another threaded curl handle. + * + * @ param file			File to open. + * @ param mode			Open mode. + * @ return				A Handle to the file, INVALID_HANDLE on open error. + */ +native Handle curl_OpenFile(const char[] file, const char[] mode); + + +/** + * Create a curl_httppost struct + * For the following CUROPT_* only + * 		CURLOPT_HTTPPOST + * @ note + * 		Should not share to another threaded curl handle. + * + * @ return				A Handle to the curl_httppost, INVALID_HANDLE on error. + */ +native Handle curl_httppost(); + +/** + * Add a section to a multipart/formdata HTTP POST + * @ note + *		Check enum CURLformoption (cURL_head.inc) to see which option supported + * + * @ param Handle		hndl		The handle of the curl_httppost to be used. + * @ param 				...			Variable number of format parameters. + * @ return 						The CURLFORMcode code, see cURL_header.inc + */ +native CURLFORMcode curl_formadd(Handle handl, any ...); + +/** + * Create a curl_slist struct + * For the following CUROPT_* only + * 		CURLOPT_QUOTE + *		CURLOPT_HTTPHEADER + *		CURLOPT_POSTQUOTE + *		CURLOPT_TELNETOPTIONS + *		CURLOPT_PREQUOTE + *		CURLOPT_HTTP200ALIASES + *		CURLOPT_MAIL_RCPT + *		CURLOPT_RESOLVE + * + * @ note + * 		Should not share to another threaded curl handle. + * + * @ return				A Handle to the curl_slist, INVALID_HANDLE on error. + */ +native Handle curl_slist(); + +/** + *  Add a string to an slist + * @ param Handle		hndl		The handle of the curl_slist to be used. + * @ param String		buffer		The string to add + * @ noreturn + */ +native void curl_slist_append(Handle hndl, const char[] buffer); + +/** + * Hash a file + * @ parma String					file 				The file path. supports the "file //" notation. + * @ param Openssl_Hash				algorithm			Hash Algorithm. + * @ param Openssl_Hash_Complete	complete_callback	The complete callback. + * @ param cell_t					value				Value to set. + * @ noreturn + */ +native void curl_hash_file(const char[] file, Openssl_Hash algorithm, Openssl_Hash_Complete complete_callback, any value=0); + +/** + * Hash a string + * @ parma String			input			The string to hash. + * @ param cell_t			dataSize		The input string size. + * @ param Openssl_Hash		algorithm		Hash Algorithm. + * @ param String			buffer			Destination string buffer to copy to. + * @ param cell_t			maxlen			Destination buffer length (includes null terminator). + * @ return									1 on success + */ +native bool curl_hash_string(const char[] input, int dataSize, Openssl_Hash algorithm, char[] buffer, int maxlength); + + +/** + * Do not edit below this line! + */ +public Extension __ext_curl = { +	name = "curl", +	file = "curl.ext", +#if defined AUTOLOAD_EXTENSIONS +	autoload = 1, +#else +	autoload = 0, +#endif +#if defined REQUIRE_EXTENSIONS +	required = 1, +#else +	required = 0, +#endif +}; diff --git a/pawn/scripting/include/cURL_header.inc b/pawn/scripting/include/cURL_header.inc new file mode 100644 index 0000000..cf51cf1 --- /dev/null +++ b/pawn/scripting/include/cURL_header.inc @@ -0,0 +1,1206 @@ +#if defined _cURL_header_included +  #endinput +#endif +#define _cURL_header_included + + +/* SourceMod */ +#define LONG 					CURLOPTTYPE_LONG +#define OBJECTPOINT 			CURLOPTTYPE_OBJECTPOINT +#define FUNCTIONPOINT 			CURLOPTTYPE_FUNCTIONPOINT +#define OFF_T 					CURLOPTTYPE_OFF_T +	 + +#define CURL_MAX_WRITE_SIZE 16384 + +#define CURL_VERSION_IPV6      (1<<0)  /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1)  /* kerberos auth is supported */ +#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 support */ +#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 */ +#define CURL_VERSION_LARGEFILE (1<<9)  /* supports files bigger than 2GB */ +#define CURL_VERSION_IDN       (1<<10) /* International Domain Names support */ +#define CURL_VERSION_SSPI      (1<<11) /* SSPI is supported */ +#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 delegating to winbind helper */ + + +#define CURLOPTTYPE_LONG          0 +#define CURLOPTTYPE_OBJECTPOINT   10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T         30000 + +#define CINIT(%1,%2,%3) CURLOPT_%1 = %2 + %3 + +  /* three convenient "aliases" that follow the name scheme better */ +#define CURLOPT_WRITEDATA CURLOPT_FILE +#define CURLOPT_READDATA  CURLOPT_INFILE +#define CURLOPT_HEADERDATA CURLOPT_WRITEHEADER +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* 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 + +enum CURLoption { +  /* This is the FILE * or void * the regular output should be written to. */ +  CINIT(FILE, OBJECTPOINT, 1), + +  /* The full URL to get/put */ +  CINIT(URL,  OBJECTPOINT, 2), + +  /* Port number to connect to, if other than default. */ +  CINIT(PORT, LONG, 3), + +  /* Name of proxy to use. */ +  CINIT(PROXY, OBJECTPOINT, 4), + +  /* "name:password" to use when fetching. */ +  CINIT(USERPWD, OBJECTPOINT, 5), + +  /* "name:password" to use with proxy. */ +  CINIT(PROXYUSERPWD, OBJECTPOINT, 6), + +  /* Range to get, specified as an ASCII string. */ +  CINIT(RANGE, OBJECTPOINT, 7), + +  /* not used */ + +  /* Specified file stream to upload from (use as input): */ +  CINIT(INFILE, OBJECTPOINT, 9), + +  /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE +   * bytes big. If this is not used, error messages go to stderr instead: */ +  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, OBJECTPOINT, 16), + +  /* Set the FTP PORT string (interface name, named or numerical IP address) +     Use i.e '-' to use default address. */ +  CINIT(FTPPORT, OBJECTPOINT, 17), + +  /* Set the User-Agent string (examined by some CGIs) */ +  CINIT(USERAGENT, OBJECTPOINT, 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, OBJECTPOINT, 22), + +  /* This points to a linked list of headers, struct curl_slist kind */ +  CINIT(HTTPHEADER, OBJECTPOINT, 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, OBJECTPOINT, 25), + +  /* password for the SSL or SSH private key */ +  CINIT(KEYPASSWD, OBJECTPOINT, 26), + +  /* send TYPE parameter? */ +  CINIT(CRLF, LONG, 27), + +  /* send linked-list of QUOTE commands */ +  CINIT(QUOTE, OBJECTPOINT, 28), + +  /* send FILE * or void * to store headers to, if you use a callback it +     is simply passed to the callback unmodified */ +  CINIT(WRITEHEADER, OBJECTPOINT, 29), + +  /* point to a file to read the initial cookies from, also enables +     "cookie awareness" */ +  CINIT(COOKIEFILE, OBJECTPOINT, 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, OBJECTPOINT, 36), + +  /* HTTP request, for odd commands like DELETE, TRACE and others */ +  CINIT(STDERR, OBJECTPOINT, 37), + +  /* 38 is not used */ + +  /* send linked-list of post-transfer QUOTE commands */ +  CINIT(POSTQUOTE, OBJECTPOINT, 39), + +  /* Pass a pointer to string of the output using full variable-replacement +     as described elsewhere. */ +  CINIT(WRITEINFO, OBJECTPOINT, 40), /* DEPRECATED, 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 >= 300 */ +  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 */ + +  /* 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 progress callback */ +  CINIT(PROGRESSDATA, OBJECTPOINT, 57), + +  /* 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, OBJECTPOINT, 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, OBJECTPOINT, 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, OBJECTPOINT, 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, OBJECTPOINT, 70), + +  /* Max amount of cached alive connections */ +  CINIT(MAXCONNECTS, LONG, 71), + +  CINIT(CLOSEPOLICY, LONG, 72), /* DEPRECATED, 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, OBJECTPOINT, 76), + +  /* Set to the Entropy Gathering Daemon socket pathname */ +  CINIT(EGDSOCKET, OBJECTPOINT, 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. [Only works on unix-style/SIGALRM operating systems] */ +  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, OBJECTPOINT, 82), + +  /* Specify which SSL ciphers to use */ +  CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 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, OBJECTPOINT, 86), + +  /* name of the file keeping your private SSL-key */ +  CINIT(SSLKEY, OBJECTPOINT, 87), + +  /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ +  CINIT(SSLKEYTYPE, OBJECTPOINT, 88), + +  /* crypto engine for the SSL-sub system */ +  CINIT(SSLENGINE, OBJECTPOINT, 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, OBJECTPOINT, 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, OBJECTPOINT, 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_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, OBJECTPOINT, 102), + +  /* Set pointer to private data */ +  CINIT(PRIVATE, OBJECTPOINT, 103), + +  /* Set aliases for HTTP 200 in the HTTP Response header */ +  CINIT(HTTP200ALIASES, OBJECTPOINT, 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 ssl_ctx +     in second argument. The function must be matching the +     curl_ssl_ctx_callback proto. */ +  CINIT(SSL_CTX_FUNC, 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, OBJECTPOINT, 118), + +  /* Enable SSL/TLS for FTP, pick one of: +     CURLFTPSSL_TRY     - try using SSL, proceed anyway otherwise +     CURLFTPSSL_CONTROL - SSL for the control connection or fail +     CURLFTPSSL_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, OBJECTPOINT, 134), + +  /* feed cookies into cookie engine */ +  CINIT(COOKIELIST, OBJECTPOINT, 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_FUNC, 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_FUNC, 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_FUNC, 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, OBJECTPOINT, 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, OBJECTPOINT, 152), +  CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 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, OBJECTPOINT, 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=<a|i>) 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, OBJECTPOINT, 169), + +  /* Issuer certificate */ +  CINIT(ISSUERCERT, OBJECTPOINT, 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. (Unfortunately) only +     working with OpenSSL-powered builds. */ +  CINIT(CERTINFO, LONG, 172), + +  /* "name" and "pwd" to use when fetching. */ +  CINIT(USERNAME, OBJECTPOINT, 173), +  CINIT(PASSWORD, OBJECTPOINT, 174), + +    /* "name" and "pwd" to use with Proxy when fetching. */ +  CINIT(PROXYUSERNAME, OBJECTPOINT, 175), +  CINIT(PROXYPASSWORD, OBJECTPOINT, 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, OBJECTPOINT, 177), + +  /* block size for TFTP transfers */ +  CINIT(TFTP_BLKSIZE, LONG, 178), + +  /* Socks Service */ +  CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179), + +  /* 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, OBJECTPOINT, 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, OBJECTPOINT, 186), + +  /* set the SMTP mail receiver(s) */ +  CINIT(MAIL_RCPT, OBJECTPOINT, 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, OBJECTPOINT, 190), + +  /* The RTSP stream URI */ +  CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191), + +  /* The Transport: header to use in RTSP requests */ +  CINIT(RTSP_TRANSPORT, OBJECTPOINT, 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_FUNC, FUNCTIONPOINT, 198), + +  /* Directory matching callback called after the file (chunk) +     was downloaded, or skipped */ +  CINIT(CHUNK_END_FUNC, FUNCTIONPOINT, 199), + +  /* Change match (fnmatch-like) callback for wildcard matching */ +  CINIT(FNMATCH_FUNC, FUNCTIONPOINT, 200), + +  /* Let the application define custom chunk data pointer */ +  CINIT(CHUNK_DATA, OBJECTPOINT, 201), + +  /* FNMATCH_FUNC user pointer */ +  CINIT(FNMATCH_DATA, OBJECTPOINT, 202), + +  /* send linked-list of name:port:address sets */ +  CINIT(RESOLVE, OBJECTPOINT, 203), + +  /* Set a username for authenticated TLS */ +  CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204), + +  /* Set a password for authenticated TLS */ +  CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205), + +  /* Set authentication type for authenticated TLS */ +  CINIT(TLSAUTH_TYPE, OBJECTPOINT, 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), + +  CURLOPT_LASTENTRY /* the last unused */ +}; + + +enum CURLcode { +  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_FTP_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_OBSOLETE10,              /* 10 - NOT USED */ +  CURLE_FTP_WEIRD_PASS_REPLY,    /* 11 */ +  CURLE_OBSOLETE12,              /* 12 - NOT USED */ +  CURLE_FTP_WEIRD_PASV_REPLY,    /* 13 */ +  CURLE_FTP_WEIRD_227_FORMAT,    /* 14 */ +  CURLE_FTP_CANT_GET_HOST,       /* 15 */ +  CURLE_OBSOLETE16,              /* 16 - NOT USED */ +  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 */ +  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_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint +                                     wasn't verified fine */ +  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_SSL_CACERT,              /* 60 - problem with the CA cert (path?) */ +  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 */ + +  CURL_LAST /* never use! */ +}; + +/*  compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +enum curl_TimeCond { +  CURL_TIMECOND_NONE, + +  CURL_TIMECOND_IFMODSINCE, +  CURL_TIMECOND_IFUNMODSINCE, +  CURL_TIMECOND_LASTMOD, + +  CURL_TIMECOND_LAST +}; + +/* 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_closepolicy { +  CURLCLOSEPOLICY_NONE, /* first, never use this */ + +  CURLCLOSEPOLICY_OLDEST, +  CURLCLOSEPOLICY_LEAST_RECENTLY, // CURLCLOSEPOLICY_LEAST_RECENTLY_USED +  CURLCLOSEPOLICY_LEAST_TRAFFIC, +  CURLCLOSEPOLICY_SLOWEST, +  CURLCLOSEPOLICY_CALLBACK, + +  CURLCLOSEPOLICY_LAST /* last, never use this */ +}; + +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_LAST /* *ILLEGAL* http version */ +}; + + +#define CURLAUTH_NONE         0       /* nothing */ +#define CURLAUTH_BASIC        (1<<0)  /* Basic (default) */ +#define CURLAUTH_DIGEST       (1<<1)  /* Digest */ +#define CURLAUTH_GSSNEGOTIATE (1<<2)  /* GSS-Negotiate */ +#define CURLAUTH_NTLM         (1<<3)  /* NTLM */ +#define CURLAUTH_DIGEST_IE    (1<<4)  /* Digest with IE flavour */ +#define CURLAUTH_NTLM_WB      (1<<5)  /* NTLM delegating to winbind helper */ +#define CURLAUTH_ONLY         (1<<31) /* used together with a single other +                                         type to force no auth or just that +                                         single type */ +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)  /* all fine types set */ +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +enum curl_ftpcreatedir { +  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 */ +}; + + +  /* 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 */ + + +/* parameter for the CURLOPT_USE_SSL option */ +enum curl_usessl { +  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 */ +}; + + +enum { +  CURL_SSLVERSION_DEFAULT, +  CURL_SSLVERSION_TLSv1, +  CURL_SSLVERSION_SSLv2, +  CURL_SSLVERSION_SSLv3, + +  CURL_SSLVERSION_LAST /* never use, keep last */ +}; + + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +enum curl_ftpauth { +  CURLFTPAUTH_DEFAULT, /* let libcurl decide */ +  CURLFTPAUTH_SSL,     /* use "AUTH SSL" */ +  CURLFTPAUTH_TLS,     /* use "AUTH TLS" */ +  CURLFTPAUTH_LAST /* not an option, never use */ +}; + + +enum curl_ftpfile { +  FTPFILE_MULTICWD  = 1, /* as defined by RFC1738 */ +  FTPFILE_NOCWD     = 2, /* use SIZE / RETR / STOR on the full path */ +  FTPFILE_SINGLECWD = 3  /* make one CWD, then SIZE / RETR / STOR on the file */ +}; + + +#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_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 */ + + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +enum curl_ftpccc { +  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 */ +}; + + +/* symbols to use with CURLOPT_POSTREDIR. +   CURL_REDIR_POST_301 and CURL_REDIR_POST_302 can be bitwise ORed so that +   CURL_REDIR_POST_301 | CURL_REDIR_POST_302 == 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_ALL (CURL_REDIR_POST_301|CURL_REDIR_POST_302) + + +/* 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_ALL    (~0) /* enable everything */ + + +/* + * 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 */ +}; + + + +#define CURLINFO_STRING   0x100000 +#define CURLINFO_LONG     0x200000 +#define CURLINFO_DOUBLE   0x300000 +#define CURLINFO_SLIST    0x400000 +#define CURLINFO_MASK     0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 +	 +enum CURLINFO { +  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_DOWNLOAD    = CURLINFO_DOUBLE + 8, +  CURLINFO_SPEED_DOWNLOAD   = CURLINFO_DOUBLE + 9, +  CURLINFO_SPEED_UPLOAD     = CURLINFO_DOUBLE + 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_CONTENT_LEN_DOWNLOAD   = CURLINFO_DOUBLE + 15, +  CURLINFO_CONTENT_LEN_UPLOAD     = CURLINFO_DOUBLE + 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_SLIST  + 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, +  /* Fill in new entries below here! */ + +  CURLINFO_LASTONE          = 42 +}; + + +enum curl_proxytype { +  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_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 */ +}; + + +enum CURLformoption { +  CURLFORM_NOTHING,        /********* the first one is unused ************/ +  /*  */ +  CURLFORM_COPYNAME,       // char +  CURLFORM_PTRNAME,        // not support +  CURLFORM_NAMELENGTH,     // long +  CURLFORM_COPYCONTENTS,   // char +  CURLFORM_PTRCONTENTS,    // not support +  CURLFORM_CONTENTSLENGTH, // long +  CURLFORM_FILECONTENT,    // char +  CURLFORM_ARRAY,          // not support +  CURLFORM_OBSOLETE, +  CURLFORM_FILE,           // char +  CURLFORM_BUFFER,         // not support +  CURLFORM_BUFFERPTR,      // not support +  CURLFORM_BUFFERLENGTH,   // not support +  CURLFORM_CONTENTTYPE,    // char  +  CURLFORM_CONTENTHEADER,  // curl_slist +  CURLFORM_FILENAME,       // char +  CURLFORM_END,            // !! +  CURLFORM_OBSOLETE2, +  CURLFORM_STREAM,         // not support +  CURLFORM_LASTENTRY /* the last unused */ +}; + +enum CURLFORMcode { +  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 */ +}; | 
