From 472ba5005809b43636a074b64a1ee95df408b33e Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 18 Mar 2015 09:15:13 -0400 Subject: [PATCH 1/3] bump version --- Socket.IO-Client-Swift.podspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Socket.IO-Client-Swift.podspec b/Socket.IO-Client-Swift.podspec index e5877c9..95a6c0d 100644 --- a/Socket.IO-Client-Swift.podspec +++ b/Socket.IO-Client-Swift.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Socket.IO-Client-Swift" - s.version = "1.2.1" + s.version = "1.2.2" s.summary = "Socket.IO-client for Swift" s.description = <<-DESC Socket.IO-client for Swift. @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.author = { "Erik" => "nuclear.ace@gmail.com" } s.ios.deployment_target = '8.0' s.osx.deployment_target = '10.10' - s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.2.1' } + s.source = { :git => "https://github.com/socketio/socket.io-client-swift.git", :tag => 'v1.2.2' } s.source_files = "SwiftIO/**/*.swift" s.requires_arc = true # s.dependency 'Starscream', '~> 0.9' # currently this repo includes Starscream swift files From c67e7a3003fc5e9c218335fedec02b643dd7fcfb Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 18 Mar 2015 09:19:22 -0400 Subject: [PATCH 2/3] work on socketio/socket.io-client-swift#11 --- SwiftIO/SwiftRegex.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SwiftIO/SwiftRegex.swift b/SwiftIO/SwiftRegex.swift index fb8d549..19ac4bf 100644 --- a/SwiftIO/SwiftRegex.swift +++ b/SwiftIO/SwiftRegex.swift @@ -43,7 +43,7 @@ public class SwiftRegex: NSObject, BooleanType { } final var targetRange: NSRange { - return NSRange(location: 0,length: countElements(target)) + return NSRange(location: 0,length: target.utf16Count) } final func substring(range: NSRange) -> String? { @@ -102,7 +102,7 @@ public class SwiftRegex: NSObject, BooleanType { let mut = NSMutableString(string: target) mut.replaceCharactersInRange(match.rangeAtIndex(groupno), withString: replacement) - target = mut + target = mut as String } } } @@ -154,7 +154,7 @@ public class SwiftRegex: NSObject, BooleanType { out.appendString(substring( NSRange(location:pos, length:targetRange.length-pos))!) - return out + return out as String } public var boolValue: Bool { @@ -206,4 +206,4 @@ public func ~= (left: SwiftRegex, right: ([String]?) -> String) -> String { return left.substituteMatches({match, stop -> String in return right(left.groupsForMatch(match)) }, options: nil) -} \ No newline at end of file +} From 89ae9bd3492e90c805a0c0bb9c58c3f8a0d73660 Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 18 Mar 2015 13:05:39 -0400 Subject: [PATCH 3/3] handle utf8 in polling better --- SwiftIO/SocketEngine.swift | 10 +++-- SwiftIO/SocketFixUTF8.swift | 79 ++++--------------------------------- 2 files changed, 15 insertions(+), 74 deletions(-) diff --git a/SwiftIO/SocketEngine.swift b/SwiftIO/SocketEngine.swift index 33af2fb..fb1e989 100644 --- a/SwiftIO/SocketEngine.swift +++ b/SwiftIO/SocketEngine.swift @@ -406,7 +406,9 @@ public class SocketEngine: NSObject, WebSocketDelegate { private func parseEngineMessage(var message:String) { // NSLog("Engine got message: \(message)") - fixDoubleUTF8(&message) + if self.polling { + fixDoubleUTF8(&message) + } // We should upgrade if message == "3probe" { @@ -500,9 +502,11 @@ public class SocketEngine: NSObject, WebSocketDelegate { } } - private func sendPollMessage(msg:String, withType type:PacketType, + private func sendPollMessage(var msg:String, withType type:PacketType, datas:[NSData]? = nil) { // println("Sending poll: \(msg) as type: \(type.rawValue)") + + doubleEncodeUTF8(&msg) let strMsg = "\(type.rawValue)\(msg)" self.postWait.append(strMsg) @@ -584,4 +588,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/SocketFixUTF8.swift b/SwiftIO/SocketFixUTF8.swift index 0d10fcc..032509a 100644 --- a/SwiftIO/SocketFixUTF8.swift +++ b/SwiftIO/SocketFixUTF8.swift @@ -21,80 +21,17 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // -// Adapted from: https://github.com/durbrow/fix-double-utf8.swift import Foundation -var memoizer = [String: UnicodeScalar]() - -func lookup(base:UnicodeScalar, combi:UnicodeScalar) -> UnicodeScalar { - let combined = "\(base)\(combi)" - - if let y = memoizer[combined] { - return y - } - - for i in 0x80...0xFF { - let ch = UnicodeScalar(i) - - if String(ch) == combined { - memoizer[combined] = ch - return ch - } - } - let ch = UnicodeScalar(0xFFFD) // Unicode replacement character � - - memoizer[combined] = ch - return ch +func fixDoubleUTF8(inout name:String) { + let utf8 = name.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false)! + let latin1 = NSString(data: utf8, encoding: NSUTF8StringEncoding)! + name = latin1 as String } -func fixDoubleUTF8(inout name:String) { - var isASCII = true - var y = [UInt8]() - - for ch in name.unicodeScalars { - if ch.value < 0x80 { - y.append(UInt8(ch)) - continue - } - isASCII = false - - if ch.value < 0x100 { - y.append(UInt8(ch)) - continue - } - // might be a combining character that when combined with the - // preceeding character maps to a codepoint in the UTF8 range - if y.count == 0 { - return - } - - let last = y.removeLast() - let repl = lookup(UnicodeScalar(last), ch) - - // the replacement needs to be in the UTF8 range - if repl.value >= 0x100 { - return - } - - y.append(UInt8(repl)) - } - - if isASCII { - return - } - - y.append(0) // null terminator - - return y.withUnsafeBufferPointer { - let cstr = UnsafePointer($0.baseAddress) // typecase from uint8_t * to char * - let rslt = String.fromCStringRepairingIllFormedUTF8(cstr) // -> (String, Bool) - if let str = rslt.0 { - if !rslt.hadError { - name = str - } - } - - return - } +func doubleEncodeUTF8(inout str:String) { + let latin1 = str.dataUsingEncoding(NSUTF8StringEncoding)! + let utf8 = NSString(data: latin1, encoding: NSISOLatin1StringEncoding)! + str = utf8 as String } \ No newline at end of file