Skip to content

Commit a630b5b

Browse files
committed
fix Response::create() bugs
1 parent e8713c2 commit a630b5b

File tree

2 files changed

+70
-1
lines changed

2 files changed

+70
-1
lines changed

ext-src/swoole_http_response.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1369,7 +1369,6 @@ static PHP_METHOD(swoole_http_response, create) {
13691369

13701370
if (!ctx) {
13711371
ctx = new http_context();
1372-
ctx->fd = fd;
13731372
ctx->keepalive = 1;
13741373

13751374
if (serv) {
@@ -1399,12 +1398,16 @@ static PHP_METHOD(swoole_http_response, create) {
13991398

14001399
object_init_ex(return_value, swoole_http_response_ce);
14011400
php_swoole_http_response_set_context(return_value, ctx);
1401+
ctx->fd = fd;
14021402
ctx->response.zobject = return_value;
14031403
sw_copy_to_stack(ctx->response.zobject, ctx->response._zobject);
14041404
zend_update_property_long(swoole_http_response_ce, SW_Z8_OBJ_P(return_value), ZEND_STRL("fd"), fd);
14051405
if (ctx->co_socket) {
14061406
zend_update_property(swoole_http_response_ce, SW_Z8_OBJ_P(ctx->response.zobject), ZEND_STRL("socket"), zobject);
14071407
}
1408+
if (zrequest) {
1409+
zend_update_property_long(swoole_http_request_ce, SW_Z8_OBJ_P(ctx->request.zobject), ZEND_STRL("fd"), fd);
1410+
}
14081411
}
14091412

14101413
static PHP_METHOD(swoole_http_response, redirect) {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
--TEST--
2+
swoole_server: http request & response
3+
--SKIPIF--
4+
<?php
5+
require __DIR__ . '/../include/skipif.inc';
6+
?>
7+
--FILE--
8+
<?php
9+
require __DIR__ . '/../include/bootstrap.php';
10+
11+
use Swoole\Server;
12+
use Swoole\Constant;
13+
use Swoole\Http\Request;
14+
use Swoole\Http\Response;
15+
use Swoole\Coroutine\Http\Client;
16+
use function Swoole\Coroutine\run;
17+
18+
define('GREETER', 'hello world');
19+
20+
$pm = new SwooleTest\ProcessManager;
21+
22+
$pm->parentFunc = function ($pid) use ($pm) {
23+
run(function () use ($pm) {
24+
$httpClient = new Client(HTTP_SERVER_HOST, $pm->getFreePort(), false);
25+
$httpClient->setMethod("POST");
26+
$httpClient->setData("HELLO");
27+
$ok = $httpClient->execute("/rawcookie?hello=world&value=1");
28+
Assert::assert($ok);
29+
Assert::same($httpClient->statusCode, 200);
30+
Assert::same($httpClient->errCode, 0);
31+
Assert::eq($httpClient->getHeaders()['x-server'], 'swoole');
32+
Assert::same($httpClient->getBody(), GREETER);
33+
echo "DONE\n";
34+
});
35+
$pm->kill();
36+
};
37+
38+
$pm->childFunc = function () use ($pm) {
39+
$serv = new Server('127.0.0.1', $pm->getFreePort(), SERVER_MODE_RANDOM);
40+
$serv->set([
41+
'worker_num' => 1,
42+
'log_file' => '/dev/null',
43+
]);
44+
$serv->on("Start", function ($serv) use ($pm) {
45+
$pm->wakeup();
46+
});
47+
$serv->on('receive', function (Server $serv, $fd, $reactor_id, $data) {
48+
$req = Request::create();
49+
Assert::eq($req->parse($data), strlen($data));
50+
51+
$resp = Response::create([$serv, $req], $fd);
52+
$resp->header('X-Server', 'swoole');
53+
$resp->end(GREETER);
54+
Assert::eq($resp->fd, $fd);
55+
Assert::eq($req->fd, $fd);
56+
});
57+
$serv->on(Constant::EVENT_CLOSE, function (Server $serv, $fd, $reactor_id) {
58+
});
59+
$serv->start();
60+
};
61+
62+
$pm->childFirst();
63+
$pm->run();
64+
?>
65+
--EXPECT--
66+
DONE

0 commit comments

Comments
 (0)