From a74d68435249591b073cc864bb98bd276dfd828a Mon Sep 17 00:00:00 2001 From: cham-s Date: Fri, 2 Feb 2024 21:17:45 +0100 Subject: [PATCH 1/8] Update SSLTestHelpers, remove deprecation warnings in tests --- Tests/WebSocketKitTests/SSLTestHelpers.swift | 4 ++-- Tests/WebSocketKitTests/WebSocketKitTests.swift | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Tests/WebSocketKitTests/SSLTestHelpers.swift b/Tests/WebSocketKitTests/SSLTestHelpers.swift index a6776aab..de1911a3 100644 --- a/Tests/WebSocketKitTests/SSLTestHelpers.swift +++ b/Tests/WebSocketKitTests/SSLTestHelpers.swift @@ -76,7 +76,7 @@ func generateRSAPrivateKey() -> OpaquePointer { precondition(generateRC == 1) let pkey = CNIOBoringSSL_EVP_PKEY_new()! - let assignRC = CNIOBoringSSL_EVP_PKEY_assign(pkey, EVP_PKEY_RSA, rsa) + let assignRC = CNIOBoringSSL_EVP_PKEY_assign_RSA(pkey, rsa) precondition(assignRC == 1) return pkey @@ -125,7 +125,7 @@ func generateSelfSignedCert(keygenFunction: () -> OpaquePointer = generateRSAPri NID_commonName, MBSTRING_UTF8, UnsafeMutablePointer(mutating: pointer), - CInt(commonName.lengthOfBytes(using: .utf8)), + ossl_ssize_t(commonName.lengthOfBytes(using: .utf8)), -1, 0) } diff --git a/Tests/WebSocketKitTests/WebSocketKitTests.swift b/Tests/WebSocketKitTests/WebSocketKitTests.swift index 9fa402ba..c2e26330 100644 --- a/Tests/WebSocketKitTests/WebSocketKitTests.swift +++ b/Tests/WebSocketKitTests/WebSocketKitTests.swift @@ -516,8 +516,8 @@ final class WebSocketKitTests: XCTestCase { return XCTFail("couldn't get port from \(String(reflecting: server.localAddress))") } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in - ws.onPong { - $0.close(promise: closePromise) + ws.onPong { webSocket, _ in + webSocket.close(promise: closePromise) promise.succeed() } ws.sendPing() @@ -536,8 +536,8 @@ final class WebSocketKitTests: XCTestCase { } WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { ws in ws.pingInterval = .milliseconds(100) - ws.onPong { - $0.close(promise: closePromise) + ws.onPong { webSocket, _ in + webSocket.close(promise: closePromise) promise.succeed() } }.cascadeFailure(to: closePromise) From 24ea66e8f1443289a56ad9ac2d6dea2509f0fbca Mon Sep 17 00:00:00 2001 From: cham-s Date: Mon, 15 Apr 2024 18:43:01 +0200 Subject: [PATCH 2/8] Update guard for WebSocket scheme --- Sources/WebSocketKit/WebSocket+Connect.swift | 5 ++++- Tests/WebSocketKitTests/AsyncWebSocketKitTests.swift | 8 ++++---- Tests/WebSocketKitTests/WebSocketKitTests.swift | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index a46dd397..575233d7 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -20,7 +20,10 @@ extension WebSocket { on eventLoopGroup: EventLoopGroup, onUpgrade: @Sendable @escaping (WebSocket) -> () ) -> EventLoopFuture { - guard let url = URL(string: url) else { + guard + url.hasPrefix("ws://") || url.hasPrefix("wss://"), + let url = URL(string: url) + else { return eventLoopGroup.any().makeFailedFuture(WebSocketClient.Error.invalidURL) } return self.connect( diff --git a/Tests/WebSocketKitTests/AsyncWebSocketKitTests.swift b/Tests/WebSocketKitTests/AsyncWebSocketKitTests.swift index e662b2c6..ec486789 100644 --- a/Tests/WebSocketKitTests/AsyncWebSocketKitTests.swift +++ b/Tests/WebSocketKitTests/AsyncWebSocketKitTests.swift @@ -91,9 +91,9 @@ final class AsyncWebSocketKitTests: XCTestCase { return XCTFail("couldn't get port from \(String(reflecting: server.localAddress))") } try await WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { (ws) async in - ws.onPong { + ws.onPong { webSocket, _ in do { - try await $0.close() + try await webSocket.close() } catch { XCTFail("Failed to close websocket: \(String(reflecting: error))") } @@ -118,8 +118,8 @@ final class AsyncWebSocketKitTests: XCTestCase { } try await WebSocket.connect(to: "ws://localhost:\(port)", on: self.elg) { (ws) async in ws.pingInterval = .milliseconds(100) - ws.onPong { - do { try await $0.close() } catch { XCTFail("Failed to close websocket: \(String(reflecting: error))") } + ws.onPong { webSocket, _ in + do { try await webSocket.close() } catch { XCTFail("Failed to close websocket: \(String(reflecting: error))") } promise.succeed(()) } } diff --git a/Tests/WebSocketKitTests/WebSocketKitTests.swift b/Tests/WebSocketKitTests/WebSocketKitTests.swift index c2e26330..305602e6 100644 --- a/Tests/WebSocketKitTests/WebSocketKitTests.swift +++ b/Tests/WebSocketKitTests/WebSocketKitTests.swift @@ -478,7 +478,7 @@ final class WebSocketKitTests: XCTestCase { try server.close(mode: .all).wait() } - func testBadURLInWebsocketConnect() async throws { + func testBadURLInWebsocketConnect() throws { XCTAssertThrowsError(try WebSocket.connect(to: "%w", on: self.elg, onUpgrade: { _ in }).wait()) { guard case .invalidURL = $0 as? WebSocketClient.Error else { return XCTFail("Expected .invalidURL but got \(String(reflecting: $0))") From 1af749d8d79c92f65afbdfb415593b332bda74e5 Mon Sep 17 00:00:00 2001 From: cham-s Date: Mon, 22 Apr 2024 15:38:05 +0200 Subject: [PATCH 3/8] Add availability conditional for URL init --- Sources/WebSocketKit/WebSocket+Connect.swift | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index 575233d7..67bb8780 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -20,12 +20,16 @@ extension WebSocket { on eventLoopGroup: EventLoopGroup, onUpgrade: @Sendable @escaping (WebSocket) -> () ) -> EventLoopFuture { - guard - url.hasPrefix("ws://") || url.hasPrefix("wss://"), - let url = URL(string: url) - else { + let optionalURL: URL? + if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, visionOS 1.0, *) { + optionalURL = URL(string: url, encodingInvalidCharacters: false) + } else { + optionalURL = URL(string: url) + } + guard let url = optionalURL else { return eventLoopGroup.any().makeFailedFuture(WebSocketClient.Error.invalidURL) } + return self.connect( to: url, headers: headers, From 4b7308854dbc9bb13774973c8ad7c45120538bdc Mon Sep 17 00:00:00 2001 From: cham-s Date: Tue, 23 Apr 2024 15:30:05 +0200 Subject: [PATCH 4/8] Remove visionOS availability check --- Sources/WebSocketKit/WebSocket+Connect.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index 67bb8780..b5207ee0 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -21,7 +21,7 @@ extension WebSocket { onUpgrade: @Sendable @escaping (WebSocket) -> () ) -> EventLoopFuture { let optionalURL: URL? - if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, visionOS 1.0, *) { + if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) { optionalURL = URL(string: url, encodingInvalidCharacters: false) } else { optionalURL = URL(string: url) From 1c3de79b9b92434df64bd4b801c326f2cf539707 Mon Sep 17 00:00:00 2001 From: cham-s Date: Tue, 23 Apr 2024 19:40:50 +0200 Subject: [PATCH 5/8] Add conditional compilation directive --- Sources/WebSocketKit/WebSocket+Connect.swift | 23 +++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index b5207ee0..4259659c 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -20,6 +20,7 @@ extension WebSocket { on eventLoopGroup: EventLoopGroup, onUpgrade: @Sendable @escaping (WebSocket) -> () ) -> EventLoopFuture { + #if canImport(Foundation) let optionalURL: URL? if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) { optionalURL = URL(string: url, encodingInvalidCharacters: false) @@ -37,8 +38,20 @@ extension WebSocket { on: eventLoopGroup, onUpgrade: onUpgrade ) + #else + guard let url = URL(string: url) else { + return eventLoopGroup.any().makeFailedFuture(WebSocketClient.Error.invalidURL) + } + return self.connect( + to: url, + headers: headers, + configuration: configuration, + on: eventLoopGroup, + onUpgrade: onUpgrade + ) + #endif } - + /// Establish a WebSocket connection. /// /// - Parameters: @@ -69,7 +82,7 @@ extension WebSocket { onUpgrade: onUpgrade ) } - + /// Establish a WebSocket connection. /// /// - Parameters: @@ -108,7 +121,7 @@ extension WebSocket { onUpgrade: onUpgrade ) } - + /// Establish a WebSocket connection via a proxy server. /// /// - Parameters: @@ -159,8 +172,8 @@ extension WebSocket { onUpgrade: onUpgrade ) } - - + + /// Description /// - Parameters: /// - url: URL for the origin server. From 3c8b2133b3ac5a36a7321ec6351a64f5454a3771 Mon Sep 17 00:00:00 2001 From: cham-s Date: Tue, 23 Apr 2024 19:56:29 +0200 Subject: [PATCH 6/8] Add platform specific conditional --- Sources/WebSocketKit/WebSocket+Connect.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index 4259659c..83a03dc3 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -20,9 +20,9 @@ extension WebSocket { on eventLoopGroup: EventLoopGroup, onUpgrade: @Sendable @escaping (WebSocket) -> () ) -> EventLoopFuture { - #if canImport(Foundation) + #if os(iOS) || os(tvOS) || os(watchOS) || os(macOS) let optionalURL: URL? - if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) { + if #available(iOS 17.0, macOS 14.4, tvOS 17.0, watchOS 10.0, *) { optionalURL = URL(string: url, encodingInvalidCharacters: false) } else { optionalURL = URL(string: url) From a1f72427c7b5a1141abd238e413a9e84ea15d258 Mon Sep 17 00:00:00 2001 From: cham-s Date: Tue, 23 Apr 2024 20:19:58 +0200 Subject: [PATCH 7/8] Lower minimum macOS version to 14.3 --- Sources/WebSocketKit/WebSocket+Connect.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index 83a03dc3..ec7bc9fa 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -22,7 +22,7 @@ extension WebSocket { ) -> EventLoopFuture { #if os(iOS) || os(tvOS) || os(watchOS) || os(macOS) let optionalURL: URL? - if #available(iOS 17.0, macOS 14.4, tvOS 17.0, watchOS 10.0, *) { + if #available(iOS 17.0, macOS 14.3, tvOS 17.0, watchOS 10.0, *) { optionalURL = URL(string: url, encodingInvalidCharacters: false) } else { optionalURL = URL(string: url) From d145fc21cdbb56f935bc1dc7f7c5b431aafe570e Mon Sep 17 00:00:00 2001 From: Tim Condon <0xTim@users.noreply.github.com> Date: Wed, 24 Apr 2024 02:13:39 +0100 Subject: [PATCH 8/8] Update Sources/WebSocketKit/WebSocket+Connect.swift --- Sources/WebSocketKit/WebSocket+Connect.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WebSocketKit/WebSocket+Connect.swift b/Sources/WebSocketKit/WebSocket+Connect.swift index ec7bc9fa..5d6c2ade 100644 --- a/Sources/WebSocketKit/WebSocket+Connect.swift +++ b/Sources/WebSocketKit/WebSocket+Connect.swift @@ -22,7 +22,7 @@ extension WebSocket { ) -> EventLoopFuture { #if os(iOS) || os(tvOS) || os(watchOS) || os(macOS) let optionalURL: URL? - if #available(iOS 17.0, macOS 14.3, tvOS 17.0, watchOS 10.0, *) { + if #available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) { optionalURL = URL(string: url, encodingInvalidCharacters: false) } else { optionalURL = URL(string: url)