Skip to content

Commit bb38ee8

Browse files
committed
Implement new Curl URL Api
1 parent b9af433 commit bb38ee8

15 files changed

+592
-3
lines changed

ext/curl/config.m4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ int main(int argc, char *argv[])
8181
$CURL_LIBS
8282
])
8383

84-
PHP_NEW_EXTENSION(curl, interface.c multi.c share.c curl_file.c, $ext_shared)
84+
PHP_NEW_EXTENSION(curl, interface.c multi.c share.c curl_file.c url.c, $ext_shared)
8585
PHP_INSTALL_HEADERS([ext/curl], [php_curl.h])
8686
PHP_SUBST(CURL_SHARED_LIBADD)
8787
fi

ext/curl/config.w32

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ if (PHP_CURL != "no") {
2626
CHECK_LIB("libssh2.lib", "curl", PHP_CURL) &&
2727
CHECK_LIB("nghttp2.lib", "curl", PHP_CURL))
2828
) {
29-
EXTENSION("curl", "interface.c multi.c share.c curl_file.c");
29+
EXTENSION("curl", "interface.c multi.c share.c curl_file.c url.c");
3030
AC_DEFINE('HAVE_CURL', 1, 'Have cURL library');
3131
ADD_FLAG("CFLAGS_CURL", "/D CURL_STATICLIB /D PHP_CURL_EXPORTS=1");
3232
PHP_INSTALL_HEADERS("ext/curl", "php_curl.h");

ext/curl/curl.stub.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ final class CurlShareHandle
2626
{
2727
}
2828

29+
#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */
30+
/**
31+
* @strict-properties
32+
* @not-serializable
33+
*/
34+
final class CurlUrl implements Stringable
35+
{
36+
public function __toString(): string {}
37+
}
38+
#endif
39+
2940
function curl_close(CurlHandle $handle): void {}
3041

3142
/** @refcount 1 */
@@ -109,6 +120,20 @@ function curl_share_strerror(int $error_code): ?string {}
109120
/** @refcount 1 */
110121
function curl_strerror(int $error_code): ?string {}
111122

123+
#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */
124+
function curl_url(?string $url = null): CurlUrl|false {}
125+
126+
function curl_url_set(CurlUrl $url, int $part, string $content, int $flags = 0): bool {}
127+
128+
function curl_url_get(CurlUrl $url, int $part, int $flags = 0): string|false {}
129+
130+
function curl_url_errno(CurlUrl $url): int {}
131+
#endif
132+
133+
#if LIBCURL_VERSION_NUM >= 0x075000 /* Available since 7.80.0 */
134+
function curl_url_strerror(int $error_code): ?string {}
135+
#endif
136+
112137
/**
113138
* @return array<string, int|string|array>|false
114139
* @refcount 1

ext/curl/curl_arginfo.h

Lines changed: 96 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ext/curl/curl_private.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ typedef struct {
110110
zval private_data;
111111
/* CurlShareHandle object set using CURLOPT_SHARE. */
112112
struct _php_curlsh *share;
113+
#if LIBCURL_VERSION_NUM >= 0x073f00 /* 7.63.0 */
114+
struct _php_curlurl *url;
115+
#endif
113116
zend_object std;
114117
} php_curl;
115118

@@ -137,6 +140,16 @@ typedef struct _php_curlsh {
137140
zend_object std;
138141
} php_curlsh;
139142

143+
#if LIBCURL_VERSION_NUM >= 0x073e00 /* 7.62.0 */
144+
typedef struct _php_curlurl {
145+
CURLU *url;
146+
struct {
147+
int no;
148+
} err;
149+
zend_object std;
150+
} php_curlurl;
151+
#endif
152+
140153
php_curl *init_curl_handle_into_zval(zval *curl);
141154
void init_curl_handle(php_curl *ch);
142155
void _php_curl_cleanup_handle(php_curl *);
@@ -156,8 +169,19 @@ static inline php_curlsh *curl_share_from_obj(zend_object *obj) {
156169

157170
#define Z_CURL_SHARE_P(zv) curl_share_from_obj(Z_OBJ_P(zv))
158171

172+
#if LIBCURL_VERSION_NUM >= 0x073e00 /* 7.62.0 */
173+
static inline php_curlurl *curl_url_from_obj(zend_object *obj) {
174+
return (php_curlurl *)((char *)(obj) - XtOffsetOf(php_curlurl, std));
175+
}
176+
177+
#define Z_CURL_URL_P(zv) curl_url_from_obj(Z_OBJ_P(zv))
178+
#endif
179+
159180
void curl_multi_register_handlers(void);
160181
void curl_share_register_handlers(void);
182+
#if LIBCURL_VERSION_NUM >= 0x073e00 /* 7.62.0 */
183+
void curl_url_register_handlers(void);
184+
#endif
161185
void curlfile_register_class(void);
162186
int curl_cast_object(zend_object *obj, zval *result, int type);
163187

0 commit comments

Comments
 (0)