diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index 0e05b90..6d2a067 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -185,7 +185,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { } private func createWebsocket(andConnect connect:Bool) { - self.ws = WebSocket(url: NSURL(string: self.urlWebSocket! + "&sid=\(self.sid)")!) + self.ws = WebSocket(url: NSURL(string: self.urlWebSocket! + "&sid=\(self.sid)")!, + cookies: self.cookies) self.ws?.queue = self.handleQueue self.ws?.delegate = self diff --git a/SocketIOClientSwift/WebSocket.swift b/SocketIOClientSwift/WebSocket.swift index 73c03f5..8ddd2c1 100644 --- a/SocketIOClientSwift/WebSocket.swift +++ b/SocketIOClientSwift/WebSocket.swift @@ -78,6 +78,7 @@ public class WebSocket : NSObject, NSStreamDelegate { var buffer: NSMutableData? } + private var cookies:[NSHTTPCookie]? public weak var delegate: WebSocketDelegate? private var url: NSURL private var inputStream: NSInputStream? @@ -103,6 +104,11 @@ public class WebSocket : NSObject, NSStreamDelegate { public init(url: NSURL) { self.url = url } + public convenience init(url: NSURL, cookies:[NSHTTPCookie]?) { + self.init(url: url) + self.cookies = cookies + + } //used for setting protocols. public convenience init(url: NSURL, protocols: Array) { self.init(url: url) @@ -175,6 +181,14 @@ public class WebSocket : NSObject, NSStreamDelegate { port = 80 } } + + if self.cookies != nil { + let headers = NSHTTPCookie.requestHeaderFieldsWithCookies(self.cookies!) + for (key, value) in headers { + self.addHeader(urlRequest, key: key as! String, val: value as! String) + } + } + self.addHeader(urlRequest, key: headerWSUpgradeName, val: headerWSUpgradeValue) self.addHeader(urlRequest, key: headerWSConnectionName, val: headerWSConnectionValue) if let protocols = optionalProtocols {