diff --git a/SocketIO-MacTests/SocketAckManagerTest.swift b/SocketIO-MacTests/SocketAckManagerTest.swift index 490c51f..dd3094d 100644 --- a/SocketIO-MacTests/SocketAckManagerTest.swift +++ b/SocketIO-MacTests/SocketAckManagerTest.swift @@ -19,7 +19,7 @@ class SocketAckManagerTest: XCTestCase { callbackExpection.fulfill() } ackManager.addAck(1, callback: callback) - ackManager.executeAck(1, with: itemsArray, onQueue: DispatchQueue.main) + ackManager.executeAck(1, with: itemsArray as [AnyObject], onQueue: DispatchQueue.main) waitForExpectations(timeout: 3.0, handler: nil) } diff --git a/SocketIO-MacTests/SocketBasicPacketTest.swift b/SocketIO-MacTests/SocketBasicPacketTest.swift index 7526fe7..d22116a 100644 --- a/SocketIO-MacTests/SocketBasicPacketTest.swift +++ b/SocketIO-MacTests/SocketBasicPacketTest.swift @@ -16,15 +16,15 @@ class SocketBasicPacketTest: XCTestCase { func testEmpyEmit() { let expectedSendString = "2[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testNullEmit() { let expectedSendString = "2[\"test\",null]" - let sendData = ["test", NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let sendData = ["test", NSNull()] as [Any] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -32,7 +32,7 @@ class SocketBasicPacketTest: XCTestCase { func testStringEmit() { let expectedSendString = "2[\"test\",\"foo bar\"]" let sendData = ["test", "foo bar"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -40,30 +40,30 @@ class SocketBasicPacketTest: XCTestCase { func testStringEmitWithQuotes() { let expectedSendString = "2[\"test\",\"\\\"he\\\"llo world\\\"\"]" let sendData = ["test", "\"he\"llo world\""] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testJSONEmit() { - let expectedSendString = "2[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" - let sendData = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let expectedSendString = "2[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]" + let sendData = ["test" as AnyObject, ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary] as [AnyObject] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testArrayEmit() { let expectedSendString = "2[\"test\",[\"hello\",1,{\"test\":\"test\"}]]" - let sendData = ["test", ["hello", 1, ["test": "test"]]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let sendData = ["test", ["hello", 1, ["test": "test"]]] as [Any] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testBinaryEmit() { - let expectedSendString = "51-[\"test\",{\"_placeholder\":true,\"num\":0}]" - let sendData = ["test", data] + let expectedSendString = "51-[\"test\",{\"_placeholder\":1,\"num\":0}]" + let sendData = ["test", data] as [Any] let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) @@ -71,9 +71,9 @@ class SocketBasicPacketTest: XCTestCase { } func testMultipleBinaryEmit() { - let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":0},\"data2\":{\"_placeholder\":true,\"num\":1}}]" - let sendData = ["test", ["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/", ack: false) + let expectedSendString = "52-[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]" + let sendData = ["test" as AnyObject, ["data1": data, "data2": data2] as NSDictionary] as [AnyObject] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data, data2]) @@ -82,14 +82,16 @@ class SocketBasicPacketTest: XCTestCase { func testEmitWithAck() { let expectedSendString = "20[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: false) - XCTAssertEqual(packet.packetString, expectedSendString) + XCTAssertEqual(packet.packetString, + + expectedSendString) } func testEmitDataWithAck() { - let expectedSendString = "51-0[\"test\",{\"_placeholder\":true,\"num\":0}]" - let sendData = ["test", data] + let expectedSendString = "51-0[\"test\",{\"_placeholder\":1,\"num\":0}]" + let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject] let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) @@ -115,32 +117,32 @@ class SocketBasicPacketTest: XCTestCase { func testStringAck() { let expectedSendString = "30[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } func testJSONAck() { - let expectedSendString = "30[{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" + let expectedSendString = "30[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]" let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } func testBinaryAck() { - let expectedSendString = "61-0[{\"_placeholder\":true,\"num\":0}]" + let expectedSendString = "61-0[{\"_placeholder\":1,\"num\":0}]" let sendData = [data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) } func testMultipleBinaryAck() { - let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]" + let expectedSendString = "62-0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]" let sendData = [["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data2, data]) diff --git a/SocketIO-MacTests/SocketEngineTest.swift b/SocketIO-MacTests/SocketEngineTest.swift index 4c54833..1880fd4 100644 --- a/SocketIO-MacTests/SocketEngineTest.swift +++ b/SocketIO-MacTests/SocketEngineTest.swift @@ -89,14 +89,14 @@ class SocketEngineTest: XCTestCase { func testEncodeURLProperly() { engine.connectParams = [ - "created": "2016-05-04T18:31:15+0200" + "created": "2016-05-04T18:31:15+0200" as AnyObject ] XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&created=2016-05-04T18%3A31%3A15%2B0200") XCTAssertEqual(engine.urlWebSocket.query, "transport=websocket&created=2016-05-04T18%3A31%3A15%2B0200") engine.connectParams = [ - "forbidden": "!*'();:@&=+$,/?%#[]\" {}" + "forbidden": "!*'();:@&=+$,/?%#[]\" {}" as AnyObject ] XCTAssertEqual(engine.urlPolling.query, "transport=polling&b64=1&forbidden=%21%2A%27%28%29%3B%3A%40%26%3D%2B%24%2C%2F%3F%25%23%5B%5D%22%20%7B%7D") diff --git a/SocketIO-MacTests/SocketNamespacePacketTest.swift b/SocketIO-MacTests/SocketNamespacePacketTest.swift index 9cbb909..e1144a1 100644 --- a/SocketIO-MacTests/SocketNamespacePacketTest.swift +++ b/SocketIO-MacTests/SocketNamespacePacketTest.swift @@ -16,15 +16,15 @@ class SocketNamespacePacketTest: XCTestCase { func testEmpyEmit() { let expectedSendString = "2/swift,[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testNullEmit() { let expectedSendString = "2/swift,[\"test\",null]" - let sendData = ["test", NSNull()] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let sendData = ["test", NSNull()] as [Any] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } @@ -32,30 +32,31 @@ class SocketNamespacePacketTest: XCTestCase { func testStringEmit() { let expectedSendString = "2/swift,[\"test\",\"foo bar\"]" let sendData = ["test", "foo bar"] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testJSONEmit() { - let expectedSendString = "2/swift,[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" - let sendData = ["test", ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let expectedSendString = "2/swift,[\"test\",{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]" + let sendData = ["test" as AnyObject, ["foobar": true, "hello": 1, "test": "hello", "null": NSNull()] as NSDictionary] as [AnyObject] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testArrayEmit() { let expectedSendString = "2/swift,[\"test\",[\"hello\",1,{\"test\":\"test\"}]]" - let sendData = ["test", ["hello", 1, ["test": "test"]]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let sendData = ["test", ["hello", 1, ["test": "test"]]] as [Any] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) + XCTAssertEqual(packet.packetString, expectedSendString) } func testBinaryEmit() { - let expectedSendString = "51-/swift,[\"test\",{\"_placeholder\":true,\"num\":0}]" - let sendData = ["test", data] + let expectedSendString = "51-/swift,[\"test\",{\"_placeholder\":1,\"num\":0}]" + let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject] let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) @@ -63,9 +64,9 @@ class SocketNamespacePacketTest: XCTestCase { } func testMultipleBinaryEmit() { - let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":true,\"num\":0},\"data2\":{\"_placeholder\":true,\"num\":1}}]" - let sendData = ["test", ["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: -1, nsp: "/swift", ack: false) + let expectedSendString = "52-/swift,[\"test\",{\"data1\":{\"_placeholder\":1,\"num\":0},\"data2\":{\"_placeholder\":1,\"num\":1}}]" + let sendData = ["test" as AnyObject, ["data1": data, "data2": data2] as NSDictionary] as [AnyObject] + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: -1, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data, data2]) @@ -74,14 +75,14 @@ class SocketNamespacePacketTest: XCTestCase { func testEmitWithAck() { let expectedSendString = "2/swift,0[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: false) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) } func testEmitDataWithAck() { - let expectedSendString = "51-/swift,0[\"test\",{\"_placeholder\":true,\"num\":0}]" - let sendData = ["test", data] + let expectedSendString = "51-/swift,0[\"test\",{\"_placeholder\":1,\"num\":0}]" + let sendData = ["test" as AnyObject, data as AnyObject] as [AnyObject] let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: false) XCTAssertEqual(packet.packetString, expectedSendString) @@ -107,32 +108,32 @@ class SocketNamespacePacketTest: XCTestCase { func testStringAck() { let expectedSendString = "3/swift,0[\"test\"]" let sendData = ["test"] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } func testJSONAck() { - let expectedSendString = "3/swift,0[{\"test\":\"hello\",\"hello\":1,\"foobar\":true,\"null\":null}]" + let expectedSendString = "3/swift,0[{\"test\":\"hello\",\"hello\":1,\"foobar\":1,\"null\":null}]" let sendData = [["foobar": true, "hello": 1, "test": "hello", "null": NSNull()]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) } func testBinaryAck() { - let expectedSendString = "61-/swift,0[{\"_placeholder\":true,\"num\":0}]" + let expectedSendString = "61-/swift,0[{\"_placeholder\":1,\"num\":0}]" let sendData = [data] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data]) } func testMultipleBinaryAck() { - let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":true,\"num\":0},\"data1\":{\"_placeholder\":true,\"num\":1}}]" + let expectedSendString = "62-/swift,0[{\"data2\":{\"_placeholder\":1,\"num\":0},\"data1\":{\"_placeholder\":1,\"num\":1}}]" let sendData = [["data1": data, "data2": data2]] - let packet = SocketPacket.packetFromEmit(sendData, id: 0, nsp: "/swift", ack: true) + let packet = SocketPacket.packetFromEmit(sendData as [AnyObject], id: 0, nsp: "/swift", ack: true) XCTAssertEqual(packet.packetString, expectedSendString) XCTAssertEqual(packet.binary, [data2, data]) diff --git a/SocketIO-MacTests/SocketParserTest.swift b/SocketIO-MacTests/SocketParserTest.swift index cb1e8d0..841057a 100644 --- a/SocketIO-MacTests/SocketParserTest.swift +++ b/SocketIO-MacTests/SocketParserTest.swift @@ -15,19 +15,19 @@ class SocketParserTest: XCTestCase { //Format key: message; namespace-data-binary-id static let packetTypes: [String: (String, [AnyObject], [Data], Int)] = [ "0": ("/", [], [], -1), "1": ("/", [], [], -1), - "25[\"test\"]": ("/", ["test"], [], 5), - "2[\"test\",\"~~0\"]": ("/", ["test", "~~0"], [], -1), - "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn", ["test3", "test4"]], [], -1), - "51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn", [1, 2], ["test": "bob"], 25, "polo", ["_placeholder": true, "num": 0]], [], -1), - "3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"]], [], 0), + "25[\"test\"]": ("/", ["test" as AnyObject], [], 5), + "2[\"test\",\"~~0\"]": ("/", ["test" as AnyObject, "~~0" as AnyObject], [], -1), + "2/swift,[\"testArrayEmitReturn\",[\"test3\",\"test4\"]]": ("/swift", ["testArrayEmitReturn" as AnyObject, ["test3" as AnyObject, "test4" as AnyObject] as NSArray], [], -1), + "51-/swift,[\"testMultipleItemsWithBufferEmitReturn\",[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": ("/swift", ["testMultipleItemsWithBufferEmitReturn" as AnyObject, [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25 as AnyObject, "polo" as AnyObject, ["_placeholder": true, "num": 0] as NSDictionary], [], -1), + "3/swift,0[[\"test3\",\"test4\"]]": ("/swift", [["test3", "test4"] as NSArray], [], 0), "61-/swift,19[[1,2],{\"test\":\"bob\"},25,\"polo\",{\"_placeholder\":true,\"num\":0}]": - ("/swift", [ [1, 2], ["test": "bob"], 25, "polo", ["_placeholder": true, "num": 0]], [], 19), + ("/swift", [ [1, 2] as NSArray, ["test": "bob"] as NSDictionary, 25 as AnyObject, "polo" as AnyObject, ["_placeholder": true, "num": 0] as NSDictionary], [], 19), "4/swift,": ("/swift", [], [], -1), "0/swift": ("/swift", [], [], -1), "1/swift": ("/swift", [], [], -1), - "4\"ERROR\"": ("/", ["ERROR"], [], -1), - "4{\"test\":2}": ("/", [["test": 2]], [], -1), - "41": ("/", [1], [], -1)] + "4\"ERROR\"": ("/", ["ERROR" as AnyObject], [], -1), + "4{\"test\":2}": ("/", [["test": 2] as NSDictionary], [], -1), + "41": ("/", [1 as AnyObject], [], -1)] func testDisconnect() { let message = "1" diff --git a/SocketIO-MacTests/SocketSideEffectTest.swift b/SocketIO-MacTests/SocketSideEffectTest.swift index 4312415..dae9333 100644 --- a/SocketIO-MacTests/SocketSideEffectTest.swift +++ b/SocketIO-MacTests/SocketSideEffectTest.swift @@ -25,20 +25,20 @@ class SocketSideEffectTest: XCTestCase { } func testFirstAck() { - socket.emitWithAck("test")(timeoutAfter: 0) {data in} + socket.emitWithAck("test")(0) {data in} XCTAssertEqual(socket.currentAck, 0) } func testSecondAck() { - socket.emitWithAck("test")(timeoutAfter: 0) {data in} - socket.emitWithAck("test")(timeoutAfter: 0) {data in} + socket.emitWithAck("test")(0) {data in} + socket.emitWithAck("test")(0) {data in} XCTAssertEqual(socket.currentAck, 1) } func testHandleAck() { let expect = expectation(description: "handled ack") - socket.emitWithAck("test")(timeoutAfter: 0) {data in + socket.emitWithAck("test")(0) {data in XCTAssertEqual(data[0] as? String, "hello world") expect.fulfill() } @@ -49,7 +49,7 @@ class SocketSideEffectTest: XCTestCase { func testHandleAck2() { let expect = expectation(description: "handled ack2") - socket.emitWithAck("test")(timeoutAfter: 0) {data in + socket.emitWithAck("test")(0) {data in XCTAssertTrue(data.count == 2, "Wrong number of ack items") expect.fulfill() } @@ -127,7 +127,7 @@ class SocketSideEffectTest: XCTestCase { let expect = expectation(description: "handled binary event") socket.on("test") {data, ack in if let dict = data[0] as? NSDictionary, let data = dict["test"] as? NSData { - XCTAssertEqual(data, self.data) + XCTAssertEqual(data as Data, self.data) expect.fulfill() } } @@ -148,8 +148,8 @@ class SocketSideEffectTest: XCTestCase { socket.on("test") {data, ack in if let dict = data[0] as? NSDictionary, let data = dict["test"] as? NSData, let data2 = dict["test2"] as? NSData { - XCTAssertEqual(data, self.data) - XCTAssertEqual(data2, self.data2) + XCTAssertEqual(data as Data, self.data) + XCTAssertEqual(data2 as Data, self.data2) expect.fulfill() } } diff --git a/Source/WebSocket.swift b/Source/WebSocket.swift index 8d6ee6a..52ab6dc 100644 --- a/Source/WebSocket.swift +++ b/Source/WebSocket.swift @@ -296,72 +296,72 @@ public class WebSocket: NSObject, StreamDelegate { //higher level API we will cut over to at some point //NSStream.getStreamsToHostWithName(url.host, port: url.port.integerValue, inputStream: &inputStream, outputStream: &outputStream) - var readStream: Unmanaged? - var writeStream: Unmanaged? - let h = url.host! - CFStreamCreatePairWithSocketToHost(nil, h as NSString, UInt32(port), &readStream, &writeStream) - inputStream = readStream!.takeRetainedValue() - outputStream = writeStream!.takeRetainedValue() - guard let inStream = inputStream, let outStream = outputStream else { return } - inStream.delegate = self - outStream.delegate = self - if supportedSSLSchemes.contains(url.scheme!) { - inStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL, forKey: Stream.PropertyKey.socketSecurityLevelKey) - outStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL, forKey: Stream.PropertyKey.socketSecurityLevelKey) - } else { - certValidated = true //not a https session, so no need to check SSL pinning - } - if voipEnabled { - inStream.setProperty(StreamNetworkServiceTypeValue.voIP as NSString, forKey: Stream.PropertyKey(rawValue: Stream.PropertyKey.networkServiceType.rawValue)) - outStream.setProperty(StreamNetworkServiceTypeValue.voIP as NSString, forKey: Stream.PropertyKey(rawValue: Stream.PropertyKey.networkServiceType.rawValue)) - } - if selfSignedSSL { - let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(value: false), kCFStreamSSLPeerName: kCFNull] - inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) - outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) - } - if let cipherSuites = self.enabledSSLCipherSuites { - if let sslContextIn = CFReadStreamCopyProperty(inputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext?, - let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { - let resIn = SSLSetEnabledCiphers(sslContextIn, cipherSuites, cipherSuites.count) - let resOut = SSLSetEnabledCiphers(sslContextOut, cipherSuites, cipherSuites.count) - if resIn != errSecSuccess { - let error = self.errorWithDetail(detail: "Error setting ingoing cypher suites", code: UInt16(resIn)) - disconnectStream(error: error) - return - } - if resOut != errSecSuccess { - let error = self.errorWithDetail(detail: "Error setting outgoing cypher suites", code: UInt16(resOut)) - disconnectStream(error: error) - return - } - } - } - CFReadStreamSetDispatchQueue(inStream, WebSocket.sharedWorkQueue) - CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue) - inStream.open() - outStream.open() - - self.mutex.lock() - self.readyToWrite = true - self.mutex.unlock() - - let bytes = UnsafeRawPointer(data.bytes).assumingMemoryBound(to: UInt8.self) - var out = timeout * 1000000 // wait 5 seconds before giving up - writeQueue.addOperation { [weak self] in - while !outStream.hasSpaceAvailable { - usleep(100) // wait until the socket is ready - out -= 100 - if out < 0 { - self?.cleanupStream() - self?.doDisconnect(error: self?.errorWithDetail(detail: "write wait timed out", code: 2)) - return - } else if outStream.streamError != nil { - return // disconnectStream will be called. - } - } - outStream.write(bytes, maxLength: data.length) - } +// var readStream: Unmanaged? +// var writeStream: Unmanaged? +// let h = url.host! +// CFStreamCreatePairWithSocketToHost(nil, h as NSString, UInt32(port), &readStream, &writeStream) +// inputStream = readStream!.takeRetainedValue() +// outputStream = writeStream!.takeRetainedValue() +// guard let inStream = inputStream, let outStream = outputStream else { return } +// inStream.delegate = self +// outStream.delegate = self +// if supportedSSLSchemes.contains(url.scheme!) { +// inStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL, forKey: Stream.PropertyKey.socketSecurityLevelKey) +// outStream.setProperty(StreamSocketSecurityLevel.negotiatedSSL, forKey: Stream.PropertyKey.socketSecurityLevelKey) +// } else { +// certValidated = true //not a https session, so no need to check SSL pinning +// } +// if voipEnabled { +// inStream.setProperty(StreamNetworkServiceTypeValue.voIP as NSString, forKey: Stream.PropertyKey(rawValue: Stream.PropertyKey.networkServiceType.rawValue)) +// outStream.setProperty(StreamNetworkServiceTypeValue.voIP as NSString, forKey: Stream.PropertyKey(rawValue: Stream.PropertyKey.networkServiceType.rawValue)) +// } +// if selfSignedSSL { +// let settings: [NSObject: NSObject] = [kCFStreamSSLValidatesCertificateChain: NSNumber(value: false), kCFStreamSSLPeerName: kCFNull] +// inStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) +// outStream.setProperty(settings, forKey: kCFStreamPropertySSLSettings as Stream.PropertyKey) +// } +// if let cipherSuites = self.enabledSSLCipherSuites { +// if let sslContextIn = CFReadStreamCopyProperty(inputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext?, +// let sslContextOut = CFWriteStreamCopyProperty(outputStream, CFStreamPropertyKey(rawValue: kCFStreamPropertySSLContext)) as! SSLContext? { +// let resIn = SSLSetEnabledCiphers(sslContextIn, cipherSuites, cipherSuites.count) +// let resOut = SSLSetEnabledCiphers(sslContextOut, cipherSuites, cipherSuites.count) +// if resIn != errSecSuccess { +// let error = self.errorWithDetail(detail: "Error setting ingoing cypher suites", code: UInt16(resIn)) +// disconnectStream(error: error) +// return +// } +// if resOut != errSecSuccess { +// let error = self.errorWithDetail(detail: "Error setting outgoing cypher suites", code: UInt16(resOut)) +// disconnectStream(error: error) +// return +// } +// } +// } +// CFReadStreamSetDispatchQueue(inStream, WebSocket.sharedWorkQueue) +// CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue) +// inStream.open() +// outStream.open() +// +// self.mutex.lock() +// self.readyToWrite = true +// self.mutex.unlock() +// +// let bytes = UnsafeRawPointer(data.bytes).assumingMemoryBound(to: UInt8.self) +// var out = timeout * 1000000 // wait 5 seconds before giving up +// writeQueue.addOperation { [weak self] in +// while !outStream.hasSpaceAvailable { +// usleep(100) // wait until the socket is ready +// out -= 100 +// if out < 0 { +// self?.cleanupStream() +// self?.doDisconnect(error: self?.errorWithDetail(detail: "write wait timed out", code: 2)) +// return +// } else if outStream.streamError != nil { +// return // disconnectStream will be called. +// } +// } +// outStream.write(bytes, maxLength: data.length) +// } } // Delegate for the stream methods. Processes incoming bytes.