Skip to content

Commit e233173

Browse files
authored
fix(ext/websocket): Fix close code without reason (#27578)
Fixes #27566 The close code wasn't sent if reason was None, defaulting to 1005. This patch allows sending close code without reason.
1 parent 1661ddd commit e233173

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

ext/websocket/lib.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -758,9 +758,14 @@ pub async fn op_ws_close(
758758
return Ok(());
759759
};
760760

761+
const EMPTY_PAYLOAD: &[u8] = &[];
762+
761763
let frame = reason
762764
.map(|reason| Frame::close(code.unwrap_or(1005), reason.as_bytes()))
763-
.unwrap_or_else(|| Frame::close_raw(vec![].into()));
765+
.unwrap_or_else(|| match code {
766+
Some(code) => Frame::close(code, EMPTY_PAYLOAD),
767+
_ => Frame::close_raw(EMPTY_PAYLOAD.into()),
768+
});
764769

765770
resource.closed.set(true);
766771
let lock = resource.reserve_lock();

tests/integration/run_tests.rs

-1
Original file line numberDiff line numberDiff line change
@@ -2663,7 +2663,6 @@ async fn websocket_server_multi_field_connection_header() {
26632663

26642664
let message = socket.read_frame().await.unwrap();
26652665
assert_eq!(message.opcode, fastwebsockets::OpCode::Close);
2666-
assert!(message.payload.is_empty());
26672666
socket
26682667
.write_frame(fastwebsockets::Frame::close_raw(vec![].into()))
26692668
.await

tests/unit/websocket_test.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ Deno.test({
262262
socket.onopen = () => socket.send("Hello");
263263
socket.onmessage = () => {
264264
socket.send("Bye");
265-
socket.close();
265+
socket.close(1000);
266266
};
267267
socket.onclose = () => ac.abort();
268268
socket.onerror = () => fail();
@@ -288,7 +288,8 @@ Deno.test({
288288
seenBye = true;
289289
}
290290
};
291-
ws.onclose = () => {
291+
ws.onclose = (e) => {
292+
assertEquals(e.code, 1000);
292293
deferred.resolve();
293294
};
294295
await Promise.all([deferred.promise, server.finished]);

0 commit comments

Comments
 (0)