Skip to content

Commit

Permalink
[6.0] cURL supports version 8.4 (#5481)
Browse files Browse the repository at this point in the history
* support php8.4 curl

* fix missing zif_swoole_exit

* remove php8.4
  • Loading branch information
NathanFreeman authored Sep 23, 2024
1 parent 0a6683d commit 2895341
Show file tree
Hide file tree
Showing 17 changed files with 3,911 additions and 6 deletions.
3 changes: 3 additions & 0 deletions config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,8 @@ EOF
swoole_source_file="$swoole_source_file \
thirdparty/php/curl/interface.cc \
thirdparty/php/curl/multi.cc \
thirdparty/php84/curl/interface.cc \
thirdparty/php84/curl/multi.cc \
thirdparty/php/sockets/multicast.cc \
thirdparty/php/sockets/sendrecvmsg.cc \
thirdparty/php/sockets/conversions.cc \
Expand Down Expand Up @@ -1259,6 +1261,7 @@ EOF
PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/sockets)
PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/standard)
PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php/curl)
PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/php84/curl)
if test "$PHP_NGHTTP2_DIR" = "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/thirdparty/nghttp2)
fi
Expand Down
4 changes: 4 additions & 0 deletions ext-src/php_swoole_curl.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@
SW_EXTERN_C_BEGIN
#include <curl/curl.h>
#include <curl/multi.h>
#if PHP_VERSION_ID >= 80400
#include "thirdparty/php84/curl/curl_private.h"
#else
#include "thirdparty/php/curl/curl_private.h"
#endif
SW_EXTERN_C_END

#if LIBCURL_VERSION_NUM < 0x073800
Expand Down
2 changes: 2 additions & 0 deletions ext-src/swoole_coroutine.cc
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ static int coro_exit_handler(zend_execute_data *execute_data) {
return ZEND_USER_OPCODE_DISPATCH;
}
#else
SW_EXTERN_C_BEGIN
extern ZEND_FUNCTION(exit);
PHP_FUNCTION(swoole_exit) {
zend_long flags = 0;
Expand Down Expand Up @@ -253,6 +254,7 @@ PHP_FUNCTION(swoole_exit) {
ZEND_FN(exit)(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
}
SW_EXTERN_C_END
#endif

static int coro_begin_silence_handler(zend_execute_data *execute_data) {
Expand Down
12 changes: 12 additions & 0 deletions ext-src/swoole_redis_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,11 @@ int php_swoole_redis_server_onReceive(Server *serv, RecvData *req) {

char _command[SW_REDIS_MAX_COMMAND_SIZE];
size_t _command_len = sw_snprintf(_command, sizeof(_command), "_handler_%.*s", command_len, command);
#if PHP_VERSION_ID >= 80400
zend_str_tolower(_command, _command_len);
#else
php_strtolower(_command, _command_len);
#endif

auto i = redis_handlers.find(std::string(_command, _command_len));
if (i == redis_handlers.end()) {
Expand Down Expand Up @@ -215,7 +219,11 @@ static PHP_METHOD(swoole_redis_server, setHandler) {

char _command[SW_REDIS_MAX_COMMAND_SIZE];
size_t _command_len = sw_snprintf(_command, sizeof(_command), "_handler_%s", command);
#if PHP_VERSION_ID >= 80400
zend_str_tolower(_command, _command_len);
#else
php_strtolower(_command, _command_len);
#endif

zend_update_property(swoole_redis_server_ce, SW_Z8_OBJ_P(ZEND_THIS), _command, _command_len, zcallback);

Expand All @@ -241,7 +249,11 @@ static PHP_METHOD(swoole_redis_server, getHandler) {

char _command[SW_REDIS_MAX_COMMAND_SIZE];
size_t _command_len = sw_snprintf(_command, sizeof(_command), "_handler_%s", command);
#if PHP_VERSION_ID >= 80400
zend_str_tolower(_command, _command_len);
#else
php_strtolower(_command, _command_len);
#endif

zval rv;
zval *handler = zend_read_property(swoole_redis_server_ce, SW_Z8_OBJ_P(ZEND_THIS), _command, _command_len, 1, &rv);
Expand Down
5 changes: 5 additions & 0 deletions ext-src/swoole_runtime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,14 @@
#include "swoole_util.h"

#include "thirdparty/php/standard/proc_open.h"

#ifdef SW_USE_CURL
#if PHP_VERSION_ID >= 80400
#include "thirdparty/php84/curl/curl_interface.h"
#else
#include "thirdparty/php/curl/curl_interface.h"
#endif
#endif

#include <unordered_map>

Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/curl_arginfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#include "curl_interface.h"

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_close, 0, 1, IS_VOID, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/curl_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

#include "php_swoole_cxx.h"

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400
SW_EXTERN_C_BEGIN

#include <curl/curl.h>
Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/curl_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

/* Copied from PHP-4f68662f5b61aecf90f6d8005976f5f91d4ce8d3 */

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400

#ifndef _PHP_CURL_PRIVATE_H
#define _PHP_CURL_PRIVATE_H
Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

#include "php_swoole_cxx.h"

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400
#include "php_swoole_curl.h"

using namespace swoole;
Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/multi.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include "php_swoole_cxx.h"
#include "zend_object_handlers.h"

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400
#include "php_swoole_curl.h"

using swoole::curl::Multi;
Expand Down
2 changes: 1 addition & 1 deletion thirdparty/php/curl/php_curl.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

/* Copied from PHP-7.4.11 */

#ifdef SW_USE_CURL
#if defined(SW_USE_CURL) && PHP_VERSION_ID < 80400

#ifndef _PHP_CURL_H
#define _PHP_CURL_H
Expand Down
162 changes: 162 additions & 0 deletions thirdparty/php84/curl/curl_arginfo.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
/* This is a generated file, edit the .stub.php file instead.
* Stub hash: ddfcdd8a0bf0ee6c338ec1689c6de5d7fd87303d */
#include "curl_interface.h"

#if defined(SW_USE_CURL) && PHP_VERSION_ID >= 80400
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_close, 0, 1, IS_VOID, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_swoole_native_curl_copy_handle, 0, 1, CurlHandle, MAY_BE_FALSE)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_errno, 0, 1, IS_LONG, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_error, 0, 1, IS_STRING, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_swoole_native_curl_escape, 0, 2, MAY_BE_STRING|MAY_BE_FALSE)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0)
ZEND_END_ARG_INFO()

#define arginfo_swoole_native_curl_unescape arginfo_swoole_native_curl_escape

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_setopt, 0, 3, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_swoole_native_curl_exec, 0, 1, MAY_BE_STRING|MAY_BE_BOOL)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_getinfo, 0, 1, IS_MIXED, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, option, IS_LONG, 1, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_swoole_native_curl_init, 0, 0, CurlHandle, MAY_BE_FALSE)
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_swoole_native_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_swoole_native_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)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_close, 0, 1, IS_VOID, 0)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_errno, 0, 1, IS_LONG, 0)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_exec, 0, 2, IS_LONG, 0)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_ARG_INFO(1, still_running)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_getcontent, 0, 1, IS_STRING, 1)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_swoole_native_curl_multi_info_read, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, queued_messages, "null")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_swoole_native_curl_multi_init, 0, 0, CurlMultiHandle, 0)
ZEND_END_ARG_INFO()

