From 75f658bc8e26e2eab343fcfce36ac20c997c1a25 Mon Sep 17 00:00:00 2001 From: Alliballibaba Date: Mon, 1 Dec 2025 23:37:35 +0100 Subject: [PATCH] adds working implementation. --- caddy/workerconfig.go | 2 +- frankenphp.c | 19 +++++++++++++++ frankenphp.stub.php | 2 ++ frankenphp_arginfo.h | 7 ++++++ testdata/request-receiver.php | 7 ++++++ testdata/request-sender.php | 8 ++++++ threadworker.go | 6 +++++ worker.go | 46 +++++++++++++++++++++++++++++++++++ 8 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 testdata/request-receiver.php create mode 100644 testdata/request-sender.php diff --git a/caddy/workerconfig.go b/caddy/workerconfig.go index 116a64b2..0a35145d 100644 --- a/caddy/workerconfig.go +++ b/caddy/workerconfig.go @@ -147,7 +147,7 @@ func parseWorkerConfig(d *caddyfile.Dispenser) (workerConfig, error) { wc.MaxConsecutiveFailures = v default: - return wc, wrongSubDirectiveError("worker", "name, file, num, env, watch, match, max_consecutive_failures, max_threads", v) + return wc, wrongSubDirectiveError("worker", "name, file, num, env, watch, match, max_consecutive_failures, max_threads, http_disabled", v) } } diff --git a/frankenphp.c b/frankenphp.c index cec54824..cdbd0f3b 100644 --- a/frankenphp.c +++ b/frankenphp.c @@ -494,6 +494,25 @@ PHP_FUNCTION(frankenphp_handle_request) { RETURN_TRUE; } +PHP_FUNCTION(frankenphp_send_request) { + zval *zv; + char *worker_name = NULL; + size_t worker_name_len = 0; + + ZEND_PARSE_PARAMETERS_START(1, 2); + Z_PARAM_ZVAL(zv); + Z_PARAM_OPTIONAL + Z_PARAM_STRING(worker_name, worker_name_len); + ZEND_PARSE_PARAMETERS_END(); + + char *error = go_frankenphp_send_request(thread_index, zv, worker_name, + worker_name_len); + if (error) { + zend_throw_exception(spl_ce_RuntimeException, error, 0); + RETURN_THROWS(); + } +} + PHP_FUNCTION(headers_send) { zend_long response_code = 200; diff --git a/frankenphp.stub.php b/frankenphp.stub.php index 60ac5d58..c790c30a 100644 --- a/frankenphp.stub.php +++ b/frankenphp.stub.php @@ -4,6 +4,8 @@ function frankenphp_handle_request(callable $callback): bool {} +function frankenphp_send_request(mixed $message, string $workerName = ""): bool {} + function headers_send(int $status = 200): int {} function frankenphp_finish_request(): bool {} diff --git a/frankenphp_arginfo.h b/frankenphp_arginfo.h index 558c6e3c..22a7d978 100644 --- a/frankenphp_arginfo.h +++ b/frankenphp_arginfo.h @@ -5,6 +5,11 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_frankenphp_handle_request, 0, 1, ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_frankenphp_send_request, 0, 1, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, message, IS_MIXED, 0) + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, worker_name, IS_STRING, 0, "\"\"") +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_headers_send, 0, 0, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, status, IS_LONG, 0, "200") ZEND_END_ARG_INFO() @@ -37,6 +42,7 @@ ZEND_END_ARG_INFO() ZEND_FUNCTION(frankenphp_handle_request); +ZEND_FUNCTION(frankenphp_send_request); ZEND_FUNCTION(headers_send); ZEND_FUNCTION(frankenphp_finish_request); ZEND_FUNCTION(frankenphp_request_headers); @@ -46,6 +52,7 @@ ZEND_FUNCTION(mercure_publish); static const zend_function_entry ext_functions[] = { ZEND_FE(frankenphp_handle_request, arginfo_frankenphp_handle_request) + ZEND_FE(frankenphp_send_request, arginfo_frankenphp_send_request) ZEND_FE(headers_send, arginfo_headers_send) ZEND_FE(frankenphp_finish_request, arginfo_frankenphp_finish_request) ZEND_FALIAS(fastcgi_finish_request, frankenphp_finish_request, arginfo_fastcgi_finish_request) diff --git a/testdata/request-receiver.php b/testdata/request-receiver.php new file mode 100644 index 00000000..cca381da --- /dev/null +++ b/testdata/request-receiver.php @@ -0,0 +1,7 @@ +