Skip to content

Commit f05cfa2

Browse files
committed
Merge branch '6.1'
2 parents ca67a05 + f9f62da commit f05cfa2

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

‎ext-src/swoole_http_client_coro.cc‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ class Client {
221221
if (buffer == nullptr) {
222222
RETURN_FALSE;
223223
}
224+
buffer->clear();
225+
224226
off_t offset = swoole_strnpos(buffer->str, buffer->length, ZEND_STRL("\r\n\r\n"));
225227
if (offset <= 0) {
226228
RETURN_FALSE;
@@ -1569,7 +1571,7 @@ bool Client::push(zval *zdata, zend_long opcode, uint8_t flags, zend_long code)
15691571
}
15701572

15711573
String *buffer = socket->get_write_buffer();
1572-
1574+
buffer->clear();
15731575
FrameObject frame(zdata, opcode, flags, code);
15741576

15751577
if (websocket_settings.mask) {

‎ext-src/swoole_http_response.cc‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,6 +1100,7 @@ static PHP_METHOD(swoole_http_response, disconnect) {
11001100
ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
11011101

11021102
String *http_buffer = ctx->get_write_buffer();
1103+
http_buffer->clear();
11031104

11041105
zval zdata = {};
11051106
ZVAL_STR(&zdata, reason);
@@ -1255,6 +1256,7 @@ static PHP_METHOD(swoole_http_response, push) {
12551256
}
12561257

12571258
String *http_buffer = ctx->get_write_buffer();
1259+
http_buffer->clear();
12581260

12591261
FrameObject frame(zdata, opcode, flags);
12601262
sw_unset_bit(frame.flags, WebSocket::FLAG_MASK);
@@ -1292,6 +1294,7 @@ ssize_t WebSocket::send_frame(const swoole::WebSocketSettings &settings,
12921294
sw_set_bit(flags, WebSocket::FLAG_MASK);
12931295
}
12941296
auto wbuf = sock->get_write_buffer();
1297+
wbuf->clear();
12951298
WebSocket::encode(wbuf, payload, payload_length, opcode, flags);
12961299
return sock->send(wbuf->str, wbuf->length);
12971300
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
--TEST--
2+
swoole_http_server_coro: websocket buffer clear
3+
--SKIPIF--
4+
<?php require __DIR__ . '/../include/skipif.inc'; ?>
5+
--FILE--
6+
<?php
7+
require __DIR__ . '/../include/bootstrap.php';
8+
9+
use Swoole\Event;
10+
use Swoole\Http\Request;
11+
use Swoole\Http\Response;
12+
use Swoole\Coroutine\Http\Client;
13+
use Swoole\Coroutine\Http\Server;
14+
15+
$pm = new ProcessManager;
16+
$pm->parentFunc = function () use ($pm) {
17+
go(function() use ($pm) {
18+
$client = new Client('127.0.0.1', $pm->getFreePort());
19+
$ret = $client->upgrade('/');
20+
$client->set(['open_websocket_pong_frame' => true]);
21+
$client->push('hello world');
22+
$client->push('ping', SWOOLE_WEBSOCKET_OPCODE_PING);
23+
$frame1 = $client->recv();
24+
$frame2 = $client->recv();
25+
Assert::eq($frame1->data, 'received: hello world');
26+
Assert::eq($frame1->opcode, SWOOLE_WEBSOCKET_OPCODE_TEXT);
27+
Assert::eq($frame2->data, 'ping');
28+
Assert::eq($frame2->opcode, SWOOLE_WEBSOCKET_OPCODE_PONG);
29+
});
30+
31+
Event::wait();
32+
$pm->kill();
33+
};
34+
35+
$pm->childFunc = function () use ($pm) {
36+
go(function () use ($pm) {
37+
$server = new Server('127.0.0.1', $pm->getFreePort(), false);
38+
$server->handle('/', function (Request $request, Response $response) {
39+
$response->upgrade();
40+
while ($frame = $response->recv()) {
41+
$response->push('received: ' . $frame->data);
42+
}
43+
});
44+
$pm->wakeup();
45+
$server->start();
46+
});
47+
Event::wait();
48+
};
49+
$pm->childFirst();
50+
$pm->run();
51+
?>
52+
--EXPECT--

0 commit comments

Comments
 (0)