#define arginfo_swoole_native_curl_multi_remove_handle arginfo_swoole_native_curl_multi_add_handle

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_select, 0, 1, IS_LONG, 0)
ZEND_ARG_OBJ_INFO(0, multi_handle, CurlMultiHandle, 0)
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeout, IS_DOUBLE, 0, "1.0")
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_multi_strerror, 0, 1, IS_STRING, 1)
ZEND_ARG_TYPE_INFO(0, error_code, IS_LONG, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_pause, 0, 2, IS_LONG, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
ZEND_END_ARG_INFO()

#define arginfo_swoole_native_curl_reset arginfo_swoole_native_curl_close

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_setopt_array, 0, 2, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_ARG_TYPE_INFO(0, options, IS_ARRAY, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_swoole_native_curl_setopt, 0, 3, _IS_BOOL, 0)
ZEND_ARG_OBJ_INFO(0, handle, CurlHandle, 0)
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0)
ZEND_END_ARG_INFO()

#define arginfo_swoole_native_curl_strerror arginfo_swoole_native_curl_multi_strerror

ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_swoole_native_curl_version, 0, 0, MAY_BE_ARRAY|MAY_BE_FALSE)
ZEND_END_ARG_INFO()

static const zend_function_entry swoole_native_curl_functions[] = {
ZEND_FE(swoole_native_curl_close, arginfo_swoole_native_curl_close)
ZEND_FE(swoole_native_curl_copy_handle, arginfo_swoole_native_curl_copy_handle)
ZEND_FE(swoole_native_curl_errno, arginfo_swoole_native_curl_errno)
ZEND_FE(swoole_native_curl_error, arginfo_swoole_native_curl_error)
ZEND_FE(swoole_native_curl_escape, arginfo_swoole_native_curl_escape)
ZEND_FE(swoole_native_curl_unescape, arginfo_swoole_native_curl_unescape)
ZEND_FE(swoole_native_curl_multi_setopt, arginfo_swoole_native_curl_multi_setopt)
ZEND_FE(swoole_native_curl_exec, arginfo_swoole_native_curl_exec)
ZEND_FE(swoole_native_curl_getinfo, arginfo_swoole_native_curl_getinfo)
ZEND_FE(swoole_native_curl_init, arginfo_swoole_native_curl_init)
#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */
ZEND_FE(swoole_native_curl_upkeep, arginfo_swoole_native_curl_upkeep)
#endif
ZEND_FE(swoole_native_curl_multi_add_handle, arginfo_swoole_native_curl_multi_add_handle)
ZEND_FE(swoole_native_curl_multi_close, arginfo_swoole_native_curl_multi_close)
ZEND_FE(swoole_native_curl_multi_errno, arginfo_swoole_native_curl_multi_errno)
ZEND_FE(swoole_native_curl_multi_exec, arginfo_swoole_native_curl_multi_exec)
ZEND_FE(swoole_native_curl_multi_getcontent, arginfo_swoole_native_curl_multi_getcontent)
ZEND_FE(swoole_native_curl_multi_info_read, arginfo_swoole_native_curl_multi_info_read)
ZEND_FE(swoole_native_curl_multi_init, arginfo_swoole_native_curl_multi_init)
ZEND_FE(swoole_native_curl_multi_remove_handle, arginfo_swoole_native_curl_multi_remove_handle)
ZEND_FE(swoole_native_curl_multi_select, arginfo_swoole_native_curl_multi_select)
ZEND_FE(swoole_native_curl_multi_strerror, arginfo_swoole_native_curl_multi_strerror)
ZEND_FE(swoole_native_curl_pause, arginfo_swoole_native_curl_pause)
ZEND_FE(swoole_native_curl_reset, arginfo_swoole_native_curl_reset)
ZEND_FE(swoole_native_curl_setopt_array, arginfo_swoole_native_curl_setopt_array)
ZEND_FE(swoole_native_curl_setopt, arginfo_swoole_native_curl_setopt)
ZEND_FE(swoole_native_curl_strerror, arginfo_swoole_native_curl_strerror)
ZEND_FE(swoole_native_curl_version, arginfo_swoole_native_curl_version)
ZEND_FE_END
};

