summaryrefslogtreecommitdiffstats
path: root/openswoole-php82.patch
diff options
context:
space:
mode:
Diffstat (limited to 'openswoole-php82.patch')
-rw-r--r--openswoole-php82.patch677
1 files changed, 0 insertions, 677 deletions
diff --git a/openswoole-php82.patch b/openswoole-php82.patch
deleted file mode 100644
index 3c59005..0000000
--- a/openswoole-php82.patch
+++ /dev/null
@@ -1,677 +0,0 @@
-diff --git a/ext-src/php_swoole.cc b/ext-src/php_swoole.cc
-index 2ee5f4054..dcfc775e4 100644
---- a/ext-src/php_swoole.cc
-+++ b/ext-src/php_swoole.cc
-@@ -389,6 +389,9 @@ void php_swoole_set_global_option(HashTable *vht) {
- if (php_swoole_array_get_value(vht, "max_concurrency", ztmp)) {
- SwooleG.max_concurrency = (uint32_t) SW_MAX(0, zval_get_long(ztmp));
- }
-+ if (php_swoole_array_get_value(vht, "enable_server_token", ztmp) && zval_is_true(ztmp)) {
-+ SwooleG.enable_server_token = zval_is_true(ztmp);
-+ }
- }
-
- void php_swoole_register_rshutdown_callback(swoole::Callback cb, void *private_data) {
-diff --git a/ext-src/php_swoole_cxx.cc b/ext-src/php_swoole_cxx.cc
-index 3a08191e8..8ae0be5c5 100644
---- a/ext-src/php_swoole_cxx.cc
-+++ b/ext-src/php_swoole_cxx.cc
-@@ -18,6 +18,7 @@ typedef zval zend_source_string_t;
- typedef zend_string zend_source_string_t;
- #endif
-
-+#if PHP_VERSION_ID < 80200
- static zend_op_array *swoole_compile_string(zend_source_string_t *source_string, ZEND_STR_CONST char *filename);
-
- // for compatibly with dis_eval
-@@ -28,6 +29,18 @@ static zend_op_array *swoole_compile_string(zend_source_string_t *source_string,
- opa->type = ZEND_USER_FUNCTION;
- return opa;
- }
-+#else
-+static zend_op_array *swoole_compile_string(zend_source_string_t *source_string, ZEND_STR_CONST char *filename, zend_compile_position position);
-+
-+static zend_op_array *(*old_compile_string)(zend_source_string_t *source_string, ZEND_STR_CONST char *filename, zend_compile_position position);
-+
-+static zend_op_array *swoole_compile_string(zend_source_string_t *source_string, ZEND_STR_CONST char *filename, zend_compile_position position) {
-+ zend_op_array *opa = old_compile_string(source_string, filename, position);
-+ opa->type = ZEND_USER_FUNCTION;
-+ return opa;
-+}
-+#endif
-+
-
- namespace zend {
- bool eval(const std::string &code, std::string const &filename) {
-diff --git a/ext-src/php_swoole_library.h b/ext-src/php_swoole_library.h
-index 892f795eb..a632c9f4e 100644
---- a/ext-src/php_swoole_library.h
-+++ b/ext-src/php_swoole_library.h
-@@ -2,7 +2,7 @@
- * Generated by build-library.php, Please DO NOT modify!
- */
-
--/* $Id: f9f606fb95652b0c1adfc2011513808185152568 */
-+/* $Id: 19668965fb5df74d799cefa05913535916135160 */
-
- static const char* swoole_library_source_constants =
- "\n"
-@@ -172,6 +172,8 @@ static const char* swoole_library_source_core_constant =
- "\n"
- " public const OPTION_MAX_CONCURRENCY = 'max_concurrency';\n"
- "\n"
-+ " public const OPTION_ENABLE_SERVER_TOKEN = 'enable_server_token';\n"
-+ "\n"
- " public const OPTION_AIO_CORE_WORKER_NUM = 'aio_core_worker_num';\n"
- "\n"
- " public const OPTION_AIO_WORKER_NUM = 'aio_worker_num';\n"
-@@ -888,12 +890,18 @@ static const char* swoole_library_source_core_array_object =
- " return count($this->array);\n"
- " }\n"
- "\n"
-+ " /**\n"
-+ " * @return mixed\n"
-+ " */\n"
- " #[\\ReturnTypeWillChange]\n"
- " public function current()\n"
- " {\n"
- " return current($this->array);\n"
- " }\n"
- "\n"
-+ " /**\n"
-+ " * @return mixed\n"
-+ " */\n"
- " #[\\ReturnTypeWillChange]\n"
- " public function key()\n"
- " {\n"
-@@ -1065,6 +1073,7 @@ static const char* swoole_library_source_core_array_object =
- " /**\n"
- " * @param mixed $key\n"
- " * @param mixed $offset\n"
-+ " * @return bool\n"
- " */\n"
- " #[\\ReturnTypeWillChange]\n"
- " public function offsetExists($offset)\n"
-@@ -3937,17 +3946,17 @@ static const char* swoole_library_source_core_curl_handler =
- " case CURLOPT_PRIVATE:\n"
- " $this->info['private'] = $value;\n"
- " break;\n"
-- " /*\n"
-- " * Ignore options\n"
-- " */\n"
-+ " /*\n"
-+ " * Ignore options\n"
-+ " */\n"
- " case CURLOPT_VERBOSE:\n"
- " // trigger_error('swoole_curl_setopt(): CURLOPT_VERBOSE is not supported', E_USER_WARNING);\n"
- " case CURLOPT_SSLVERSION:\n"
- " case CURLOPT_NOSIGNAL:\n"
- " case CURLOPT_FRESH_CONNECT:\n"
-- " /*\n"
-- " * From PHP 5.1.3, this option has no effect: the raw output will always be returned when CURLOPT_RETURNTRANSFER is used.\n"
-- " */\n"
-+ " /*\n"
-+ " * From PHP 5.1.3, this option has no effect: the raw output will always be returned when CURLOPT_RETURNTRANSFER is used.\n"
-+ " */\n"
- " case CURLOPT_BINARYTRANSFER: /* TODO */\n"
- " case CURLOPT_DNS_USE_GLOBAL_CACHE:\n"
- " case CURLOPT_DNS_CACHE_TIMEOUT:\n"
-@@ -3961,9 +3970,9 @@ static const char* swoole_library_source_core_curl_handler =
- " case CURLOPT_HEADEROPT:\n"
- " case CURLOPT_PROXYHEADER:\n"
- " break;\n"
-- " /*\n"
-- " * SSL\n"
-- " */\n"
-+ " /*\n"
-+ " * SSL\n"
-+ " */\n"
- " case CURLOPT_SSL_VERIFYHOST:\n"
- " break;\n"
- " case CURLOPT_SSL_VERIFYPEER:\n"
-@@ -3986,9 +3995,9 @@ static const char* swoole_library_source_core_curl_handler =
- " case CURLOPT_SSLKEYPASSWD:\n"
- " $this->clientOptions[Constant::OPTION_SSL_PASSPHRASE] = $value;\n"
- " break;\n"
-- " /*\n"
-- " * Http POST\n"
-- " */\n"
-+ " /*\n"
-+ " * Http POST\n"
-+ " */\n"
- " case CURLOPT_POST:\n"
- " $this->method = 'POST';\n"
- " break;\n"
-@@ -3998,18 +4007,18 @@ static const char* swoole_library_source_core_curl_handler =
- " $this->method = 'POST';\n"
- " }\n"
- " break;\n"
-- " /*\n"
-- " * Upload\n"
-- " */\n"
-+ " /*\n"
-+ " * Upload\n"
-+ " */\n"
- " case CURLOPT_SAFE_UPLOAD:\n"
- " if (!$value) {\n"
- " trigger_error('swoole_curl_setopt(): Disabling safe uploads is no longer supported', E_USER_WARNING);\n"
- " return false;\n"
- " }\n"
- " break;\n"
-- " /*\n"
-- " * Http Header\n"
-- " */\n"
-+ " /*\n"
-+ " * Http Header\n"
-+ " */\n"
- " case CURLOPT_HTTPHEADER:\n"
- " if (!is_array($value) and !is_iterable($value)) {\n"
- " trigger_error('swoole_curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER argument', E_USER_WARNING);\n"
-@@ -4056,9 +4065,9 @@ static const char* swoole_library_source_core_curl_handler =
- " case CURLOPT_FAILONERROR:\n"
- " $this->failOnError = $value;\n"
- " break;\n"
-- " /*\n"
-- " * Http Cookie\n"
-- " */\n"
-+ " /*\n"
-+ " * Http Cookie\n"
-+ " */\n"
- " case CURLOPT_COOKIE:\n"
- " $this->setHeader('Cookie', $value);\n"
- " break;\n"
-@@ -5670,7 +5679,7 @@ static const char* swoole_library_source_core_fast_cgi_request =
- " public function __toString(): string\n"
- " {\n"
- " $body = $this->getBody();\n"
-- " $beginRequestFrame = new BeginRequest(FastCGI::RESPONDER, ($this->keepConn ? FastCGI::KEEP_CONN : 0));\n"
-+ " $beginRequestFrame = new BeginRequest(FastCGI::RESPONDER, $this->keepConn ? FastCGI::KEEP_CONN : 0);\n"
- " $paramsFrame = new Params($this->getParams());\n"
- " $paramsEofFrame = new Params();\n"
- " if (empty($body)) {\n"
-@@ -6622,7 +6631,7 @@ static const char* swoole_library_source_core_coroutine_fast_cgi_proxy =
- " $server = $userRequest->server;\n"
- " $headers = $userRequest->header;\n"
- " $pathInfo = $userRequest->server['path_info'];\n"
-- " $pathInfo = '/' . (ltrim($pathInfo, '/'));\n"
-+ " $pathInfo = '/' . ltrim($pathInfo, '/');\n"
- " if (strlen($this->index) !== 0) {\n"
- " $extension = pathinfo($pathInfo, PATHINFO_EXTENSION);\n"
- " if (empty($extension)) {\n"
-@@ -6675,7 +6684,7 @@ static const char* swoole_library_source_core_coroutine_fast_cgi_proxy =
- "\n"
- " public function pass($userRequest, $userResponse): void\n"
- " {\n"
-- " if (!($userRequest instanceof HttpRequest)) {\n"
-+ " if (!$userRequest instanceof HttpRequest) {\n"
- " $request = $this->translateRequest($userRequest);\n"
- " } else {\n"
- " $request = $userRequest;\n"
-@@ -6727,6 +6736,7 @@ static const char* swoole_library_source_core_process_manager =
- "namespace Swoole\\Process;\n"
- "\n"
- "use Swoole\\Constant;\n"
-+ "\n"
- "use function Swoole\\Coroutine\\run;\n"
- "\n"
- "class Manager\n"
-@@ -6914,6 +6924,7 @@ static const char* swoole_library_source_core_server_helper =
- " 'http2_max_concurrent_streams' => true,\n"
- " 'http2_max_frame_size' => true,\n"
- " 'http2_max_header_list_size' => true,\n"
-+ " 'enable_server_token' => true,\n"
- " ];\n"
- "\n"
- " public const PORT_OPTIONS = [\n"
-@@ -6972,7 +6983,7 @@ static const char* swoole_library_source_core_server_helper =
- "\n"
- " foreach ($input_options as $k => $v) {\n"
- " if (!array_key_exists(strtolower($k), $const_options)) {\n"
-- " //TODO throw exception\n"
-+ " // TODO throw exception\n"
- " trigger_error(\"Unknown option [{$k}]\", E_USER_WARNING);\n"
- " debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);\n"
- " }\n"
-@@ -7001,85 +7012,85 @@ static const char* swoole_library_source_core_server_helper =
- " $event_workers = '';\n"
- " $event_workers .= \"# TYPE openswoole_event_workers_start_time gauge\\n\";\n"
- " foreach ($stats['event_workers'] as $stat) {\n"
-- " $event_workers .= \"openswoole_event_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_time']}\\n\";\n"
-+ " $event_workers .= \"openswoole_event_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_time']}\\n\";\n"
- " }\n"
- " $event_workers .= \"# TYPE openswoole_event_workers_start_seconds gauge\\n\";\n"
- " foreach ($stats['event_workers'] as $stat) {\n"
-- " $event_workers .= \"openswoole_event_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_seconds']}\\n\";\n"
-+ " $event_workers .= \"openswoole_event_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_seconds']}\\n\";\n"
- " }\n"
- " $event_workers .= \"# TYPE openswoole_event_workers_dispatch_count gauge\\n\";\n"
- " foreach ($stats['event_workers'] as $stat) {\n"
-- " $event_workers .= \"openswoole_event_workers_dispatch_count{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['dispatch_count']}\\n\";\n"
-+ " $event_workers .= \"openswoole_event_workers_dispatch_count{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['dispatch_count']}\\n\";\n"
- " }\n"
- " $event_workers .= \"# TYPE openswoole_event_workers_request_count gauge\\n\";\n"
- " foreach ($stats['event_workers'] as $stat) {\n"
-- " $event_workers .= \"openswoole_event_workers_request_count{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['request_count']}\\n\";\n"
-+ " $event_workers .= \"openswoole_event_workers_request_count{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['request_count']}\\n\";\n"
- " }\n"
- "\n"
- " $task_workers = '';\n"
- " $task_workers .= \"# TYPE openswoole_task_workers_start_time gauge\\n\";\n"
- " foreach ($stats['task_workers'] as $stat) {\n"
-- " $task_workers .= \"openswoole_task_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_time']}\\n\";\n"
-+ " $task_workers .= \"openswoole_task_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_time']}\\n\";\n"
- " }\n"
- " $task_workers .= \"# TYPE openswoole_task_workers_start_seconds gauge\\n\";\n"
- " foreach ($stats['task_workers'] as $stat) {\n"
-- " $task_workers .= \"openswoole_task_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_seconds']}\\n\";\n"
-+ " $task_workers .= \"openswoole_task_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_seconds']}\\n\";\n"
- " }\n"
- "\n"
- " $user_workers = '';\n"
- " $user_workers .= \"# TYPE openswoole_user_workers_start_time gauge\\n\";\n"
- " foreach ($stats['user_workers'] as $stat) {\n"
-- " $user_workers .= \"openswoole_user_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_time']}\\n\";\n"
-+ " $user_workers .= \"openswoole_user_workers_start_time{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_time']}\\n\";\n"
- " }\n"
- " $user_workers .= \"# TYPE openswoole_user_workers_start_seconds gauge\\n\";\n"
- " foreach ($stats['user_workers'] as $stat) {\n"
-- " $user_workers .= \"openswoole_user_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} ${stat['start_seconds']}\\n\";\n"
-+ " $user_workers .= \"openswoole_user_workers_start_seconds{worker_id=\\\"{$stat['worker_id']}\\\"} {$stat['start_seconds']}\\n\";\n"
- " }\n"
- "\n"
- " return \"# TYPE openswoole_info gauge\\n\"\n"
- " . \"openswoole_info{version=\\\"{$stats['version']}\\\"} 1\\n\"\n"
- " . \"# TYPE openswoole_up gauge\\n\"\n"
-- " . \"openswoole_up ${stats['up']}\\n\"\n"
-+ " . \"openswoole_up {$stats['up']}\\n\"\n"
- " . \"# TYPE openswoole_reactor_num gauge\\n\"\n"
-- " . \"openswoole_reactor_threads_num ${stats['reactor_threads_num']}\\n\"\n"
-+ " . \"openswoole_reactor_threads_num {$stats['reactor_threads_num']}\\n\"\n"
- " . \"# TYPE openswoole_requests counter\\n\"\n"
-- " . \"openswoole_requests_total ${stats['requests_total']}\\n\"\n"
-+ " . \"openswoole_requests_total {$stats['requests_total']}\\n\"\n"
- " . \"# TYPE openswoole_start_time gauge\\n\"\n"
-- " . \"openswoole_start_time ${stats['start_time']}\\n\"\n"
-+ " . \"openswoole_start_time {$stats['start_time']}\\n\"\n"
- " . \"# TYPE openswoole_max_conn gauge\\n\"\n"
-- " . \"openswoole_max_conn ${stats['max_conn']}\\n\"\n"
-+ " . \"openswoole_max_conn {$stats['max_conn']}\\n\"\n"
- " . \"# TYPE openswoole_coroutine_num gauge\\n\"\n"
-- " . \"openswoole_coroutine_num ${stats['coroutine_num']}\\n\"\n"
-+ " . \"openswoole_coroutine_num {$stats['coroutine_num']}\\n\"\n"
- " . \"# TYPE openswoole_start_seconds gauge\\n\"\n"
-- " . \"openswoole_start_seconds ${stats['start_seconds']}\\n\"\n"
-+ " . \"openswoole_start_seconds {$stats['start_seconds']}\\n\"\n"
- " . \"# TYPE openswoole_workers_total gauge\\n\"\n"
-- " . \"openswoole_workers_total ${stats['workers_total']}\\n\"\n"
-+ " . \"openswoole_workers_total {$stats['workers_total']}\\n\"\n"
- " . \"# TYPE openswoole_workers_idle gauge\\n\"\n"
-- " . \"openswoole_workers_idle ${stats['workers_idle']}\\n\"\n"
-+ " . \"openswoole_workers_idle {$stats['workers_idle']}\\n\"\n"
- " . \"# TYPE openswoole_task_workers_total gauge\\n\"\n"
-- " . \"openswoole_task_workers_total ${stats['task_workers_total']}\\n\"\n"
-+ " . \"openswoole_task_workers_total {$stats['task_workers_total']}\\n\"\n"
- " . \"# TYPE openswoole_task_workers_idle gauge\\n\"\n"
-- " . \"openswoole_task_workers_idle ${stats['task_workers_idle']}\\n\"\n"
-+ " . \"openswoole_task_workers_idle {$stats['task_workers_idle']}\\n\"\n"
- " . \"# TYPE openswoole_user_workers_total gauge\\n\"\n"
-- " . \"openswoole_user_workers_total ${stats['user_workers_total']}\\n\"\n"
-+ " . \"openswoole_user_workers_total {$stats['user_workers_total']}\\n\"\n"
- " . \"# TYPE openswoole_dispatch_total gauge\\n\"\n"
-- " . \"openswoole_dispatch_total ${stats['dispatch_total']}\\n\"\n"
-+ " . \"openswoole_dispatch_total {$stats['dispatch_total']}\\n\"\n"
- " . \"# TYPE openswoole_connections_accepted gauge\\n\"\n"
-- " . \"openswoole_connections_accepted ${stats['connections_accepted']}\\n\"\n"
-+ " . \"openswoole_connections_accepted {$stats['connections_accepted']}\\n\"\n"
- " . \"# TYPE openswoole_connections_active gauge\\n\"\n"
-- " . \"openswoole_connections_active ${stats['connections_active']}\\n\"\n"
-+ " . \"openswoole_connections_active {$stats['connections_active']}\\n\"\n"
- " . \"# TYPE openswoole_connections_closed gauge\\n\"\n"
-- " . \"openswoole_connections_closed ${stats['connections_closed']}\\n\"\n"
-+ " . \"openswoole_connections_closed {$stats['connections_closed']}\\n\"\n"
- " . \"# TYPE openswoole_reload_count gauge\\n\"\n"
-- " . \"openswoole_reload_count ${stats['reload_count']}\\n\"\n"
-+ " . \"openswoole_reload_count {$stats['reload_count']}\\n\"\n"
- " . \"# TYPE openswoole_reload_last_time gauge\\n\"\n"
-- " . \"openswoole_reload_last_time ${stats['reload_last_time']}\\n\"\n"
-+ " . \"openswoole_reload_last_time {$stats['reload_last_time']}\\n\"\n"
- " . \"# TYPE openswoole_worker_vm_object_num gauge\\n\"\n"
-- " . \"openswoole_worker_vm_object_num ${stats['worker_vm_object_num']}\\n\"\n"
-+ " . \"openswoole_worker_vm_object_num {$stats['worker_vm_object_num']}\\n\"\n"
- " . \"# TYPE openswoole_worker_vm_resource_num gauge\\n\"\n"
-- " . \"openswoole_worker_vm_resource_num ${stats['worker_vm_resource_num']}\\n\"\n"
-+ " . \"openswoole_worker_vm_resource_num {$stats['worker_vm_resource_num']}\\n\"\n"
- " . \"# TYPE openswoole_worker_memory_usage gauge\\n\"\n"
-- " . \"openswoole_worker_memory_usage ${stats['worker_memory_usage']}\\n{$event_workers}{$task_workers}{$user_workers}\"\n"
-+ " . \"openswoole_worker_memory_usage {$stats['worker_memory_usage']}\\n{$event_workers}{$task_workers}{$user_workers}\"\n"
- " . '# EOF';\n"
- " }\n"
- "}\n";
-@@ -7181,7 +7192,7 @@ static const char* swoole_library_source_core_coroutine_functions =
- " echo Coroutine::printBackTrace($cid, DEBUG_BACKTRACE_IGNORE_ARGS, $depth);\n"
- " echo \"\\n\";\n"
- " $index++;\n"
-- " //limit the number of maximum outputs\n"
-+ " // limit the number of maximum outputs\n"
- " if ($index >= $limit) {\n"
- " break;\n"
- " }\n"
-@@ -7577,28 +7588,28 @@ static const char* swoole_library_source_functions =
- " $type = $_f->get(1)->trim();\n"
- "\n"
- " switch ($type) {\n"
-- " case 'i':\n"
-- " case 'int':\n"
-- " $table->column($name, Swoole\\Table::TYPE_INT);\n"
-- " break;\n"
-- " case 'f':\n"
-- " case 'float':\n"
-- " $table->column($name, Swoole\\Table::TYPE_FLOAT);\n"
-- " break;\n"
-- " case 's':\n"
-- " case 'string':\n"
-- " if ($_f->count() < 3) {\n"
-- " throw new RuntimeException('need to give string length');\n"
-- " }\n"
-- " $length = intval($_f->get(2)->trim()->toString());\n"
-- " if ($length <= 0) {\n"
-- " throw new RuntimeException(\"invalid string length[{$length}]\");\n"
-- " }\n"
-- " $table->column($name, Swoole\\Table::TYPE_STRING, $length);\n"
-- " break;\n"
-- " default:\n"
-- " throw new RuntimeException(\"unknown field type[{$type}]\");\n"
-- " break;\n"
-+ " case 'i':\n"
-+ " case 'int':\n"
-+ " $table->column($name, Swoole\\Table::TYPE_INT);\n"
-+ " break;\n"
-+ " case 'f':\n"
-+ " case 'float':\n"
-+ " $table->column($name, Swoole\\Table::TYPE_FLOAT);\n"
-+ " break;\n"
-+ " case 's':\n"
-+ " case 'string':\n"
-+ " if ($_f->count() < 3) {\n"
-+ " throw new RuntimeException('need to give string length');\n"
-+ " }\n"
-+ " $length = intval($_f->get(2)->trim()->toString());\n"
-+ " if ($length <= 0) {\n"
-+ " throw new RuntimeException(\"invalid string length[{$length}]\");\n"
-+ " }\n"
-+ " $table->column($name, Swoole\\Table::TYPE_STRING, $length);\n"
-+ " break;\n"
-+ " default:\n"
-+ " throw new RuntimeException(\"unknown field type[{$type}]\");\n"
-+ " break;\n"
- " }\n"
- " }\n"
- "\n"
-diff --git a/ext-src/swoole_coroutine.cc b/ext-src/swoole_coroutine.cc
-index 9dc0def33..2b9d1105b 100644
---- a/ext-src/swoole_coroutine.cc
-+++ b/ext-src/swoole_coroutine.cc
-@@ -66,7 +66,12 @@ bool PHPCoroutine::interrupt_thread_running = false;
-
- extern void php_swoole_load_library();
-
-+#if PHP_VERSION_ID < 80200
- static zend_bool *zend_vm_interrupt = nullptr;
-+#else
-+static zend_atomic_bool *zend_vm_interrupt = nullptr;
-+#endif
-+
- static user_opcode_handler_t ori_exit_handler = nullptr;
- static user_opcode_handler_t ori_begin_silence_handler = nullptr;
- static user_opcode_handler_t ori_end_silence_handler = nullptr;
-@@ -406,12 +411,18 @@ void PHPCoroutine::interrupt_thread_start() {
- if (interrupt_thread_running) {
- return;
- }
-+#if PHP_VERSION_ID < 80200
- zend_vm_interrupt = &EG(vm_interrupt);
-+#endif
- interrupt_thread_running = true;
- interrupt_thread = std::thread([]() {
- swoole_signal_block_all();
- while (interrupt_thread_running) {
-+#if PHP_VERSION_ID < 80200
- *zend_vm_interrupt = 1;
-+#else
-+ zend_atomic_bool_store_ex(&EG(vm_interrupt), true);
-+#endif
- std::this_thread::sleep_for(std::chrono::milliseconds(MAX_EXEC_MSEC / 2));
- }
- });
-diff --git a/ext-src/swoole_http_response.cc b/ext-src/swoole_http_response.cc
-index 50fe019bc..aa947f6fc 100644
---- a/ext-src/swoole_http_response.cc
-+++ b/ext-src/swoole_http_response.cc
-@@ -395,7 +395,7 @@ static void http_build_header(HttpContext *ctx, String *response, size_t body_le
- SW_HASHTABLE_FOREACH_END();
- }
-
-- if (!(header_flags & HTTP_HEADER_SERVER)) {
-+ if (!(header_flags & HTTP_HEADER_SERVER) && SwooleG.enable_server_token) {
- response->append(ZEND_STRL("Server: " SW_HTTP_SERVER_SOFTWARE "\r\n"));
- }
-
-diff --git a/ext-src/swoole_websocket_server.cc b/ext-src/swoole_websocket_server.cc
-index 578dc703e..8e2494f73 100644
---- a/ext-src/swoole_websocket_server.cc
-+++ b/ext-src/swoole_websocket_server.cc
-@@ -274,9 +274,8 @@ void swoole_websocket_onRequest(HttpContext *ctx) {
- "Connection: close\r\n"
- "Content-Type: text/html; charset=UTF-8\r\n"
- "Cache-Control: must-revalidate,no-cache,no-store\r\n"
-- "Content-Length: 83\r\n"
-- "Server: " SW_HTTP_SERVER_SOFTWARE "\r\n\r\n"
-- "<html><body><h2>HTTP 400 Bad Request</h2><hr><i>Powered by Swoole</i></body></html>";
-+ "Content-Length: 55\r\n\r\n"
-+ "<html><body><h2>HTTP 400 Bad Request</h2></body></html>";
-
- ctx->send(ctx, (char *) bad_request, strlen(bad_request));
- ctx->end_ = 1;
-diff --git a/include/swoole.h b/include/swoole.h
-index 832f66b9e..ae07c0b4c 100644
---- a/include/swoole.h
-+++ b/include/swoole.h
-@@ -646,6 +646,7 @@ struct Global {
- struct utsname uname;
- uint32_t max_sockets;
- uint32_t max_concurrency;
-+ bool enable_server_token;
- //-----------------------[Memory]--------------------------
- MemoryPool *memory_pool;
- Allocator std_allocator;
-diff --git a/src/core/base.cc b/src/core/base.cc
-index 4a241847b..11e170f2e 100644
---- a/src/core/base.cc
-+++ b/src/core/base.cc
-@@ -172,6 +172,7 @@ void swoole_init(void) {
- SwooleG.memory_pool = new swoole::GlobalMemory(SW_GLOBAL_MEMORY_PAGESIZE, true);
- SwooleG.max_sockets = SW_MAX_SOCKETS_DEFAULT;
- SwooleG.max_concurrency = 0;
-+ SwooleG.enable_server_token = false;
- struct rlimit rlmt;
- if (getrlimit(RLIMIT_NOFILE, &rlmt) < 0) {
- swoole_sys_warning("getrlimit() failed");
-diff --git a/thirdparty/php/curl/curl_private.h b/thirdparty/php/curl/curl_private.h
-index e64bbbb6e..4b8e2128a 100644
---- a/thirdparty/php/curl/curl_private.h
-+++ b/thirdparty/php/curl/curl_private.h
-@@ -68,12 +68,22 @@ typedef struct {
- int method;
- } php_curl_progress, php_curl_fnmatch, php_curlm_server_push;
-
-+typedef struct {
-+ zval func_name;
-+ zend_fcall_info_cache fci_cache;
-+} php_curl_callback;
-+
- typedef struct {
- php_curl_write *write;
- php_curl_write *write_header;
- php_curl_read *read;
- zval std_err;
- php_curl_progress *progress;
-+#if PHP_VERSION_ID >= 80200
-+#if LIBCURL_VERSION_NUM >= 0x072000
-+ php_curl_callback *xferinfo;
-+#endif
-+#endif
- #if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
- php_curl_fnmatch *fnmatch;
- #endif
-@@ -214,8 +224,13 @@ static inline php_curlsh *curl_share_from_obj(zend_object *obj) {
-
- #define Z_CURL_SHARE_P(zv) curl_share_from_obj(Z_OBJ_P(zv))
- void curl_multi_register_class(const zend_function_entry *method_entries);
-+
-+#if PHP_VERSION_ID < 80200
- int swoole_curl_cast_object(zend_object *obj, zval *result, int type);
- #else
-+zend_result swoole_curl_cast_object(zend_object *obj, zval *result, int type);
-+#endif
-+#else
- #define Z_CURL_P(zv) swoole_curl_get_handle(zv)
- #endif /* PHP8 end */
-
-diff --git a/thirdparty/php/curl/interface.cc b/thirdparty/php/curl/interface.cc
-index 43a289d00..3897b58fd 100644
---- a/thirdparty/php/curl/interface.cc
-+++ b/thirdparty/php/curl/interface.cc
-@@ -85,6 +85,9 @@ static zend_object_handlers swoole_native_curl_exception_handlers;
- #if PHP_VERSION_ID < 80000
- static int le_curl;
- static int le_curl_multi_handle;
-+static int le_curl_share_handle;
-+#define le_curl_share_handle_name "cURL Share Handle"
-+
-
- int swoole_curl_get_le_curl() {
- return le_curl;
-@@ -454,6 +457,14 @@ static HashTable *swoole_curl_get_gc(zend_object *object, zval **table, int *n)
- zend_get_gc_buffer_add_zval(gc_buffer, &curl_handlers(curl)->progress->func_name);
- }
-
-+#if PHP_VERSION_ID >= 80200
-+#if LIBCURL_VERSION_NUM >= 0x072000
-+ if (curl->handlers.xferinfo) {
-+ zend_get_gc_buffer_add_zval(gc_buffer, &curl_handlers(curl)->xferinfo->func_name);
-+ }
-+#endif
-+#endif
-+
- #if LIBCURL_VERSION_NUM >= 0x071500
- if (curl_handlers(curl)->fnmatch) {
- zend_get_gc_buffer_add_zval(gc_buffer, &curl_handlers(curl)->fnmatch->func_name);
-@@ -472,6 +483,7 @@ static HashTable *swoole_curl_get_gc(zend_object *object, zval **table, int *n)
- return zend_std_get_properties(object);
- }
-
-+#if PHP_VERSION_ID < 80200
- int swoole_curl_cast_object(zend_object *obj, zval *result, int type) {
- if (type == IS_LONG) {
- /* For better backward compatibility, make (int) $curl_handle return the object ID,
-@@ -482,6 +494,19 @@ int swoole_curl_cast_object(zend_object *obj, zval *result, int type) {
-
- return zend_std_cast_object_tostring(obj, result, type);
- }
-+#else
-+zend_result swoole_curl_cast_object(zend_object *obj, zval *result, int type) {
-+ if (type == IS_LONG) {
-+ /* For better backward compatibility, make (int) $curl_handle return the object ID,
-+ * similar to how it previously returned the resource ID. */
-+ ZVAL_LONG(result, obj->handle);
-+ return SUCCESS;
-+ }
-+
-+ return zend_std_cast_object_tostring(obj, result, type);
-+}
-+#endif
-+
- #endif
-
- void swoole_native_curl_mshutdown() {}
-@@ -928,6 +953,11 @@ php_curl *swoole_curl_alloc_handle()
- curl_handlers(ch)->write_header = (php_curl_write *) ecalloc(1, sizeof(php_curl_write));
- curl_handlers(ch)->read = (php_curl_read *) ecalloc(1, sizeof(php_curl_read));
- curl_handlers(ch)->progress = NULL;
-+#if PHP_VERSION_ID >= 80200
-+#if LIBCURL_VERSION_NUM >= 0x072000
-+ curl_handlers(ch)->xferinfo = NULL;
-+#endif
-+#endif
- #if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
- curl_handlers(ch)->fnmatch = NULL;
- #endif
-@@ -2147,6 +2177,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
- /* Curl off_t options */
- case CURLOPT_MAX_RECV_SPEED_LARGE:
- case CURLOPT_MAX_SEND_SPEED_LARGE:
-+ case CURLOPT_MAXFILESIZE_LARGE:
- #if LIBCURL_VERSION_NUM >= 0x073b00 /* Available since 7.59.0 */
- case CURLOPT_TIMEVALUE_LARGE:
- #endif
-@@ -2206,9 +2237,25 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
- }
- break;
-
-- case CURLOPT_SHARE: {
-- php_error_docref(NULL, E_WARNING, "CURLOPT_SHARE option is not supported");
-- } break;
-+ case CURLOPT_SHARE:
-+#if PHP_VERSION_ID >= 80000
-+ if (Z_TYPE_P(zvalue) == IS_OBJECT && Z_OBJCE_P(zvalue) == curl_share_ce) {
-+ php_curlsh *sh = Z_CURL_SHARE_P(zvalue);
-+ curl_easy_setopt(ch->cp, CURLOPT_SHARE, sh->share);
-+
-+ if (ch->share) {
-+ OBJ_RELEASE(&ch->share->std);
-+ }
-+ GC_ADDREF(&sh->std);
-+ ch->share = sh;
-+ }
-+#else
-+ php_curlsh *sh;
-+ if ((sh = (php_curlsh *) zend_fetch_resource_ex(zvalue, le_curl_share_handle_name, le_curl_share_handle))) {
-+ curl_easy_setopt(ch->cp, CURLOPT_SHARE, sh->share);
-+ }
-+#endif
-+ break;
-
- #if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
- case CURLOPT_FNMATCH_FUNCTION:
-@@ -2852,6 +2899,15 @@ static void _php_curl_free(php_curl *ch) {
- efree(curl_handlers(ch)->progress);
- }
-
-+#if PHP_VERSION_ID >= 80200
-+#if LIBCURL_VERSION_NUM >= 0x072000
-+ if (curl_handlers(ch)->xferinfo) {
-+ zval_ptr_dtor(&curl_handlers(ch)->xferinfo->func_name);
-+ efree(curl_handlers(ch)->xferinfo);
-+ }
-+#endif
-+#endif
-+
- #if LIBCURL_VERSION_NUM >= 0x071500
- if (curl_handlers(ch)->fnmatch) {
- zval_ptr_dtor(&curl_handlers(ch)->fnmatch->func_name);
-@@ -2957,6 +3013,15 @@ static void _php_curl_reset_handlers(php_curl *ch) {
- curl_handlers(ch)->progress = NULL;
- }
-
-+#if PHP_VERSION_ID >= 80200
-+#if LIBCURL_VERSION_NUM >= 0x072000
-+ if (curl_handlers(ch)->xferinfo) {
-+ zval_ptr_dtor(&curl_handlers(ch)->xferinfo->func_name);
-+ efree(curl_handlers(ch)->xferinfo);
-+ }
-+#endif
-+#endif
-+
- #if LIBCURL_VERSION_NUM >= 0x071500 /* Available since 7.21.0 */
- if (curl_handlers(ch)->fnmatch) {
- zval_ptr_dtor(&curl_handlers(ch)->fnmatch->func_name);