Skip to content

Commit 9f5860f

Browse files
committed
Optimize websocket status detection, and still use onMessage callback to process events after handshake failure or closing. Fix GH-5845
1 parent 85cd36c commit 9f5860f

File tree

4 files changed

+4
-2
lines changed

4 files changed

+4
-2
lines changed

ext-src/swoole_http_response.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ void HttpContext::end(zval *zdata, zval *return_value) {
865865
conn->websocket_status = websocket::STATUS_ACTIVE;
866866
} else {
867867
/* connection should be closed when handshake failed */
868-
conn->websocket_status = websocket::STATUS_NONE;
868+
conn->websocket_status = websocket::STATUS_HANDSHAKE_FAILED;
869869
keepalive = 0;
870870
}
871871
}

ext-src/swoole_http_server.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ int php_swoole_http_server_onReceive(Server *serv, RecvData *req) {
6969
return php_swoole_server_onReceive(serv, req);
7070
}
7171
// websocket client
72-
if (conn->websocket_status == WebSocket::STATUS_ACTIVE) {
72+
if (conn->websocket_status >= WebSocket::STATUS_HANDSHAKE) {
7373
return swoole_websocket_onMessage(serv, req);
7474
}
7575

ext-src/swoole_websocket_server.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,7 @@ void php_swoole_websocket_server_minit(int module_number) {
650650
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_STATUS_FRAME", WebSocket::STATUS_ACTIVE);
651651
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_STATUS_ACTIVE", WebSocket::STATUS_ACTIVE);
652652
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_STATUS_CLOSING", WebSocket::STATUS_CLOSING);
653+
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_STATUS_HANDSHAKE_FAILED", WebSocket::STATUS_HANDSHAKE_FAILED);
653654
// all opcodes
654655
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_OPCODE_CONTINUATION", WebSocket::OPCODE_CONTINUATION);
655656
SW_REGISTER_LONG_CONSTANT("WEBSOCKET_OPCODE_TEXT", WebSocket::OPCODE_TEXT);

include/swoole_websocket.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ enum Status {
4040
STATUS_HANDSHAKE = 2,
4141
STATUS_ACTIVE = 3,
4242
STATUS_CLOSING = 4,
43+
STATUS_HANDSHAKE_FAILED = 5,
4344
};
4445

4546
enum Flag {

0 commit comments

Comments
 (0)