static const zend_function_entry class_CurlHandle_methods[] = {
ZEND_FE_END
};

static const zend_function_entry class_CurlMultiHandle_methods[] = {
ZEND_FE_END
};

static const zend_function_entry class_CurlShareHandle_methods[] = {
ZEND_FE_END
};
#endif
60 changes: 60 additions & 0 deletions thirdparty/php84/curl/curl_interface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
+----------------------------------------------------------------------+
| Swoole |
+----------------------------------------------------------------------+
| Copyright (c) 2012-2018 The Swoole Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.0 of the Apache license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.apache.org/licenses/LICENSE-2.0.html |
| If you did not receive a copy of the Apache2.0 license and are unable|
| to obtain it through the world-wide-web, please send a note to |
| [email protected] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: NathanFreeman <[email protected]> |
+----------------------------------------------------------------------+
*/
#pragma once

#include "php_swoole_cxx.h"
#if defined(SW_USE_CURL) && PHP_VERSION_ID >= 80400
SW_EXTERN_C_BEGIN

#include <curl/curl.h>
#include <curl/multi.h>

void swoole_native_curl_minit(int module_number);
void swoole_native_curl_mshutdown();

ZEND_FUNCTION(swoole_native_curl_close);
ZEND_FUNCTION(swoole_native_curl_copy_handle);
ZEND_FUNCTION(swoole_native_curl_errno);
ZEND_FUNCTION(swoole_native_curl_error);
ZEND_FUNCTION(swoole_native_curl_escape);
ZEND_FUNCTION(swoole_native_curl_unescape);
ZEND_FUNCTION(swoole_native_curl_multi_setopt);
ZEND_FUNCTION(swoole_native_curl_exec);
ZEND_FUNCTION(swoole_native_curl_getinfo);
ZEND_FUNCTION(swoole_native_curl_init);
#if LIBCURL_VERSION_NUM >= 0x073E00 /* Available since 7.62.0 */
ZEND_FUNCTION(swoole_native_curl_upkeep);
#endif
ZEND_FUNCTION(swoole_native_curl_multi_add_handle);
ZEND_FUNCTION(swoole_native_curl_multi_close);
ZEND_FUNCTION(swoole_native_curl_multi_errno);
ZEND_FUNCTION(swoole_native_curl_multi_exec);
ZEND_FUNCTION(swoole_native_curl_multi_getcontent);
ZEND_FUNCTION(swoole_native_curl_multi_info_read);
ZEND_FUNCTION(swoole_native_curl_multi_init);
ZEND_FUNCTION(swoole_native_curl_multi_remove_handle);
ZEND_FUNCTION(swoole_native_curl_multi_select);
ZEND_FUNCTION(swoole_native_curl_multi_strerror);
ZEND_FUNCTION(swoole_native_curl_pause);
ZEND_FUNCTION(swoole_native_curl_reset);
ZEND_FUNCTION(swoole_native_curl_setopt_array);
ZEND_FUNCTION(swoole_native_curl_setopt);
ZEND_FUNCTION(swoole_native_curl_strerror);
ZEND_FUNCTION(swoole_native_curl_version);
SW_EXTERN_C_END
#endif
Loading

0 comments on commit 2895341

Please sign in to comment.