mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 11:32:13 +00:00
Merge pull request #97913 from Faless/fix/websocket_closing_transition
[WS] Detect disconnection due to protocol errors
This commit is contained in:
commit
caff0ff591
@ -716,12 +716,37 @@ void WSLPeer::poll() {
|
||||
close(-1);
|
||||
return;
|
||||
}
|
||||
if (wslay_event_get_close_sent(wsl_ctx) && wslay_event_get_close_received(wsl_ctx)) {
|
||||
// Clean close.
|
||||
wslay_event_context_free(wsl_ctx);
|
||||
wsl_ctx = nullptr;
|
||||
close(-1);
|
||||
return;
|
||||
if (wslay_event_get_close_sent(wsl_ctx)) {
|
||||
if (wslay_event_get_close_received(wsl_ctx)) {
|
||||
// Clean close.
|
||||
wslay_event_context_free(wsl_ctx);
|
||||
wsl_ctx = nullptr;
|
||||
close(-1);
|
||||
return;
|
||||
} else if (!wslay_event_get_read_enabled(wsl_ctx)) {
|
||||
// Some protocol error caused wslay to stop processing incoming events, we'll never receive a close from the other peer.
|
||||
close_code = wslay_event_get_status_code_sent(wsl_ctx);
|
||||
switch (close_code) {
|
||||
case WSLAY_CODE_MESSAGE_TOO_BIG:
|
||||
close_reason = "Message too big";
|
||||
break;
|
||||
case WSLAY_CODE_PROTOCOL_ERROR:
|
||||
close_reason = "Protocol error";
|
||||
break;
|
||||
case WSLAY_CODE_ABNORMAL_CLOSURE:
|
||||
close_reason = "Abnormal closure";
|
||||
break;
|
||||
case WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA:
|
||||
close_reason = "Invalid frame payload data";
|
||||
break;
|
||||
default:
|
||||
close_reason = "Unknown";
|
||||
}
|
||||
wslay_event_context_free(wsl_ctx);
|
||||
wsl_ctx = nullptr;
|
||||
close(-1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user