From b9af4335e333cbb7553dcd26be9b682e02b4534b Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Wed, 8 Jun 2022 01:32:32 -0400 Subject: [PATCH] Add new curl_upkeep() function --- NEWS | 1 + UPGRADING | 4 ++++ ext/curl/curl.stub.php | 4 ++++ ext/curl/curl_arginfo.h | 14 +++++++++++++- ext/curl/interface.c | 22 ++++++++++++++++++++++ ext/curl/tests/curl_upkeep_001.phpt | 27 +++++++++++++++++++++++++++ 6 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 ext/curl/tests/curl_upkeep_001.phpt diff --git a/NEWS b/NEWS index 00685a58293..38465be6766 100644 --- a/NEWS +++ b/NEWS @@ -12,6 +12,7 @@ PHP NEWS - Curl: . Added new constants from cURL 7.62 to 7.80. (Pierrick) + . New function curl_upkeep(). (Pierrick) - MBString: . Backwards-compatible mappings for 0x5C/0x7E in Shift-JIS are restored, diff --git a/UPGRADING b/UPGRADING index 5ef8b778936..e28498efe9a 100644 --- a/UPGRADING +++ b/UPGRADING @@ -77,6 +77,7 @@ PHP 8.2 UPGRADE NOTES . Added CURLINFO_EFFECTIVE_METHOD option and returning the effective HTTP method in curl_getinfo() return value. . Exposed multiple new constants from libcurl 7.62 to 7.80. + . Added new function curl_upkeep() to perform any connection upkeep checks. - OCI8: . Added an oci8.prefetch_lob_size directive and oci_set_prefetch_lob() @@ -174,6 +175,9 @@ PHP 8.2 UPGRADE NOTES 6. New Functions ======================================== +- Curl: + . curl_upkeep() (libcurl >= 7.62.0) + - Reflection: . ReflectionFunction::isAnonymous() . ReflectionMethod::hasPrototype() diff --git a/ext/curl/curl.stub.php b/ext/curl/curl.stub.php index a474effba52..58c5a959b25 100644 --- a/ext/curl/curl.stub.php +++ b/ext/curl/curl.stub.php @@ -54,6 +54,10 @@ function curl_getinfo(CurlHandle $handle, ?int $option = null): mixed {} /** @refcount 1 */ function curl_init(?string $url = null): CurlHandle|false {} +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ +function curl_upkeep(CurlHandle $handle): bool {} +#endif + function curl_multi_add_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int {} function curl_multi_close(CurlMultiHandle $multi_handle): void {} diff --git a/ext/curl/curl_arginfo.h b/ext/curl/curl_arginfo.h index 614954788ca..b8b0b4013ef 100644 --- a/ext/curl/curl_arginfo.h +++ b/ext/curl/curl_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 3abf3f6d5dfb14d2e22ebf5730a869e2c17c7958 */ + * Stub hash: 1bd8a84a4aa80912463ea76d08f64d3c2cf4c0db */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0) ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) @@ -49,6 +49,12 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_curl_init, 0, 0, CurlHandle, ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, url, IS_STRING, 1, "null") ZEND_END_ARG_INFO() +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_upkeep, 0, 1, _IS_BOOL, 0) + ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) +ZEND_END_ARG_INFO() +#endif + ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_add_handle, 0, 2, IS_LONG, 0) ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0) ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0) @@ -144,6 +150,9 @@ ZEND_FUNCTION(curl_exec); ZEND_FUNCTION(curl_file_create); ZEND_FUNCTION(curl_getinfo); ZEND_FUNCTION(curl_init); +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ +ZEND_FUNCTION(curl_upkeep); +#endif ZEND_FUNCTION(curl_multi_add_handle); ZEND_FUNCTION(curl_multi_close); ZEND_FUNCTION(curl_multi_errno); @@ -179,6 +188,9 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(curl_file_create, arginfo_curl_file_create) ZEND_FE(curl_getinfo, arginfo_curl_getinfo) ZEND_FE(curl_init, arginfo_curl_init) +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ + ZEND_FE(curl_upkeep, arginfo_curl_upkeep) +#endif ZEND_FE(curl_multi_add_handle, arginfo_curl_multi_add_handle) ZEND_FE(curl_multi_close, arginfo_curl_multi_close) ZEND_FE(curl_multi_errno, arginfo_curl_multi_errno) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index d3de062205d..6f556dddae2 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -3989,3 +3989,25 @@ PHP_FUNCTION(curl_pause) RETURN_LONG(curl_easy_pause(ch->cp, bitmask)); } /* }}} */ + +#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */ +/* {{{ perform connection upkeep checks */ +PHP_FUNCTION(curl_upkeep) +{ + CURLcode error; + zval *zid; + php_curl *ch; + + ZEND_PARSE_PARAMETERS_START(1, 1) + Z_PARAM_OBJECT_OF_CLASS(zid, curl_ce) + ZEND_PARSE_PARAMETERS_END(); + + ch = Z_CURL_P(zid); + + error = curl_easy_upkeep(ch->cp); + SAVE_CURL_ERROR(ch, error); + + RETURN_BOOL(error == CURLE_OK); +} +/*}}} */ +#endif diff --git a/ext/curl/tests/curl_upkeep_001.phpt b/ext/curl/tests/curl_upkeep_001.phpt new file mode 100644 index 00000000000..8695c3a63aa --- /dev/null +++ b/ext/curl/tests/curl_upkeep_001.phpt @@ -0,0 +1,27 @@ +--TEST-- +curl_upkeep() function +--EXTENSIONS-- +curl +--SKIPIF-- += 7.62.0'); +?> +--FILE-- + +--EXPECT-- +bool(true)