Skip to content

Commit e004af7

Browse files
committed
Custom code on WebSocket close
1 parent 0285d3e commit e004af7

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

FlyingFox/Sources/WebSocket/WSFrame.swift

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,24 @@ public struct WSFrame: Sendable, Hashable {
9191
}
9292

9393
public extension WSFrame {
94-
static func close(message: String? = nil, mask: Mask? = nil) -> Self {
95-
var payload = message == nil ? Data([0x03, 0xE8]) : Data([0x03, 0xEA])
96-
if let data = message?.data(using: .utf8) {
94+
static func close(message: String = "", mask: Mask? = nil) -> Self {
95+
close(
96+
code: message.isEmpty ? 1000 : 1002,
97+
message: message,
98+
mask: mask
99+
)
100+
}
101+
102+
static func close(code: UInt16, message: String, mask: Mask? = nil) -> Self {
103+
var payload = Data([UInt8(code >> 8), UInt8(code & 0xFF)])
104+
if let data = message.data(using: .utf8) {
97105
payload.append(contentsOf: data)
98106
}
99107
return WSFrame(
100108
fin: true,
101109
opcode: .close,
102110
mask: mask,
103-
payload: Data(payload)
111+
payload: payload
104112
)
105113
}
106114
}

FlyingFox/Tests/WebSocket/WSFrameTests.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ struct WSFrameTests {
6161
payload: Data([0x03, 0xEA, .ascii("E"), .ascii("r"), .ascii("r")])
6262
)
6363
)
64-
6564
#expect(
6665
WSFrame.close(message: "Err", mask: .mock) == .make(
6766
fin: true,
@@ -70,6 +69,22 @@ struct WSFrameTests {
7069
payload: Data([0x03, 0xEA, .ascii("E"), .ascii("r"), .ascii("r")])
7170
)
7271
)
72+
#expect(
73+
WSFrame.close(code: 4999, message: "Err") == .make(
74+
fin: true,
75+
opcode: .close,
76+
mask: nil,
77+
payload: Data([0x13, 0x87, .ascii("E"), .ascii("r"), .ascii("r")])
78+
)
79+
)
80+
#expect(
81+
WSFrame.close(code: 4999, message: "Err", mask: .mock) == .make(
82+
fin: true,
83+
opcode: .close,
84+
mask: .mock,
85+
payload: Data([0x13, 0x87, .ascii("E"), .ascii("r"), .ascii("r")])
86+
)
87+
)
7388
}
7489
}
7590

FlyingFox/XCTests/WebSocket/WSFrameTests.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,31 @@ final class WSFrameTests: XCTestCase {
5757
mask: nil,
5858
payload: Data([0x03, 0xEA, .ascii("E"), .ascii("r"), .ascii("r")]))
5959
)
60-
6160
XCTAssertEqual(
6261
WSFrame.close(message: "Err", mask: .mock),
6362
.make(fin: true,
6463
opcode: .close,
6564
mask: .mock,
6665
payload: Data([0x03, 0xEA, .ascii("E"), .ascii("r"), .ascii("r")]))
6766
)
67+
XCTAssertEqual(
68+
WSFrame.close(code: 4999, message: "Err"),
69+
.make(
70+
fin: true,
71+
opcode: .close,
72+
mask: nil,
73+
payload: Data([0x13, 0x87, .ascii("E"), .ascii("r"), .ascii("r")])
74+
)
75+
)
76+
XCTAssertEqual(
77+
WSFrame.close(code: 4999, message: "Err", mask: .mock),
78+
.make(
79+
fin: true,
80+
opcode: .close,
81+
mask: .mock,
82+
payload: Data([0x13, 0x87, .ascii("E"), .ascii("r"), .ascii("r")])
83+
)
84+
)
6885
}
6986
}
7087

0 commit comments

Comments
 (0)