From: Sterling Hughes Date: Sat, 22 Sep 2001 00:38:59 +0000 (+0000) Subject: update to curl 7.9 (when it comes out :) X-Git-Tag: PRE_SUBST_Z_MACROS~29 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8e78a00f2836bc9d01ab39f3558a123b0f4c01a;p=php update to curl 7.9 (when it comes out :) make REGISTER_CURL_CONSTANT() only take one argument couple of speed-up's few style fixes --- diff --git a/ext/curl/curl.c b/ext/curl/curl.c index 649632a054..efe195f9c7 100644 --- a/ext/curl/curl.c +++ b/ext/curl/curl.c @@ -72,7 +72,7 @@ zend_module_entry curl_module_entry = { "curl", curl_functions, PHP_MINIT(curl), - NULL, + PHP_MSHUTDOWN(curl), NULL, NULL, PHP_MINFO(curl), @@ -95,7 +95,7 @@ PHP_MINFO_FUNCTION(curl) } /* }}} */ -#define REGISTER_CURL_CONSTANT(name, value) REGISTER_LONG_CONSTANT(name, value, CONST_CS | CONST_PERSISTENT) +#define REGISTER_CURL_CONSTANT(__c) REGISTER_LONG_CONSTANT(#__c, __c, CONST_CS | CONST_PERSISTENT) /* {{{ PHP_MINIT_FUNCTION */ @@ -104,143 +104,166 @@ PHP_MINIT_FUNCTION(curl) le_curl = zend_register_list_destructors_ex(_php_curl_close, NULL, "curl", module_number); /* Constants for curl_setopt() */ - REGISTER_CURL_CONSTANT("CURLOPT_PORT", CURLOPT_PORT); - REGISTER_CURL_CONSTANT("CURLOPT_FILE", CURLOPT_FILE); - REGISTER_CURL_CONSTANT("CURLOPT_INFILE", CURLOPT_INFILE); - REGISTER_CURL_CONSTANT("CURLOPT_INFILESIZE", CURLOPT_INFILESIZE); - REGISTER_CURL_CONSTANT("CURLOPT_URL", CURLOPT_URL); - REGISTER_CURL_CONSTANT("CURLOPT_PROXY", CURLOPT_PROXY); - REGISTER_CURL_CONSTANT("CURLOPT_VERBOSE", CURLOPT_VERBOSE); - REGISTER_CURL_CONSTANT("CURLOPT_HEADER", CURLOPT_HEADER); - REGISTER_CURL_CONSTANT("CURLOPT_HTTPHEADER", CURLOPT_HTTPHEADER); - REGISTER_CURL_CONSTANT("CURLOPT_NOPROGRESS", CURLOPT_NOPROGRESS); - REGISTER_CURL_CONSTANT("CURLOPT_NOBODY", CURLOPT_NOBODY); - REGISTER_CURL_CONSTANT("CURLOPT_FAILONERROR", CURLOPT_FAILONERROR); - REGISTER_CURL_CONSTANT("CURLOPT_UPLOAD", CURLOPT_UPLOAD); - REGISTER_CURL_CONSTANT("CURLOPT_POST", CURLOPT_POST); - REGISTER_CURL_CONSTANT("CURLOPT_FTPLISTONLY", CURLOPT_FTPLISTONLY); - REGISTER_CURL_CONSTANT("CURLOPT_FTPAPPEND", CURLOPT_FTPAPPEND); - REGISTER_CURL_CONSTANT("CURLOPT_NETRC", CURLOPT_NETRC); - REGISTER_CURL_CONSTANT("CURLOPT_FOLLOWLOCATION", CURLOPT_FOLLOWLOCATION); - REGISTER_CURL_CONSTANT("CURLOPT_FTPASCII", CURLOPT_FTPASCII); - REGISTER_CURL_CONSTANT("CURLOPT_PUT", CURLOPT_PUT); - REGISTER_CURL_CONSTANT("CURLOPT_MUTE", CURLOPT_MUTE); - REGISTER_CURL_CONSTANT("CURLOPT_USERPWD", CURLOPT_USERPWD); - REGISTER_CURL_CONSTANT("CURLOPT_PROXYUSERPWD", CURLOPT_PROXYUSERPWD); - REGISTER_CURL_CONSTANT("CURLOPT_RANGE", CURLOPT_RANGE); - REGISTER_CURL_CONSTANT("CURLOPT_TIMEOUT", CURLOPT_TIMEOUT); - REGISTER_CURL_CONSTANT("CURLOPT_POSTFIELDS", CURLOPT_POSTFIELDS); - REGISTER_CURL_CONSTANT("CURLOPT_REFERER", CURLOPT_REFERER); - REGISTER_CURL_CONSTANT("CURLOPT_USERAGENT", CURLOPT_USERAGENT); - REGISTER_CURL_CONSTANT("CURLOPT_FTPPORT", CURLOPT_FTPPORT); - REGISTER_CURL_CONSTANT("CURLOPT_LOW_SPEED_LIMIT", CURLOPT_LOW_SPEED_LIMIT); - REGISTER_CURL_CONSTANT("CURLOPT_LOW_SPEED_TIME", CURLOPT_LOW_SPEED_TIME); - REGISTER_CURL_CONSTANT("CURLOPT_RESUME_FROM", CURLOPT_RESUME_FROM); - REGISTER_CURL_CONSTANT("CURLOPT_COOKIE", CURLOPT_COOKIE); - REGISTER_CURL_CONSTANT("CURLOPT_SSLCERT", CURLOPT_SSLCERT); - REGISTER_CURL_CONSTANT("CURLOPT_SSLCERTPASSWD", CURLOPT_SSLCERTPASSWD); - REGISTER_CURL_CONSTANT("CURLOPT_WRITEHEADER", CURLOPT_WRITEHEADER); - REGISTER_CURL_CONSTANT("CURLOPT_COOKIEFILE", CURLOPT_COOKIEFILE); - REGISTER_CURL_CONSTANT("CURLOPT_SSLVERSION", CURLOPT_SSLVERSION); - REGISTER_CURL_CONSTANT("CURLOPT_TIMECONDITION", CURLOPT_TIMECONDITION); - REGISTER_CURL_CONSTANT("CURLOPT_TIMEVALUE", CURLOPT_TIMEVALUE); - REGISTER_CURL_CONSTANT("CURLOPT_CUSTOMREQUEST", CURLOPT_CUSTOMREQUEST); - REGISTER_CURL_CONSTANT("CURLOPT_STDERR", CURLOPT_STDERR); - REGISTER_CURL_CONSTANT("CURLOPT_TRANSFERTEXT", CURLOPT_TRANSFERTEXT); - REGISTER_CURL_CONSTANT("CURLOPT_RETURNTRANSFER", CURLOPT_RETURNTRANSFER); - REGISTER_CURL_CONSTANT("CURLOPT_QUOTE", CURLOPT_QUOTE); - REGISTER_CURL_CONSTANT("CURLOPT_POSTQUOTE", CURLOPT_POSTQUOTE); - REGISTER_CURL_CONSTANT("CURLOPT_INTERFACE", CURLOPT_INTERFACE); - REGISTER_CURL_CONSTANT("CURLOPT_KRB4LEVEL", CURLOPT_KRB4LEVEL); - REGISTER_CURL_CONSTANT("CURLOPT_HTTPPROXYTUNNEL", CURLOPT_HTTPPROXYTUNNEL); - REGISTER_CURL_CONSTANT("CURLOPT_FILETIME", CURLOPT_FILETIME); - REGISTER_CURL_CONSTANT("CURLOPT_WRITEFUNCTION", CURLOPT_WRITEFUNCTION); - REGISTER_CURL_CONSTANT("CURLOPT_READFUNCTION", CURLOPT_READFUNCTION); - REGISTER_CURL_CONSTANT("CURLOPT_PASSWDFUNCTION", CURLOPT_PASSWDFUNCTION); - REGISTER_CURL_CONSTANT("CURLOPT_HEADERFUNCTION", CURLOPT_HEADERFUNCTION); - REGISTER_CURL_CONSTANT("CURLOPT_MAXREDIRS", CURLOPT_MAXREDIRS); - REGISTER_CURL_CONSTANT("CURLOPT_MAXCONNECTS", CURLOPT_MAXCONNECTS); - REGISTER_CURL_CONSTANT("CURLOPT_CLOSEPOLICY", CURLOPT_CLOSEPOLICY); - REGISTER_CURL_CONSTANT("CURLOPT_FRESH_CONNECT", CURLOPT_FRESH_CONNECT); - REGISTER_CURL_CONSTANT("CURLOPT_FORBID_REUSE", CURLOPT_FORBID_REUSE); - REGISTER_CURL_CONSTANT("CURLOPT_RANDOM_FILE", CURLOPT_RANDOM_FILE); - REGISTER_CURL_CONSTANT("CURLOPT_EGDSOCKET", CURLOPT_EGDSOCKET); - REGISTER_CURL_CONSTANT("CURLOPT_CONNECTTIMEOUT", CURLOPT_CONNECTTIMEOUT); - REGISTER_CURL_CONSTANT("CURLOPT_SSL_VERIFYPEER", CURLOPT_SSL_VERIFYPEER); - REGISTER_CURL_CONSTANT("CURLOPT_CAINFO", CURLOPT_CAINFO); - REGISTER_CURL_CONSTANT("CURLOPT_BINARYTRANSFER", CURLOPT_BINARYTRANSFER); + REGISTER_CURL_CONSTANT(CURLOPT_PORT); + REGISTER_CURL_CONSTANT(CURLOPT_FILE); + REGISTER_CURL_CONSTANT(CURLOPT_INFILE); + REGISTER_CURL_CONSTANT(CURLOPT_INFILESIZE); + REGISTER_CURL_CONSTANT(CURLOPT_URL); + REGISTER_CURL_CONSTANT(CURLOPT_PROXY); + REGISTER_CURL_CONSTANT(CURLOPT_VERBOSE); + REGISTER_CURL_CONSTANT(CURLOPT_HEADER); + REGISTER_CURL_CONSTANT(CURLOPT_HTTPHEADER); + REGISTER_CURL_CONSTANT(CURLOPT_NOPROGRESS); + REGISTER_CURL_CONSTANT(CURLOPT_NOBODY); + REGISTER_CURL_CONSTANT(CURLOPT_FAILONERROR); + REGISTER_CURL_CONSTANT(CURLOPT_UPLOAD); + REGISTER_CURL_CONSTANT(CURLOPT_POST); + REGISTER_CURL_CONSTANT(CURLOPT_FTPLISTONLY); + REGISTER_CURL_CONSTANT(CURLOPT_FTPAPPEND); + REGISTER_CURL_CONSTANT(CURLOPT_NETRC); + REGISTER_CURL_CONSTANT(CURLOPT_FOLLOWLOCATION); + REGISTER_CURL_CONSTANT(CURLOPT_FTPASCII); + REGISTER_CURL_CONSTANT(CURLOPT_PUT); + REGISTER_CURL_CONSTANT(CURLOPT_MUTE); + REGISTER_CURL_CONSTANT(CURLOPT_USERPWD); + REGISTER_CURL_CONSTANT(CURLOPT_PROXYUSERPWD); + REGISTER_CURL_CONSTANT(CURLOPT_RANGE); + REGISTER_CURL_CONSTANT(CURLOPT_TIMEOUT); + REGISTER_CURL_CONSTANT(CURLOPT_POSTFIELDS); + REGISTER_CURL_CONSTANT(CURLOPT_REFERER); + REGISTER_CURL_CONSTANT(CURLOPT_USERAGENT); + REGISTER_CURL_CONSTANT(CURLOPT_FTPPORT); + REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_LIMIT); + REGISTER_CURL_CONSTANT(CURLOPT_LOW_SPEED_TIME); + REGISTER_CURL_CONSTANT(CURLOPT_RESUME_FROM); + REGISTER_CURL_CONSTANT(CURLOPT_COOKIE); + REGISTER_CURL_CONSTANT(CURLOPT_SSLCERT); + REGISTER_CURL_CONSTANT(CURLOPT_SSLCERTPASSWD); + REGISTER_CURL_CONSTANT(CURLOPT_WRITEHEADER); + REGISTER_CURL_CONSTANT(CURLOPT_COOKIEFILE); + REGISTER_CURL_CONSTANT(CURLOPT_SSLVERSION); + REGISTER_CURL_CONSTANT(CURLOPT_TIMECONDITION); + REGISTER_CURL_CONSTANT(CURLOPT_TIMEVALUE); + REGISTER_CURL_CONSTANT(CURLOPT_CUSTOMREQUEST); + REGISTER_CURL_CONSTANT(CURLOPT_STDERR); + REGISTER_CURL_CONSTANT(CURLOPT_TRANSFERTEXT); + REGISTER_CURL_CONSTANT(CURLOPT_RETURNTRANSFER); + REGISTER_CURL_CONSTANT(CURLOPT_QUOTE); + REGISTER_CURL_CONSTANT(CURLOPT_POSTQUOTE); + REGISTER_CURL_CONSTANT(CURLOPT_INTERFACE); + REGISTER_CURL_CONSTANT(CURLOPT_KRB4LEVEL); + REGISTER_CURL_CONSTANT(CURLOPT_HTTPPROXYTUNNEL); + REGISTER_CURL_CONSTANT(CURLOPT_FILETIME); + REGISTER_CURL_CONSTANT(CURLOPT_WRITEFUNCTION); + REGISTER_CURL_CONSTANT(CURLOPT_READFUNCTION); + REGISTER_CURL_CONSTANT(CURLOPT_PASSWDFUNCTION); + REGISTER_CURL_CONSTANT(CURLOPT_HEADERFUNCTION); + REGISTER_CURL_CONSTANT(CURLOPT_MAXREDIRS); + REGISTER_CURL_CONSTANT(CURLOPT_MAXCONNECTS); + REGISTER_CURL_CONSTANT(CURLOPT_CLOSEPOLICY); + REGISTER_CURL_CONSTANT(CURLOPT_FRESH_CONNECT); + REGISTER_CURL_CONSTANT(CURLOPT_FORBID_REUSE); + REGISTER_CURL_CONSTANT(CURLOPT_RANDOM_FILE); + REGISTER_CURL_CONSTANT(CURLOPT_EGDSOCKET); + REGISTER_CURL_CONSTANT(CURLOPT_CONNECTTIMEOUT); + REGISTER_CURL_CONSTANT(CURLOPT_SSL_VERIFYPEER); + REGISTER_CURL_CONSTANT(CURLOPT_CAINFO); + REGISTER_CURL_CONSTANT(CURLOPT_COOKIEJAR); + REGISTER_CURL_CONSTANT(CURLOPT_SSL_CIPHER_LIST); + REGISTER_CURL_CONSTANT(CURLOPT_BINARYTRANSFER); /* Constants effecting the way CURLOPT_CLOSEPOLICY works */ - REGISTER_CURL_CONSTANT("CURLCLOSEPOLICY_LEAST_RECENTLY_USED", CURLCLOSEPOLICY_LEAST_RECENTLY_USED); - REGISTER_CURL_CONSTANT("CURLCLOSEPOLICY_OLDEST", CURLCLOSEPOLICY_OLDEST); + REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_RECENTLY_USED); + REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_LEAST_TRAFFIC); + REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_SLOWEST); + REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_CALLBACK); + REGISTER_CURL_CONSTANT(CURLCLOSEPOLICY_OLDEST); /* Info constants */ - REGISTER_CURL_CONSTANT("CURLINFO_EFFECTIVE_URL", CURLINFO_EFFECTIVE_URL); - REGISTER_CURL_CONSTANT("CURLINFO_HTTP_CODE", CURLINFO_HTTP_CODE); - REGISTER_CURL_CONSTANT("CURLINFO_HEADER_SIZE", CURLINFO_HEADER_SIZE); - REGISTER_CURL_CONSTANT("CURLINFO_REQUEST_SIZE", CURLINFO_REQUEST_SIZE); - REGISTER_CURL_CONSTANT("CURLINFO_TOTAL_TIME", CURLINFO_TOTAL_TIME); - REGISTER_CURL_CONSTANT("CURLINFO_NAMELOOKUP_TIME", CURLINFO_NAMELOOKUP_TIME); - REGISTER_CURL_CONSTANT("CURLINFO_CONNECT_TIME", CURLINFO_CONNECT_TIME); - REGISTER_CURL_CONSTANT("CURLINFO_PRETRANSFER_TIME", CURLINFO_PRETRANSFER_TIME); - REGISTER_CURL_CONSTANT("CURLINFO_SIZE_UPLOAD", CURLINFO_SIZE_UPLOAD); - REGISTER_CURL_CONSTANT("CURLINFO_SIZE_DOWNLOAD", CURLINFO_SIZE_DOWNLOAD); - REGISTER_CURL_CONSTANT("CURLINFO_SPEED_DOWNLOAD", CURLINFO_SPEED_DOWNLOAD); - REGISTER_CURL_CONSTANT("CURLINFO_SPEED_UPLOAD", CURLINFO_SPEED_UPLOAD); - REGISTER_CURL_CONSTANT("CURLINFO_FILETIME", CURLINFO_FILETIME); + REGISTER_CURL_CONSTANT(CURLINFO_EFFECTIVE_URL); + REGISTER_CURL_CONSTANT(CURLINFO_HTTP_CODE); + REGISTER_CURL_CONSTANT(CURLINFO_HEADER_SIZE); + REGISTER_CURL_CONSTANT(CURLINFO_REQUEST_SIZE); + REGISTER_CURL_CONSTANT(CURLINFO_TOTAL_TIME); + REGISTER_CURL_CONSTANT(CURLINFO_NAMELOOKUP_TIME); + REGISTER_CURL_CONSTANT(CURLINFO_CONNECT_TIME); + REGISTER_CURL_CONSTANT(CURLINFO_PRETRANSFER_TIME); + REGISTER_CURL_CONSTANT(CURLINFO_SIZE_UPLOAD); + REGISTER_CURL_CONSTANT(CURLINFO_SIZE_DOWNLOAD); + REGISTER_CURL_CONSTANT(CURLINFO_SPEED_DOWNLOAD); + REGISTER_CURL_CONSTANT(CURLINFO_SPEED_UPLOAD); + REGISTER_CURL_CONSTANT(CURLINFO_FILETIME); + REGISTER_CURL_CONSTANT(CURLINFO_SSL_VERIFY_RESULT); + REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_DOWNLOAD); + REGISTER_CURL_CONSTANT(CURLINFO_CONTENT_LENGTH_UPLOAD); /* Error Constants */ - REGISTER_CURL_CONSTANT("CURLE_OK", CURLE_OK); - REGISTER_CURL_CONSTANT("CURLE_UNSUPPORTED_PROTOCOL", CURLE_UNSUPPORTED_PROTOCOL); - REGISTER_CURL_CONSTANT("CURLE_FAILED_INIT", CURLE_FAILED_INIT); - REGISTER_CURL_CONSTANT("CURLE_URL_MALFORMAT", CURLE_URL_MALFORMAT); - REGISTER_CURL_CONSTANT("CURLE_URL_MALFORMAT_USER", CURLE_URL_MALFORMAT_USER); - REGISTER_CURL_CONSTANT("CURLE_COULDNT_RESOLVE_PROXY", CURLE_COULDNT_RESOLVE_PROXY); - REGISTER_CURL_CONSTANT("CURLE_COULDNT_RESOLVE_HOST", CURLE_COULDNT_RESOLVE_HOST); - REGISTER_CURL_CONSTANT("CURLE_COULDNT_CONNECT", CURLE_COULDNT_CONNECT); - REGISTER_CURL_CONSTANT("CURLE_FTP_WEIRD_SERVER_REPLY", CURLE_FTP_WEIRD_SERVER_REPLY); - REGISTER_CURL_CONSTANT("CURLE_FTP_ACCESS_DENIED", CURLE_FTP_ACCESS_DENIED); - REGISTER_CURL_CONSTANT("CURLE_FTP_USER_PASSWORD_INCORRECT", CURLE_FTP_USER_PASSWORD_INCORRECT); - REGISTER_CURL_CONSTANT("CURLE_FTP_WEIRD_PASS_REPLY", CURLE_FTP_WEIRD_PASS_REPLY); - REGISTER_CURL_CONSTANT("CURLE_FTP_WEIRD_USER_REPLY", CURLE_FTP_WEIRD_USER_REPLY); - REGISTER_CURL_CONSTANT("CURLE_FTP_WEIRD_PASV_REPLY", CURLE_FTP_WEIRD_PASV_REPLY); - REGISTER_CURL_CONSTANT("CURLE_FTP_WEIRD_227_FORMAT", CURLE_FTP_WEIRD_227_FORMAT); - REGISTER_CURL_CONSTANT("CURLE_FTP_CANT_GET_HOST", CURLE_FTP_CANT_GET_HOST); - REGISTER_CURL_CONSTANT("CURLE_FTP_CANT_RECONNECT", CURLE_FTP_CANT_RECONNECT); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_SET_BINARY", CURLE_FTP_COULDNT_SET_BINARY); - REGISTER_CURL_CONSTANT("CURLE_PARTIAL_FILE", CURLE_PARTIAL_FILE); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_RETR_FILE", CURLE_FTP_COULDNT_RETR_FILE); - REGISTER_CURL_CONSTANT("CURLE_FTP_WRITE_ERROR", CURLE_FTP_WRITE_ERROR); - REGISTER_CURL_CONSTANT("CURLE_FTP_QUOTE_ERROR", CURLE_FTP_QUOTE_ERROR); - REGISTER_CURL_CONSTANT("CURLE_HTTP_NOT_FOUND", CURLE_HTTP_NOT_FOUND); - REGISTER_CURL_CONSTANT("CURLE_WRITE_ERROR", CURLE_WRITE_ERROR); - REGISTER_CURL_CONSTANT("CURLE_MALFORMAT_USER", CURLE_MALFORMAT_USER); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_STOR_FILE", CURLE_FTP_COULDNT_STOR_FILE); - REGISTER_CURL_CONSTANT("CURLE_READ_ERROR", CURLE_READ_ERROR); - REGISTER_CURL_CONSTANT("CURLE_OUT_OF_MEMORY", CURLE_OUT_OF_MEMORY); - REGISTER_CURL_CONSTANT("CURLE_OPERATION_TIMEOUTED", CURLE_OPERATION_TIMEOUTED); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_SET_ASCII", CURLE_FTP_COULDNT_SET_ASCII); - REGISTER_CURL_CONSTANT("CURLE_FTP_PORT_FAILED", CURLE_FTP_PORT_FAILED); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_USE_REST", CURLE_FTP_COULDNT_USE_REST); - REGISTER_CURL_CONSTANT("CURLE_FTP_COULDNT_GET_SIZE", CURLE_FTP_COULDNT_GET_SIZE); - REGISTER_CURL_CONSTANT("CURLE_HTTP_RANGE_ERROR", CURLE_HTTP_RANGE_ERROR); - REGISTER_CURL_CONSTANT("CURLE_HTTP_POST_ERROR", CURLE_HTTP_POST_ERROR); - REGISTER_CURL_CONSTANT("CURLE_SSL_CONNECT_ERROR", CURLE_SSL_CONNECT_ERROR); - REGISTER_CURL_CONSTANT("CURLE_FTP_BAD_DOWNLOAD_RESUME", CURLE_FTP_BAD_DOWNLOAD_RESUME); - REGISTER_CURL_CONSTANT("CURLE_FILE_COULDNT_READ_FILE", CURLE_FILE_COULDNT_READ_FILE); - REGISTER_CURL_CONSTANT("CURLE_LDAP_CANNOT_BIND", CURLE_LDAP_CANNOT_BIND); - REGISTER_CURL_CONSTANT("CURLE_LDAP_SEARCH_FAILED", CURLE_LDAP_SEARCH_FAILED); - REGISTER_CURL_CONSTANT("CURLE_LIBRARY_NOT_FOUND", CURLE_LIBRARY_NOT_FOUND); - REGISTER_CURL_CONSTANT("CURLE_FUNCTION_NOT_FOUND", CURLE_FUNCTION_NOT_FOUND); - REGISTER_CURL_CONSTANT("CURLE_ABORTED_BY_CALLBACK", CURLE_ABORTED_BY_CALLBACK); - REGISTER_CURL_CONSTANT("CURLE_BAD_FUNCTION_ARGUMENT", CURLE_BAD_FUNCTION_ARGUMENT); - REGISTER_CURL_CONSTANT("CURLE_BAD_CALLING_ORDER", CURLE_BAD_CALLING_ORDER); - REGISTER_CURL_CONSTANT("CURLE_HTTP_PORT_FAILED", CURLE_HTTP_PORT_FAILED); - REGISTER_CURL_CONSTANT("CURLE_BAD_PASSWORD_ENTERED", CURLE_BAD_PASSWORD_ENTERED); - REGISTER_CURL_CONSTANT("CURLE_TOO_MANY_REDIRECTS", CURLE_TOO_MANY_REDIRECTS); - REGISTER_CURL_CONSTANT("CURLE_UNKOWN_TELNET_OPTION", CURLE_UNKNOWN_TELNET_OPTION); - REGISTER_CURL_CONSTANT("CURLE_TELNET_OPTION_SYNTAX", CURLE_TELNET_OPTION_SYNTAX); - REGISTER_CURL_CONSTANT("CURLE_ALREADY_COMPLETE", CURLE_ALREADY_COMPLETE); + REGISTER_CURL_CONSTANT(CURLE_OK); + REGISTER_CURL_CONSTANT(CURLE_UNSUPPORTED_PROTOCOL); + REGISTER_CURL_CONSTANT(CURLE_FAILED_INIT); + REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT); + REGISTER_CURL_CONSTANT(CURLE_URL_MALFORMAT_USER); + REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_PROXY); + REGISTER_CURL_CONSTANT(CURLE_COULDNT_RESOLVE_HOST); + REGISTER_CURL_CONSTANT(CURLE_COULDNT_CONNECT); + REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_SERVER_REPLY); + REGISTER_CURL_CONSTANT(CURLE_FTP_ACCESS_DENIED); + REGISTER_CURL_CONSTANT(CURLE_FTP_USER_PASSWORD_INCORRECT); + REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASS_REPLY); + REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_USER_REPLY); + REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_PASV_REPLY); + REGISTER_CURL_CONSTANT(CURLE_FTP_WEIRD_227_FORMAT); + REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_GET_HOST); + REGISTER_CURL_CONSTANT(CURLE_FTP_CANT_RECONNECT); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_BINARY); + REGISTER_CURL_CONSTANT(CURLE_PARTIAL_FILE); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_RETR_FILE); + REGISTER_CURL_CONSTANT(CURLE_FTP_WRITE_ERROR); + REGISTER_CURL_CONSTANT(CURLE_FTP_QUOTE_ERROR); + REGISTER_CURL_CONSTANT(CURLE_HTTP_NOT_FOUND); + REGISTER_CURL_CONSTANT(CURLE_WRITE_ERROR); + REGISTER_CURL_CONSTANT(CURLE_MALFORMAT_USER); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_STOR_FILE); + REGISTER_CURL_CONSTANT(CURLE_READ_ERROR); + REGISTER_CURL_CONSTANT(CURLE_OUT_OF_MEMORY); + REGISTER_CURL_CONSTANT(CURLE_OPERATION_TIMEOUTED); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_SET_ASCII); + REGISTER_CURL_CONSTANT(CURLE_FTP_PORT_FAILED); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_USE_REST); + REGISTER_CURL_CONSTANT(CURLE_FTP_COULDNT_GET_SIZE); + REGISTER_CURL_CONSTANT(CURLE_HTTP_RANGE_ERROR); + REGISTER_CURL_CONSTANT(CURLE_HTTP_POST_ERROR); + REGISTER_CURL_CONSTANT(CURLE_SSL_CONNECT_ERROR); + REGISTER_CURL_CONSTANT(CURLE_FTP_BAD_DOWNLOAD_RESUME); + REGISTER_CURL_CONSTANT(CURLE_FILE_COULDNT_READ_FILE); + REGISTER_CURL_CONSTANT(CURLE_LDAP_CANNOT_BIND); + REGISTER_CURL_CONSTANT(CURLE_LDAP_SEARCH_FAILED); + REGISTER_CURL_CONSTANT(CURLE_LIBRARY_NOT_FOUND); + REGISTER_CURL_CONSTANT(CURLE_FUNCTION_NOT_FOUND); + REGISTER_CURL_CONSTANT(CURLE_ABORTED_BY_CALLBACK); + REGISTER_CURL_CONSTANT(CURLE_BAD_FUNCTION_ARGUMENT); + REGISTER_CURL_CONSTANT(CURLE_BAD_CALLING_ORDER); + REGISTER_CURL_CONSTANT(CURLE_HTTP_PORT_FAILED); + REGISTER_CURL_CONSTANT(CURLE_BAD_PASSWORD_ENTERED); + REGISTER_CURL_CONSTANT(CURLE_TOO_MANY_REDIRECTS); + REGISTER_CURL_CONSTANT(CURLE_UNKNOWN_TELNET_OPTION); + REGISTER_CURL_CONSTANT(CURLE_TELNET_OPTION_SYNTAX); + REGISTER_CURL_CONSTANT(CURLE_OBSOLETE); + REGISTER_CURL_CONSTANT(CURLE_SSL_PEER_CERTIFICATE); + + if (curl_global_init(CURL_GLOBAL_NOTHING) != CURLE_OK) { + return FAILURE; + } + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MSHUTDOWN_FUNCTION + */ +PHP_MSHUTDOWN_FUNCTION(curl) +{ + curl_global_cleanup(); return SUCCESS; } @@ -262,7 +285,6 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx) php_curl *ch = (php_curl *) ctx; php_curl_write *t = ch->handlers->write; size_t length = size * nmemb; - TSRMLS_FETCH(); switch (t->method) { case PHP_CURL_STDOUT: @@ -277,6 +299,7 @@ static size_t curl_write(char *data, size_t size, size_t nmemb, void *ctx) zval *argv[2]; zval *retval; int error; + TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); @@ -317,7 +340,6 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) php_curl *ch = (php_curl *) ctx; php_curl_read *t = ch->handlers->read; int length = -1; - TSRMLS_FETCH(); switch (t->method) { case PHP_CURL_DIRECT: @@ -328,6 +350,7 @@ static size_t curl_read(char *data, size_t size, size_t nmemb, void *ctx) zval *retval; int length; int error; + TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); @@ -373,7 +396,6 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx php_curl_write *t = ch->handlers->write_header; int error; int length; - TSRMLS_FETCH(); switch (t->method) { case PHP_CURL_STDOUT: @@ -393,6 +415,7 @@ static size_t curl_write_header(char *data, size_t size, size_t nmemb, void *ctx case PHP_CURL_USER: { zval *argv[2]; zval *retval; + TSRMLS_FETCH(); MAKE_STD_ZVAL(argv[0]); MAKE_STD_ZVAL(argv[1]); @@ -652,7 +675,9 @@ PHP_FUNCTION(curl_setopt) case CURLOPT_KRB4LEVEL: case CURLOPT_RANDOM_FILE: case CURLOPT_EGDSOCKET: - case CURLOPT_CAINFO: { + case CURLOPT_CAINFO: + case CURLOPT_COOKIEJAR: + case CURLOPT_SSL_CIPHER_LIST: { char *copystr = NULL; convert_to_string_ex(zvalue); @@ -730,6 +755,10 @@ PHP_FUNCTION(curl_setopt) HashTable *postfields; struct HttpPost *first = NULL; struct HttpPost *last = NULL; + char *postval; + char *string_key = NULL; + ulong num_key; + uint string_key_len; postfields = HASH_OF(*zvalue); if (! postfields) { @@ -740,17 +769,15 @@ PHP_FUNCTION(curl_setopt) for (zend_hash_internal_pointer_reset(postfields); zend_hash_get_current_data(postfields, (void **) ¤t) == SUCCESS; zend_hash_move_forward(postfields)) { - char *string_key = NULL; - char *postval = NULL; - ulong num_key; SEPARATE_ZVAL(current); convert_to_string_ex(current); - zend_hash_get_current_key(postfields, &string_key, &num_key, 0); + zend_hash_get_current_key_ex(postfields, &string_key, &string_key_len, &num_key, 0); - postval = emalloc(strlen(string_key) + Z_STRLEN_PP(current) + 1); - sprintf(postval, "%s=%s", string_key, Z_STRVAL_PP(current)); + postval = emalloc((string_key_len - 1) + Z_STRLEN_PP(current) + 1); + snprintf(postval, (sizeof("%s=%s") - 1) + (string_key_len - 1) + Z_STRLEN_PP(current), + "%s=%s", string_key, Z_STRVAL_PP(current)); error = curl_formparse(postval, &first, &last); } @@ -779,26 +806,26 @@ PHP_FUNCTION(curl_setopt) case CURLOPT_QUOTE: case CURLOPT_POSTQUOTE: { zval **current; - HashTable *hash; + HashTable *ph; struct curl_slist *slist = NULL; - hash = HASH_OF(*zvalue); + ph = HASH_OF(*zvalue); if (! hash) { php_error(E_WARNING, - "You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE and CURLOPT_POSTQUOTE arguments"); + "You must pass either an object or an array with the CURLOPT_HTTPHEADER," + "CURLOPT_QUOTE and CURLOPT_POSTQUOTE arguments"); RETURN_FALSE; } - for (zend_hash_internal_pointer_reset(hash); - zend_hash_get_current_data(hash, (void **) ¤t) == SUCCESS; - zend_hash_move_forward(hash)) { + for (zend_hash_internal_pointer_reset(ph); + zend_hash_get_current_data(ph, (void **) ¤t) == SUCCESS; + zend_hash_move_forward(ph)) { char *indiv = NULL; SEPARATE_ZVAL(current); convert_to_string_ex(current); indiv = estrndup(Z_STRVAL_PP(current), Z_STRLEN_PP(current) + 1); - indiv[Z_STRLEN_PP(current)] = '\0'; slist = curl_slist_append(slist, indiv); if (! slist) { efree(indiv); @@ -856,6 +883,10 @@ PHP_FUNCTION(curl_exec) } /* }}} */ +#define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s), v); +#define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s), v); +#define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s), v, 1); + /* {{{ proto string curl_getinfo(int ch, int opt) Get information regarding a specific transfer */ PHP_FUNCTION(curl_getinfo) @@ -880,31 +911,37 @@ PHP_FUNCTION(curl_getinfo) array_init(return_value); curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &url); - add_assoc_string(return_value, "url", url, 1); + CAAS("url", url); curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code); - add_assoc_long(return_value, "http_code", l_code); + CAAL("http_code", l_code); curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code); - add_assoc_long(return_value, "header_size", l_code); + CAAL("header_size", l_code); curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code); - add_assoc_long(return_value, "request_size", l_code); + CAAL("request_size", l_code); curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code); - add_assoc_long(return_value, "filetime", l_code); + CAAL("filetime", l_code); + curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFY_RESULT, &l_code); + CAAL("ssl_verify_result", l_code); curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code); - add_assoc_double(return_value, "total_time", d_code); + CAAD("total_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code); - add_assoc_double(return_value, "namelookup_time", d_code); + CAAD("namelookup_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code); - add_assoc_double(return_value, "connect_time", d_code); + CAAD("connect_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code); - add_assoc_double(return_value, "pretransfer_time", d_code); + CAAD("pretransfer_time", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code); - add_assoc_double(return_value, "size_upload", d_code); + CAAD("size_upload", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code); - add_assoc_double(return_value, "size_download", d_code); + CAAD("size_download", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code); - add_assoc_double(return_value, "speed_download", d_code); + CAAD("speed_download", d_code); curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code); - add_assoc_double(return_value, "speed_upload", d_code); + CAAD("speed_upload", d_code); + curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code); + CAAD("download_content_length", d_code); + curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code); + CAAD("upload_content_length", d_code); } else { option = Z_LVAL_PP(zoption); switch (option) { @@ -919,7 +956,8 @@ PHP_FUNCTION(curl_getinfo) case CURLINFO_HTTP_CODE: case CURLINFO_HEADER_SIZE: case CURLINFO_REQUEST_SIZE: - case CURLINFO_FILETIME: { + case CURLINFO_FILETIME: + case CURLINFO_SSL_VERIFY_RESULT: { long code; curl_easy_getinfo(ch->cp, option, &code); @@ -934,7 +972,9 @@ PHP_FUNCTION(curl_getinfo) case CURLINFO_SIZE_UPLOAD: case CURLINFO_SIZE_DOWNLOAD: case CURLINFO_SPEED_DOWNLOAD: - case CURLINFO_SPEED_UPLOAD: { + case CURLINFO_SPEED_UPLOAD: + case CURLINFO_CONTENT_LENGTH_DOWNLOAD: + case CURLINFO_CONTENT_LENGTH_UPLOAD: { double code; curl_easy_getinfo(ch->cp, option, &code);