Echo the `CloseFrame` when close is initiated

This commit is contained in:
Daniel Abramov 2021-10-19 22:40:21 +02:00
parent 89697449ff
commit 5ad8cef6ff
1 changed files with 10 additions and 13 deletions

View File

@ -555,23 +555,20 @@ impl WebSocketContext {
debug!("Received close frame: {:?}", close);
match self.state {
WebSocketState::Active => {
let close_code = close.as_ref().map(|f| f.code);
self.state = WebSocketState::ClosedByPeer;
let reply = if let Some(code) = close_code {
if code.is_allowed() {
Frame::close(Some(CloseFrame {
code: CloseCode::Normal,
reason: "".into(),
}))
} else {
Frame::close(Some(CloseFrame {
let close = close.map(|frame| {
if !frame.code.is_allowed() {
CloseFrame {
code: CloseCode::Protocol,
reason: "Protocol violation".into(),
}))
}
} else {
frame
}
} else {
Frame::close(None)
};
});
let reply = Frame::close(close.clone());
debug!("Replying to close with {:?}", reply);
self.send_queue.push_back(reply);