diff --git a/README.md b/README.md index ff92b65..a61106d 100644 --- a/README.md +++ b/README.md @@ -68,11 +68,12 @@ Example ```swift // opts can be omitted, will use default values let socket = SocketIOClient(socketURL: "https://localhost:8080", opts: [ - "reconnects": true, // default true - "reconnectAttempts": 5, // default -1 (infinite tries) - "reconnectWait": 5, // default 10 + "reconnects": true, // Default is true + "reconnectAttempts": 5, // Default is -1 (infinite tries) + "reconnectWait": 5, // Default is 10 "nsp": "swift", // connects to the specified namespace. Default is / - "forcePolling": true // if true, the socket will only use XHR polling, default is false (polling/WebSockets) + "forcePolling": true, // if true, the socket will only use XHR polling, Default is false (polling/WebSockets) + "cookies": nil // An array of NSHTTPCookies. Passed during handshake. Default is nil ]) // Called on every event diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index c7446b1..794cb2d 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -67,6 +67,7 @@ public class SocketEngine: NSObject, WebSocketDelegate { var connected:Bool { return self._connected } + var cookies:[NSHTTPCookie]? var pingInterval:Int? var polling:Bool { return self._polling @@ -79,9 +80,10 @@ public class SocketEngine: NSObject, WebSocketDelegate { } var ws:WebSocket? - init(client:SocketIOClient, forcePolling:Bool = false) { + init(client:SocketIOClient, forcePolling:Bool = false, withCookies cookies:[NSHTTPCookie]?) { self.client = client self.forcePolling = forcePolling + self.cookies = cookies self.session = NSURLSession(configuration: NSURLSessionConfiguration.ephemeralSessionConfiguration(), delegate: nil, delegateQueue: self.workQueue) } @@ -289,7 +291,12 @@ public class SocketEngine: NSObject, WebSocketDelegate { let (urlPolling, urlWebSocket) = self.createURLs(params: opts) self.urlPolling = urlPolling self.urlWebSocket = urlWebSocket - let reqPolling = NSURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!) + let reqPolling = NSMutableURLRequest(URL: NSURL(string: urlPolling + "&b64=1")!) + + if self.cookies != nil { + let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(self.cookies!) + reqPolling.allHTTPHeaderFields = headers + } self.session.dataTaskWithRequest(reqPolling) {[weak self] data, res, err in var err2:NSError? @@ -473,10 +480,10 @@ public class SocketEngine: NSObject, WebSocketDelegate { } if self!.websocket { - // println("sending ws: \(msg):\(datas)") + // NSLog("sending ws: \(msg):\(datas)") self?.sendWebSocketMessage(msg, withType: PacketType.MESSAGE, datas: datas) } else { - // println("sending poll: \(msg):\(datas)") + // NSLog("sending poll: \(msg):\(datas)") self?.sendPollMessage(msg, withType: PacketType.MESSAGE, datas: datas) } } diff --git a/SwiftIO/SocketIOClient.swift b/SwiftIO/SocketIOClient.swift index 27afb7d..cf5a837 100644 --- a/SwiftIO/SocketIOClient.swift +++ b/SwiftIO/SocketIOClient.swift @@ -60,6 +60,7 @@ public class SocketIOClient: NSObject { public var connecting:Bool { return self._connecting } + public var cookies:[NSHTTPCookie]? public var engine:SocketEngine? public var nsp:String? public var reconnects = true @@ -107,13 +108,19 @@ public class SocketIOClient: NSObject { if let polling = opts!["forcePolling"] as? Bool { self.forcePolling = polling } + + if let cookies = opts!["cookies"] as? [NSHTTPCookie] { + self.cookies = cookies + } } else { self.reconnectAttempts = -1 } super.init() - self.engine = SocketEngine(client: self, forcePolling: self.forcePolling) + self.engine = SocketEngine(client: self, + forcePolling: self.forcePolling, + withCookies: self.cookies) } public convenience init(socketURL:String, options:NSDictionary?) {