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);
|
close(-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (wslay_event_get_close_sent(wsl_ctx) && wslay_event_get_close_received(wsl_ctx)) {
|
if (wslay_event_get_close_sent(wsl_ctx)) {
|
||||||
|
if (wslay_event_get_close_received(wsl_ctx)) {
|
||||||
// Clean close.
|
// Clean close.
|
||||||
wslay_event_context_free(wsl_ctx);
|
wslay_event_context_free(wsl_ctx);
|
||||||
wsl_ctx = nullptr;
|
wsl_ctx = nullptr;
|
||||||
close(-1);
|
close(-1);
|
||||||
return;
|
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…
x
Reference in New Issue
Block a user