Skip to content

Commit df8889b

Browse files
committed
Add new curl_upkeep() function
1 parent deb328b commit df8889b

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

ext/curl/curl.stub.php

+2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ function curl_getinfo(CurlHandle $handle, ?int $option = null): mixed {}
5454
/** @refcount 1 */
5555
function curl_init(?string $url = null): CurlHandle|false {}
5656

57+
function curl_upkeep(CurlHandle $handle): bool {}
58+
5759
function curl_multi_add_handle(CurlMultiHandle $multi_handle, CurlHandle $handle): int {}
5860

5961
function curl_multi_close(CurlMultiHandle $multi_handle): void {}

ext/curl/curl_arginfo.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 3abf3f6d5dfb14d2e22ebf5730a869e2c17c7958 */
2+
* Stub hash: db30828ac619f11745aacb0a93f198166b603fe7 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_close, 0, 1, IS_VOID, 0)
55
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
@@ -49,6 +49,10 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_curl_init, 0, 0, CurlHandle,
4949
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, url, IS_STRING, 1, "null")
5050
ZEND_END_ARG_INFO()
5151

52+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_upkeep, 0, 1, _IS_BOOL, 0)
53+
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
54+
ZEND_END_ARG_INFO()
55+
5256
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_curl_multi_add_handle, 0, 2, IS_LONG, 0)
5357
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
5458
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
@@ -144,6 +148,7 @@ ZEND_FUNCTION(curl_exec);
144148
ZEND_FUNCTION(curl_file_create);
145149
ZEND_FUNCTION(curl_getinfo);
146150
ZEND_FUNCTION(curl_init);
151+
ZEND_FUNCTION(curl_upkeep);
147152
ZEND_FUNCTION(curl_multi_add_handle);
148153
ZEND_FUNCTION(curl_multi_close);
149154
ZEND_FUNCTION(curl_multi_errno);
@@ -179,6 +184,7 @@ static const zend_function_entry ext_functions[] = {
179184
ZEND_FE(curl_file_create, arginfo_curl_file_create)
180185
ZEND_FE(curl_getinfo, arginfo_curl_getinfo)
181186
ZEND_FE(curl_init, arginfo_curl_init)
187+
ZEND_FE(curl_upkeep, arginfo_curl_upkeep)
182188
ZEND_FE(curl_multi_add_handle, arginfo_curl_multi_add_handle)
183189
ZEND_FE(curl_multi_close, arginfo_curl_multi_close)
184190
ZEND_FE(curl_multi_errno, arginfo_curl_multi_errno)

ext/curl/interface.c

+30
Original file line numberDiff line numberDiff line change
@@ -3954,3 +3954,33 @@ PHP_FUNCTION(curl_pause)
39543954
RETURN_LONG(curl_easy_pause(ch->cp, bitmask));
39553955
}
39563956
/* }}} */
3957+
3958+
/* {{{ perform connection upkeep checks */
3959+
PHP_FUNCTION(curl_upkeep)
3960+
{
3961+
#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */
3962+
CURLcode error;
3963+
zval *zid;
3964+
php_curl *ch;
3965+
3966+
ZEND_PARSE_PARAMETERS_START(1, 1)
3967+
Z_PARAM_OBJECT_OF_CLASS(zid, curl_ce)
3968+
ZEND_PARSE_PARAMETERS_END();
3969+
3970+
ch = Z_CURL_P(zid);
3971+
3972+
error = curl_easy_upkeep(ch->cp);
3973+
SAVE_CURL_ERROR(ch, error);
3974+
3975+
if (error != CURLE_OK) {
3976+
RETURN_FALSE;
3977+
} else {
3978+
RETURN_TRUE;
3979+
}
3980+
#else
3981+
php_error_docref(NULL, E_WARNING, "requires libcurl 7.62.0 or later, current version is %s", curl_version_info(CURLVERSION_NOW)->version);
3982+
3983+
RETURN_FALSE;
3984+
#endif
3985+
}
3986+
/*}}} */

0 commit comments

Comments
 (0)