X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_request_api.c;h=e278644e579d7710f51268d4ade5ee83e30df612;hp=b6d7b1e76e4cb602e0ef8e9a13626b4160ced6c5;hb=aebfa7783e7b280bff4975649b20494e5eb932bc;hpb=9676c81efbb8f180fa189d71a7ecb50dde4f5646 diff --git a/http_request_api.c b/http_request_api.c index b6d7b1e..e278644 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -347,6 +347,17 @@ PHP_HTTP_API void _http_request_defaults(http_request *request) HTTP_CURL_OPT(CURLOPT_PROXYTYPE, 0L); HTTP_CURL_OPT(CURLOPT_PROXYUSERPWD, NULL); HTTP_CURL_OPT(CURLOPT_PROXYAUTH, 0L); + HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, 60L); + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, 0L); + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, 0L); +#if HTTP_CURL_VERSION(7,15,5) + HTTP_CURL_OPT(CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) 0); + HTTP_CURL_OPT(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) 0); +#endif + /* crashes + HTTP_CURL_OPT(CURLOPT_MAXCONNECTS, 5L); */ + HTTP_CURL_OPT(CURLOPT_FRESH_CONNECT, 0L); + HTTP_CURL_OPT(CURLOPT_FORBID_REUSE, 0L); HTTP_CURL_OPT(CURLOPT_INTERFACE, NULL); HTTP_CURL_OPT(CURLOPT_PORT, 0L); #if HTTP_CURL_VERSION(7,15,2) @@ -461,6 +472,37 @@ PHP_HTTP_API STATUS _http_request_prepare(http_request *request, HashTable *opti } } + /* dns */ + if ((zoption = http_request_option(request, options, "dns_cache_timeout", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, Z_LVAL_P(zoption)); + } + + /* limits */ + if ((zoption = http_request_option(request, options, "low_speed_limit", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, Z_LVAL_P(zoption)); + } + if ((zoption = http_request_option(request, options, "low_speed_time", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, Z_LVAL_P(zoption)); + } +#if HTTP_CURL_VERSION(7,15,5) + if ((zoption = http_request_option(request, options, "max_send_speed", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) Z_LVAL_P(zoption)); + } + if ((zoption = http_request_option(request, options, "max_recv_speed", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) Z_LVAL_P(zoption)); + } +#endif + /* crashes + if ((zoption = http_request_option(request, options, "maxconnects", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAXCONNECTS, Z_LVAL_P(zoption)); + } */ + if ((zoption = http_request_option(request, options, "fresh_connect", IS_BOOL)) && Z_BVAL_P(zoption)) { + HTTP_CURL_OPT(CURLOPT_FRESH_CONNECT, 1L); + } + if ((zoption = http_request_option(request, options, "forbid_reuse", IS_BOOL)) && Z_BVAL_P(zoption)) { + HTTP_CURL_OPT(CURLOPT_FORBID_REUSE, 1L); + } + /* outgoing interface */ if ((zoption = http_request_option(request, options, "interface", IS_STRING))) { HTTP_CURL_OPT(CURLOPT_INTERFACE, Z_STRVAL_P(zoption)); @@ -814,45 +856,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) { @@ -899,7 +902,9 @@ static int http_curl_progress_callback(void *ctx, double dltotal, double dlnow, add_assoc_double(param, "ulnow", ulnow); with_error_handling(EH_NORMAL, NULL) { + request->_in_progress_cb = 1; call_user_function(EG(function_table), NULL, request->_progress_callback, &retval, 1, ¶m TSRMLS_CC); + request->_in_progress_cb = 0; } end_error_handling(); zval_ptr_dtor(¶m); @@ -976,6 +981,9 @@ static int http_curl_raw_callback(CURL *ch, curl_infotype type, char *data, size if (data[length-1] != 0xa) { fprintf(stderr, "\n"); } +#endif +#if 0 + fprintf(stderr, "%.*s%s", length, data, data[length-1]=='\n'?"":"\n"); #endif break; }