X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=62b66bd56f2980557440bafc3ac2428c4bfa097f;hp=9697f6d18893b53cca0c6ae1215cd99c597bce38;hb=d886588e9d3193d182ee5ed82741aba45f028d52;hpb=82e177a071d35372367f9f5255b3e2c553c8bffd diff --git a/http_request_api.c b/http_request_api.c index 9697f6d..62b66bd 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -109,11 +109,22 @@ PHP_MINIT_FUNCTION(http_request) HTTP_LONG_CONSTANT("HTTP_AUTH_BASIC", CURLAUTH_BASIC); HTTP_LONG_CONSTANT("HTTP_AUTH_DIGEST", CURLAUTH_DIGEST); HTTP_LONG_CONSTANT("HTTP_AUTH_NTLM", CURLAUTH_NTLM); + HTTP_LONG_CONSTANT("HTTP_AUTH_GSSNEG", CURLAUTH_GSSNEGOTIATE); HTTP_LONG_CONSTANT("HTTP_AUTH_ANY", CURLAUTH_ANY); - HTTP_LONG_CONSTANT("HTTP_VERSION_NONE", CURL_HTTP_VERSION_NONE); + HTTP_LONG_CONSTANT("HTTP_VERSION_NONE", CURL_HTTP_VERSION_NONE); /* to be removed */ HTTP_LONG_CONSTANT("HTTP_VERSION_1_0", CURL_HTTP_VERSION_1_0); HTTP_LONG_CONSTANT("HTTP_VERSION_1_1", CURL_HTTP_VERSION_1_1); + HTTP_LONG_CONSTANT("HTTP_VERSION_ANY", CURL_HTTP_VERSION_NONE); + + HTTP_LONG_CONSTANT("HTTP_SSL_VERSION_TLSv1", CURL_SSLVERSION_TLSv1); + HTTP_LONG_CONSTANT("HTTP_SSL_VERSION_SSLv2", CURL_SSLVERSION_SSLv2); + HTTP_LONG_CONSTANT("HTTP_SSL_VERSION_SSLv3", CURL_SSLVERSION_SSLv3); + HTTP_LONG_CONSTANT("HTTP_SSL_VERSION_ANY", CURL_SSLVERSION_DEFAULT); + + HTTP_LONG_CONSTANT("HTTP_IPRESOLVE_V4", CURL_IPRESOLVE_V4); + HTTP_LONG_CONSTANT("HTTP_IPRESOLVE_V6", CURL_IPRESOLVE_V6); + HTTP_LONG_CONSTANT("HTTP_IPRESOLVE_ANY", CURL_IPRESOLVE_WHATEVER); #if HTTP_CURL_VERSION(7,15,2) HTTP_LONG_CONSTANT("HTTP_PROXY_SOCKS4", CURLPROXY_SOCKS4); @@ -171,23 +182,23 @@ PHP_HTTP_API CURL * _http_curl_init_ex(CURL *ch, http_request *request) { if (ch || (ch = curl_easy_init())) { #if defined(ZTS) - HTTP_CURL_OPT_EX(ch, CURLOPT_NOSIGNAL, 1L); + curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1L); #endif - HTTP_CURL_OPT_EX(ch, CURLOPT_HEADER, 0L); - HTTP_CURL_OPT_EX(ch, CURLOPT_FILETIME, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_AUTOREFERER, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_VERBOSE, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_HEADERFUNCTION, NULL); - HTTP_CURL_OPT_EX(ch, CURLOPT_DEBUGFUNCTION, http_curl_raw_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_READFUNCTION, http_curl_read_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_IOCTLFUNCTION, http_curl_ioctl_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_WRITEFUNCTION, http_curl_dummy_callback); + curl_easy_setopt(ch, CURLOPT_HEADER, 0L); + curl_easy_setopt(ch, CURLOPT_FILETIME, 1L); + curl_easy_setopt(ch, CURLOPT_AUTOREFERER, 1L); + curl_easy_setopt(ch, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(ch, CURLOPT_HEADERFUNCTION, NULL); + curl_easy_setopt(ch, CURLOPT_DEBUGFUNCTION, http_curl_raw_callback); + curl_easy_setopt(ch, CURLOPT_READFUNCTION, http_curl_read_callback); + curl_easy_setopt(ch, CURLOPT_IOCTLFUNCTION, http_curl_ioctl_callback); + curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, http_curl_dummy_callback); /* set context */ if (request) { - HTTP_CURL_OPT_EX(ch, CURLOPT_PRIVATE, request); - HTTP_CURL_OPT_EX(ch, CURLOPT_DEBUGDATA, request); - HTTP_CURL_OPT_EX(ch, CURLOPT_ERRORBUFFER, request->_error); + curl_easy_setopt(ch, CURLOPT_PRIVATE, request); + curl_easy_setopt(ch, CURLOPT_DEBUGDATA, request); + curl_easy_setopt(ch, CURLOPT_ERRORBUFFER, request->_error); /* attach curl handle */ request->ch = ch; @@ -205,10 +216,10 @@ PHP_HTTP_API void _http_curl_free(CURL **ch) { if (*ch) { /* avoid nasty segfaults with already cleaned up callbacks */ - HTTP_CURL_OPT_EX(*ch, CURLOPT_NOPROGRESS, 1L); - HTTP_CURL_OPT_EX(*ch, CURLOPT_PROGRESSFUNCTION, NULL); - HTTP_CURL_OPT_EX(*ch, CURLOPT_VERBOSE, 0L); - HTTP_CURL_OPT_EX(*ch, CURLOPT_DEBUGFUNCTION, NULL); + curl_easy_setopt(*ch, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(*ch, CURLOPT_PROGRESSFUNCTION, NULL); + curl_easy_setopt(*ch, CURLOPT_VERBOSE, 0L); + curl_easy_setopt(*ch, CURLOPT_DEBUGFUNCTION, NULL); curl_easy_cleanup(*ch); *ch = NULL; } @@ -348,6 +359,7 @@ PHP_HTTP_API void _http_request_defaults(http_request *request) HTTP_CURL_OPT(CURLOPT_PROXYUSERPWD, NULL); HTTP_CURL_OPT(CURLOPT_PROXYAUTH, 0L); HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, 60L); + HTTP_CURL_OPT(CURLOPT_IPRESOLVE, 0); HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, 0L); HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, 0L); #if HTTP_CURL_VERSION(7,15,5) @@ -394,7 +406,11 @@ PHP_HTTP_API void _http_request_defaults(http_request *request) HTTP_CURL_OPT(CURLOPT_SSL_VERIFYPEER, 0L); HTTP_CURL_OPT(CURLOPT_SSL_VERIFYHOST, 0L); HTTP_CURL_OPT(CURLOPT_SSL_CIPHER_LIST, NULL); +#ifdef HTTP_CURL_CAINFO + HTTP_CURL_OPT(CURLOPT_CAINFO, HTTP_CURL_CAINFO); +#else HTTP_CURL_OPT(CURLOPT_CAINFO, NULL); +#endif HTTP_CURL_OPT(CURLOPT_CAPATH, NULL); HTTP_CURL_OPT(CURLOPT_RANDOM_FILE, NULL); HTTP_CURL_OPT(CURLOPT_EGDSOCKET, NULL); @@ -476,6 +492,9 @@ PHP_HTTP_API STATUS _http_request_prepare(http_request *request, HashTable *opti if ((zoption = http_request_option(request, options, "dns_cache_timeout", IS_LONG))) { HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, Z_LVAL_P(zoption)); } + if ((zoption = http_request_option(request, options, "ipresolve", IS_LONG)) && Z_LVAL_P(zoption)) { + HTTP_CURL_OPT(CURLOPT_IPRESOLVE, Z_LVAL_P(zoption)); + } /* limits */ if ((zoption = http_request_option(request, options, "low_speed_limit", IS_LONG))) { @@ -618,7 +637,7 @@ PHP_HTTP_API STATUS _http_request_prepare(http_request *request, HashTable *opti request->_cache.headers = NULL; } if ((zoption = http_request_option(request, options, "headers", IS_ARRAY))) { - char *header_key; + char *header_key = NULL; ulong header_idx; HashPosition pos; @@ -856,45 +875,6 @@ PHP_HTTP_API void _http_request_exec(http_request *request) } /* }}} */ -/* {{{ void http_request_info(http_request *, HashTable *) */ -PHP_HTTP_API void _http_request_info(http_request *request, HashTable *info) -{ - zval array; - INIT_ZARR(array, info); - - HTTP_CURL_INFO(CURLINFO_EFFECTIVE_URL); - HTTP_CURL_INFO(CURLINFO_RESPONSE_CODE); - HTTP_CURL_INFO_EX(CURLINFO_HTTP_CONNECTCODE, "connect_code"); - HTTP_CURL_INFO(CURLINFO_FILETIME); - HTTP_CURL_INFO(CURLINFO_TOTAL_TIME); - HTTP_CURL_INFO(CURLINFO_NAMELOOKUP_TIME); - HTTP_CURL_INFO(CURLINFO_CONNECT_TIME); - HTTP_CURL_INFO(CURLINFO_PRETRANSFER_TIME); - HTTP_CURL_INFO(CURLINFO_STARTTRANSFER_TIME); - HTTP_CURL_INFO(CURLINFO_REDIRECT_TIME); - HTTP_CURL_INFO(CURLINFO_REDIRECT_COUNT); - HTTP_CURL_INFO(CURLINFO_SIZE_UPLOAD); - HTTP_CURL_INFO(CURLINFO_SIZE_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_SPEED_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_SPEED_UPLOAD); - HTTP_CURL_INFO(CURLINFO_HEADER_SIZE); - HTTP_CURL_INFO(CURLINFO_REQUEST_SIZE); - HTTP_CURL_INFO(CURLINFO_SSL_VERIFYRESULT); - HTTP_CURL_INFO(CURLINFO_SSL_ENGINES); - HTTP_CURL_INFO(CURLINFO_CONTENT_LENGTH_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_CONTENT_LENGTH_UPLOAD); - HTTP_CURL_INFO(CURLINFO_CONTENT_TYPE); - HTTP_CURL_INFO(CURLINFO_HTTPAUTH_AVAIL); - HTTP_CURL_INFO(CURLINFO_PROXYAUTH_AVAIL); - HTTP_CURL_INFO(CURLINFO_NUM_CONNECTS); -#if HTTP_CURL_VERSION(7,14,1) - HTTP_CURL_INFO_EX(CURLINFO_COOKIELIST, "cookies"); -#endif - HTTP_CURL_INFO(CURLINFO_OS_ERRNO); - add_assoc_string(&array, "error", request->_error, 1); -} -/* }}} */ - /* {{{ static size_t http_curl_read_callback(void *, size_t, size_t, void *) */ static size_t http_curl_read_callback(void *data, size_t len, size_t n, void *ctx) {