diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index fb1e989..a3c43c3 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) } @@ -288,7 +290,13 @@ 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? @@ -472,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) } } @@ -588,4 +596,4 @@ public class SocketEngine: NSObject, WebSocketDelegate { public func websocketDidReceiveData(socket:WebSocket, data:NSData) { self.parseEngineData(data) } -} \ No newline at end of file +} 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?) {