From b48f1e9af54f1d926002174766b6fd9c83c9f561 Mon Sep 17 00:00:00 2001 From: Peter Dupris Date: Wed, 27 Jun 2018 19:35:52 -0700 Subject: [PATCH 1/4] expose Starscream WebSocket enableSOCKSProxy option to socket.io-client-swift options --- Source/SocketIO/Client/SocketIOClientOption.swift | 7 +++++++ Source/SocketIO/Engine/SocketEngine.swift | 9 ++++++++- Source/SocketIO/Util/SocketExtensions.swift | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Source/SocketIO/Client/SocketIOClientOption.swift b/Source/SocketIO/Client/SocketIOClientOption.swift index 02d8898..eed91b3 100644 --- a/Source/SocketIO/Client/SocketIOClientOption.swift +++ b/Source/SocketIO/Client/SocketIOClientOption.swift @@ -52,6 +52,9 @@ public enum SocketIOClientOption : ClientOption { /// If passed `true`, the only transport that will be used will be WebSockets. case forceWebsockets(Bool) + + /// If passed `true`, the WebSocket stream will be configured with the enableSOCKSProxy `true`. + case enableSOCKSProxy(Bool) /// The queue that all interaction with the client should occur on. This is the queue that event handlers are /// called on. @@ -133,6 +136,8 @@ public enum SocketIOClientOption : ClientOption { description = "security" case .sessionDelegate: description = "sessionDelegate" + case .enableSOCKSProxy: + description = "enableSOCKSProxy" } return description @@ -178,6 +183,8 @@ public enum SocketIOClientOption : ClientOption { value = signed case let .sessionDelegate(delegate): value = delegate + case let .enableSOCKSProxy(enable): + value = enable } return value diff --git a/Source/SocketIO/Engine/SocketEngine.swift b/Source/SocketIO/Engine/SocketEngine.swift index a1a80a1..ab4e214 100644 --- a/Source/SocketIO/Engine/SocketEngine.swift +++ b/Source/SocketIO/Engine/SocketEngine.swift @@ -113,6 +113,9 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So /// If `true`, then the engine is currently in WebSockets mode. @available(*, deprecated, message: "No longer needed, if we're not polling, then we must be doing websockets") public private(set) var websocket = false + + /// When `true`, the WebSocket `stream` will be configured with the enableSOCKSProxy `true`. + public private(set) var enableSOCKSProxy = false /// The WebSocket for this engine. public private(set) var ws: WebSocket? @@ -283,7 +286,9 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So addHeaders(to: &req) - ws = WebSocket(request: req) + let stream = FoundationStream() + stream.enableSOCKSProxy = enableSOCKSProxy + ws = WebSocket(request: req, stream: stream) ws?.callbackQueue = engineQueue ws?.enableCompression = compress ws?.disableSSLCertValidation = selfSigned @@ -588,6 +593,8 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So self.security = security case .compress: self.compress = true + case .enableSOCKSProxy: + self.enableSOCKSProxy = true default: continue } diff --git a/Source/SocketIO/Util/SocketExtensions.swift b/Source/SocketIO/Util/SocketExtensions.swift index fe9086f..2508329 100644 --- a/Source/SocketIO/Util/SocketExtensions.swift +++ b/Source/SocketIO/Util/SocketExtensions.swift @@ -81,6 +81,8 @@ extension Dictionary where Key == String, Value == Any { return .sessionDelegate(delegate) case let ("compress", compress as Bool): return compress ? .compress : nil + case let ("enableSOCKSProxy", enable as Bool): + return .enableSOCKSProxy(enable) default: return nil } From 44682659b61b590d5230881a7b6aeebace923768 Mon Sep 17 00:00:00 2001 From: Erik Little Date: Thu, 28 Mar 2019 07:11:35 -0400 Subject: [PATCH 2/4] fix #1178 --- Source/SocketIO/Engine/SocketEngineWebsocket.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Source/SocketIO/Engine/SocketEngineWebsocket.swift b/Source/SocketIO/Engine/SocketEngineWebsocket.swift index 0b85ce1..ea1c53f 100644 --- a/Source/SocketIO/Engine/SocketEngineWebsocket.swift +++ b/Source/SocketIO/Engine/SocketEngineWebsocket.swift @@ -62,15 +62,19 @@ extension SocketEngineWebsocket { /// - parameter completion: Callback called on transport write completion. public func sendWebSocketMessage(_ str: String, withType type: SocketEnginePacketType, - withData datas: [Data], + withData data: [Data], completion: (() -> ())? ) { DefaultSocketLogger.Logger.log("Sending ws: \(str) as type: \(type.rawValue)", type: "SocketEngineWebSocket") ws?.write(string: "\(type.rawValue)\(str)") - for data in datas { - if case let .left(bin) = createBinaryDataForSend(using: data) { + if data.count == 0 { + completion?() + } + + for item in data { + if case let .left(bin) = createBinaryDataForSend(using: item) { ws?.write(data: bin, completion: completion) } } From 2fd9e4b99345da213c3b0915d1e9c39a21534cd9 Mon Sep 17 00:00:00 2001 From: Erik Little Date: Thu, 28 Mar 2019 07:17:45 -0400 Subject: [PATCH 3/4] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7aa62bf..cd4777d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# v15.0.1 + +- Fix emit completion callback not firing on websockets [#1178](https://github.com/socketio/socket.io-client-swift/issues/1178) + # v15.0.0 - Swift 5 From 0d44b10734dcd30a013960f1e968508fa85c7a40 Mon Sep 17 00:00:00 2001 From: Erik Little Date: Tue, 28 May 2019 08:55:11 -0400 Subject: [PATCH 4/4] update changelog/readme for 15.1 --- CHANGELOG.md | 3 ++- README.md | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd4777d..4f57fc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ -# v15.0.1 +# v15.1.0 +- Add ability to enable websockets SOCKS proxy. - Fix emit completion callback not firing on websockets [#1178](https://github.com/socketio/socket.io-client-swift/issues/1178) # v15.0.0 diff --git a/README.md b/README.md index 3cbb312..dd1004c 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ Then import `import SocketIO`. ### Carthage Add this line to your `Cartfile`: ``` -github "socketio/socket.io-client-swift" ~> 15.0.0 +github "socketio/socket.io-client-swift" ~> 15.1.0 ``` Run `carthage update --platform ios,macosx`. @@ -113,7 +113,7 @@ Create `Podfile` and add `pod 'Socket.IO-Client-Swift'`: use_frameworks! target 'YourApp' do - pod 'Socket.IO-Client-Swift', '~> 15.0.0' + pod 'Socket.IO-Client-Swift', '~> 15.1.0' end ```