Преглед на файлове

enum first letter lowercase
fix compile issue in SocketFile
import Swifter in test class
set open instead of public some class for tests

phimage преди 10 години
родител
ревизия
2af424ecda

+ 9 - 9
Sources/DemoServer.swift

@@ -34,7 +34,7 @@ public func demoServer(_ publicDir: String) -> HttpServer {
         }
         }
     }
     }
     
     
-    server["/magic"] = { .OK(.Html("You asked for " + $0.path)) }
+    server["/magic"] = { .ok(.html("You asked for " + $0.path)) }
     
     
     server["/test/:param1/:param2"] = { r in
     server["/test/:param1/:param2"] = { r in
         scopes {
         scopes {
@@ -101,7 +101,7 @@ public func demoServer(_ publicDir: String) -> HttpServer {
         for multipart in r.parseMultiPartFormData() {
         for multipart in r.parseMultiPartFormData() {
             response += "Name: \(multipart.name) File name: \(multipart.fileName) Size: \(multipart.body.count)<br>"
             response += "Name: \(multipart.name) File name: \(multipart.fileName) Size: \(multipart.body.count)<br>"
         }
         }
-        return HttpResponse.OK(.Html(response))
+        return HttpResponse.ok(.html(response))
     }
     }
     
     
     server.GET["/login"] = scopes {
     server.GET["/login"] = scopes {
@@ -139,7 +139,7 @@ public func demoServer(_ publicDir: String) -> HttpServer {
     
     
     server.POST["/login"] = { r in
     server.POST["/login"] = { r in
         let formFields = r.parseUrlencodedForm()
         let formFields = r.parseUrlencodedForm()
-        return HttpResponse.OK(.Html(formFields.map({ "\($0.0) = \($0.1)" }).joined(separator: "<br>")))
+        return HttpResponse.ok(.html(formFields.map({ "\($0.0) = \($0.1)" }).joined(separator: "<br>")))
     }
     }
     
     
     server["/demo"] = scopes {
     server["/demo"] = scopes {
@@ -154,25 +154,25 @@ public func demoServer(_ publicDir: String) -> HttpServer {
     }
     }
     
     
     server["/raw"] = { r in
     server["/raw"] = { r in
-        return HttpResponse.RAW(200, "OK", ["XXX-Custom-Header": "value"], { try $0.write([UInt8]("test".utf8)) })
+        return HttpResponse.raw(200, "OK", ["XXX-Custom-Header": "value"], { try $0.write([UInt8]("test".utf8)) })
     }
     }
     
     
     server["/redirect"] = { r in
     server["/redirect"] = { r in
-        return .MovedPermanently("http://www.google.com")
+        return .movedPermanently("http://www.google.com")
     }
     }
 
 
     server["/long"] = { r in
     server["/long"] = { r in
         var longResponse = ""
         var longResponse = ""
         for k in 0..<1000 { longResponse += "(\(k)),->" }
         for k in 0..<1000 { longResponse += "(\(k)),->" }
-        return .OK(.Html(longResponse))
+        return .ok(.html(longResponse))
     }
     }
     
     
     server["/wildcard/*/test/*/:param"] = { r in
     server["/wildcard/*/test/*/:param"] = { r in
-        return .OK(.Html(r.path))
+        return .ok(.html(r.path))
     }
     }
     
     
     server["/stream"] = { r in
     server["/stream"] = { r in
-        return HttpResponse.RAW(200, "OK", nil, { w in
+        return HttpResponse.raw(200, "OK", nil, { w in
             for i in 0...100 {
             for i in 0...100 {
                 try w.write([UInt8]("[chunk \(i)]".utf8))
                 try w.write([UInt8]("[chunk \(i)]".utf8))
             }
             }
@@ -186,7 +186,7 @@ public func demoServer(_ publicDir: String) -> HttpServer {
     })
     })
     
     
     server.notFoundHandler = { r in
     server.notFoundHandler = { r in
-        return .MovedPermanently("https://github.com/404")
+        return .movedPermanently("https://github.com/404")
     }
     }
     
     
     server.middleware.append { r in
     server.middleware.append { r in

+ 15 - 15
Sources/File.swift

@@ -12,13 +12,13 @@
 #endif
 #endif
 
 
 public enum FileError: Error {
 public enum FileError: Error {
-    case OpenFailed(String)
-    case WriteFailed(String)
-    case ReadFailed(String)
-    case SeekFailed(String)
-    case GetCurrentWorkingDirectoryFailed(String)
-    case IsDirectoryFailed(String)
-    case OpenDirFailed(String)
+    case openFailed(String)
+    case writeFailed(String)
+    case readFailed(String)
+    case seekFailed(String)
+    case getCurrentWorkingDirectoryFailed(String)
+    case isDirectoryFailed(String)
+    case openDirFailed(String)
 }
 }
 
 
 public class File {
 public class File {
@@ -37,7 +37,7 @@ public class File {
     
     
     public static func openFileForMode(_ path: String, _ mode: String) throws -> File {
     public static func openFileForMode(_ path: String, _ mode: String) throws -> File {
         guard let file = path.withCString({ pathPointer in mode.withCString({ fopen(pathPointer, $0) }) }) else {
         guard let file = path.withCString({ pathPointer in mode.withCString({ fopen(pathPointer, $0) }) }) else {
-            throw FileError.OpenFailed(Errno.description())
+            throw FileError.openFailed(Errno.description())
         }
         }
         return File(file)
         return File(file)
     }
     }
@@ -45,14 +45,14 @@ public class File {
     public static func isDirectory(_ path: String) throws -> Bool {
     public static func isDirectory(_ path: String) throws -> Bool {
         var s = stat()
         var s = stat()
         guard path.withCString({ stat($0, &s) }) == 0 else {
         guard path.withCString({ stat($0, &s) }) == 0 else {
-            throw FileError.IsDirectoryFailed(Errno.description())
+            throw FileError.isDirectoryFailed(Errno.description())
         }
         }
         return s.st_mode & S_IFMT == S_IFDIR
         return s.st_mode & S_IFMT == S_IFDIR
     }
     }
     
     
     public static func currentWorkingDirectory() throws -> String {
     public static func currentWorkingDirectory() throws -> String {
         guard let path = getcwd(nil, 0) else {
         guard let path = getcwd(nil, 0) else {
-            throw FileError.GetCurrentWorkingDirectoryFailed(Errno.description())
+            throw FileError.getCurrentWorkingDirectoryFailed(Errno.description())
         }
         }
         return String(cString: path)
         return String(cString: path)
     }
     }
@@ -64,7 +64,7 @@ public class File {
     
     
     public static func list(_ path: String) throws -> [String] {
     public static func list(_ path: String) throws -> [String] {
         guard let dir = path.withCString({ opendir($0) }) else {
         guard let dir = path.withCString({ opendir($0) }) else {
-            throw FileError.OpenDirFailed(Errno.description())
+            throw FileError.openDirFailed(Errno.description())
         }
         }
         defer { closedir(dir) }
         defer { closedir(dir) }
         var results = [String]()
         var results = [String]()
@@ -108,9 +108,9 @@ public class File {
             return count
             return count
         }
         }
         if ferror(self.pointer) != 0 {
         if ferror(self.pointer) != 0 {
-            throw FileError.ReadFailed(Errno.description())
+            throw FileError.readFailed(Errno.description())
         }
         }
-        throw FileError.ReadFailed("Unknown file read error occured.")
+        throw FileError.readFailed("Unknown file read error occured.")
     }
     }
 
 
     public func write(data: [UInt8]) throws -> Void {
     public func write(data: [UInt8]) throws -> Void {
@@ -119,14 +119,14 @@ public class File {
         }
         }
         try data.withUnsafeBufferPointer {
         try data.withUnsafeBufferPointer {
             if fwrite($0.baseAddress, 1, data.count, self.pointer) != data.count {
             if fwrite($0.baseAddress, 1, data.count, self.pointer) != data.count {
-                throw FileError.WriteFailed(Errno.description())
+                throw FileError.writeFailed(Errno.description())
             }
             }
         }
         }
     }
     }
     
     
     public func seek(offset: Int) throws -> Void {
     public func seek(offset: Int) throws -> Void {
         if fseek(self.pointer, offset, SEEK_SET) != 0 {
         if fseek(self.pointer, offset, SEEK_SET) != 0 {
-            throw FileError.SeekFailed(Errno.description())
+            throw FileError.seekFailed(Errno.description())
         }
         }
     }
     }
 
 

+ 8 - 8
Sources/Files.swift

@@ -14,13 +14,13 @@
 public func shareFilesFromDirectory(_ directoryPath: String) -> ((HttpRequest) -> HttpResponse) {
 public func shareFilesFromDirectory(_ directoryPath: String) -> ((HttpRequest) -> HttpResponse) {
     return { r in
     return { r in
         guard let fileRelativePath = r.params.first else {
         guard let fileRelativePath = r.params.first else {
-            return .NotFound
+            return .notFound
         }
         }
         let absolutePath = directoryPath + "/" + fileRelativePath.1
         let absolutePath = directoryPath + "/" + fileRelativePath.1
         guard let file = try? File.openForReading(absolutePath) else {
         guard let file = try? File.openForReading(absolutePath) else {
-            return .NotFound
+            return .notFound
         }
         }
-        return .RAW(200, "OK", [:], { writer in
+        return .raw(200, "OK", [:], { writer in
             defer { file.close() }
             defer { file.close() }
             try writer.write(file)
             try writer.write(file)
         })
         })
@@ -30,12 +30,12 @@ public func shareFilesFromDirectory(_ directoryPath: String) -> ((HttpRequest) -
 public func directoryBrowser(_ dir: String) -> ((HttpRequest) -> HttpResponse) {
 public func directoryBrowser(_ dir: String) -> ((HttpRequest) -> HttpResponse) {
     return { r in
     return { r in
         guard let (_, value) = r.params.first else {
         guard let (_, value) = r.params.first else {
-            return HttpResponse.NotFound
+            return HttpResponse.notFound
         }
         }
         let filePath = dir + "/" + value
         let filePath = dir + "/" + value
         do {
         do {
             guard try File.exists(filePath) else {
             guard try File.exists(filePath) else {
-                return HttpResponse.NotFound
+                return HttpResponse.notFound
             }
             }
             if try File.isDirectory(filePath) {
             if try File.isDirectory(filePath) {
                 let files = try File.list(filePath)
                 let files = try File.list(filePath)
@@ -57,15 +57,15 @@ public func directoryBrowser(_ dir: String) -> ((HttpRequest) -> HttpResponse) {
                 }(r)
                 }(r)
             } else {
             } else {
                 guard let file = try? File.openForReading(filePath) else {
                 guard let file = try? File.openForReading(filePath) else {
-                    return .NotFound
+                    return .notFound
                 }
                 }
-                return .RAW(200, "OK", [:], { writer in
+                return .raw(200, "OK", [:], { writer in
                     defer { file.close() }
                     defer { file.close() }
                     try writer.write(file)
                     try writer.write(file)
                 })
                 })
             }
             }
         } catch {
         } catch {
-            return HttpResponse.InternalServerError
+            return HttpResponse.internalServerError
         }
         }
     }
     }
 }
 }

+ 46 - 46
Sources/HttpResponse.swift

@@ -26,15 +26,15 @@ public protocol HttpResponseBodyWriter {
 
 
 public enum HttpResponseBody {
 public enum HttpResponseBody {
     
     
-    case Json(AnyObject)
-    case Html(String)
-    case Text(String)
-    case Custom(Any, (Any) throws -> String)
+    case json(AnyObject)
+    case html(String)
+    case text(String)
+    case custom(Any, (Any) throws -> String)
     
     
     func content() -> (Int, ((HttpResponseBodyWriter) throws -> Void)?) {
     func content() -> (Int, ((HttpResponseBodyWriter) throws -> Void)?) {
         do {
         do {
             switch self {
             switch self {
-            case .Json(let object):
+            case .json(let object):
                 #if os(Linux)
                 #if os(Linux)
                     let data = [UInt8]("Not ready for Linux.".utf8)
                     let data = [UInt8]("Not ready for Linux.".utf8)
                     return (data.count, {
                     return (data.count, {
@@ -49,18 +49,18 @@ public enum HttpResponseBody {
                         try $0.write(data)
                         try $0.write(data)
                     })
                     })
                 #endif
                 #endif
-            case .Text(let body):
+            case .text(let body):
                 let data = [UInt8](body.utf8)
                 let data = [UInt8](body.utf8)
                 return (data.count, {
                 return (data.count, {
                     try $0.write(data)
                     try $0.write(data)
                 })
                 })
-            case .Html(let body):
+            case .html(let body):
                 let serialised = "<html><meta charset=\"UTF-8\"><body>\(body)</body></html>"
                 let serialised = "<html><meta charset=\"UTF-8\"><body>\(body)</body></html>"
                 let data = [UInt8](serialised.utf8)
                 let data = [UInt8](serialised.utf8)
                 return (data.count, {
                 return (data.count, {
                     try $0.write(data)
                     try $0.write(data)
                 })
                 })
-            case .Custom(let object, let closure):
+            case .custom(let object, let closure):
                 let serialised = try closure(object)
                 let serialised = try closure(object)
                 let data = [UInt8](serialised.utf8)
                 let data = [UInt8](serialised.utf8)
                 return (data.count, {
                 return (data.count, {
@@ -78,61 +78,61 @@ public enum HttpResponseBody {
 
 
 public enum HttpResponse {
 public enum HttpResponse {
     
     
-    case SwitchProtocols([String: String], (Socket) -> Void)
-    case OK(HttpResponseBody), Created, Accepted
-    case MovedPermanently(String)
-    case BadRequest(HttpResponseBody?), Unauthorized, Forbidden, NotFound
-    case InternalServerError
-    case RAW(Int, String, [String:String]?, ((HttpResponseBodyWriter) throws -> Void)? )
+    case switchProtocols([String: String], (Socket) -> Void)
+    case ok(HttpResponseBody), created, accepted
+    case movedPermanently(String)
+    case badRequest(HttpResponseBody?), unauthorized, forbidden, notFound
+    case internalServerError
+    case raw(Int, String, [String:String]?, ((HttpResponseBodyWriter) throws -> Void)? )
 
 
     func statusCode() -> Int {
     func statusCode() -> Int {
         switch self {
         switch self {
-        case .SwitchProtocols(_, _)   : return 101
-        case .OK(_)                   : return 200
-        case .Created                 : return 201
-        case .Accepted                : return 202
-        case .MovedPermanently        : return 301
-        case .BadRequest(_)           : return 400
-        case .Unauthorized            : return 401
-        case .Forbidden               : return 403
-        case .NotFound                : return 404
-        case .InternalServerError     : return 500
-        case .RAW(let code, _ , _, _) : return code
+        case .switchProtocols(_, _)   : return 101
+        case .ok(_)                   : return 200
+        case .created                 : return 201
+        case .accepted                : return 202
+        case .movedPermanently        : return 301
+        case .badRequest(_)           : return 400
+        case .unauthorized            : return 401
+        case .forbidden               : return 403
+        case .notFound                : return 404
+        case .internalServerError     : return 500
+        case .raw(let code, _ , _, _) : return code
         }
         }
     }
     }
     
     
     func reasonPhrase() -> String {
     func reasonPhrase() -> String {
         switch self {
         switch self {
-        case .SwitchProtocols(_, _)    : return "Switching Protocols"
-        case .OK(_)                    : return "OK"
-        case .Created                  : return "Created"
-        case .Accepted                 : return "Accepted"
-        case .MovedPermanently         : return "Moved Permanently"
-        case .BadRequest(_)            : return "Bad Request"
-        case .Unauthorized             : return "Unauthorized"
-        case .Forbidden                : return "Forbidden"
-        case .NotFound                 : return "Not Found"
-        case .InternalServerError      : return "Internal Server Error"
-        case .RAW(_, let phrase, _, _) : return phrase
+        case .switchProtocols(_, _)    : return "Switching Protocols"
+        case .ok(_)                    : return "OK"
+        case .created                  : return "Created"
+        case .accepted                 : return "Accepted"
+        case .movedPermanently         : return "Moved Permanently"
+        case .badRequest(_)            : return "Bad Request"
+        case .unauthorized             : return "Unauthorized"
+        case .forbidden                : return "Forbidden"
+        case .notFound                 : return "Not Found"
+        case .internalServerError      : return "Internal Server Error"
+        case .raw(_, let phrase, _, _) : return phrase
         }
         }
     }
     }
     
     
     func headers() -> [String: String] {
     func headers() -> [String: String] {
         var headers = ["Server" : "Swifter \(HttpServer.VERSION)"]
         var headers = ["Server" : "Swifter \(HttpServer.VERSION)"]
         switch self {
         switch self {
-        case .SwitchProtocols(let switchHeaders, _):
+        case .switchProtocols(let switchHeaders, _):
             for (key, value) in switchHeaders {
             for (key, value) in switchHeaders {
                 headers[key] = value
                 headers[key] = value
             }
             }
-        case .OK(let body):
+        case .ok(let body):
             switch body {
             switch body {
-            case .Json(_)   : headers["Content-Type"] = "application/json"
-            case .Html(_)   : headers["Content-Type"] = "text/html"
+            case .json(_)   : headers["Content-Type"] = "application/json"
+            case .html(_)   : headers["Content-Type"] = "text/html"
             default:break
             default:break
             }
             }
-        case .MovedPermanently(let location):
+        case .movedPermanently(let location):
             headers["Location"] = location
             headers["Location"] = location
-        case .RAW(_, _, let rawHeaders, _):
+        case .raw(_, _, let rawHeaders, _):
             if let rawHeaders = rawHeaders {
             if let rawHeaders = rawHeaders {
                 for (k, v) in rawHeaders {
                 for (k, v) in rawHeaders {
                     headers.updateValue(v, forKey: k)
                     headers.updateValue(v, forKey: k)
@@ -145,16 +145,16 @@ public enum HttpResponse {
     
     
     func content() -> (length: Int, write: ((HttpResponseBodyWriter) throws -> Void)?) {
     func content() -> (length: Int, write: ((HttpResponseBodyWriter) throws -> Void)?) {
         switch self {
         switch self {
-        case .OK(let body)             : return body.content()
-        case .BadRequest(let body)     : return body?.content() ?? (-1, nil)
-        case .RAW(_, _, _, let writer) : return (-1, writer)
+        case .ok(let body)             : return body.content()
+        case .badRequest(let body)     : return body?.content() ?? (-1, nil)
+        case .raw(_, _, _, let writer) : return (-1, writer)
         default                        : return (-1, nil)
         default                        : return (-1, nil)
         }
         }
     }
     }
     
     
     func socketSession() -> ((Socket) -> Void)?  {
     func socketSession() -> ((Socket) -> Void)?  {
         switch self {
         switch self {
-        case .SwitchProtocols(_, let handler) : return handler
+        case .switchProtocols(_, let handler) : return handler
         default: return nil
         default: return nil
         }
         }
     }
     }

+ 4 - 1
Sources/HttpRouter.swift

@@ -11,7 +11,10 @@
     import Foundation
     import Foundation
 #endif
 #endif
 
 
-public class HttpRouter {
+open class HttpRouter {
+    
+    public init() {
+    }
     
     
     private class Node {
     private class Node {
         var nodes = [String: Node]()
         var nodes = [String: Node]()

+ 11 - 11
Sources/HttpServerIO.swift

@@ -15,7 +15,7 @@ public class HttpServerIO {
     
     
     private var socket = Socket(socketFileDescriptor: -1)
     private var socket = Socket(socketFileDescriptor: -1)
     private var sockets = Set<Socket>()
     private var sockets = Set<Socket>()
-    private var stateValue: Int32 = HttpServerIOState.Stopped.rawValue
+    private var stateValue: Int32 = HttpServerIOState.stopped.rawValue
     public private(set) var state: HttpServerIOState {
     public private(set) var state: HttpServerIOState {
         get {
         get {
             return HttpServerIOState(rawValue: stateValue)!
             return HttpServerIOState(rawValue: stateValue)!
@@ -24,7 +24,7 @@ public class HttpServerIO {
             OSAtomicCompareAndSwapInt(self.state.rawValue, state.rawValue, &stateValue)
             OSAtomicCompareAndSwapInt(self.state.rawValue, state.rawValue, &stateValue)
         }
         }
     }
     }
-    public var operating: Bool { get { return self.state == .Running } }
+    public var operating: Bool { get { return self.state == .running } }
     private let queue = DispatchQueue(label: "swifter.httpserverio.clientsockets")
     private let queue = DispatchQueue(label: "swifter.httpserverio.clientsockets")
     
     
     public func port() throws -> Int {
     public func port() throws -> Int {
@@ -43,7 +43,7 @@ public class HttpServerIO {
     public func start(_ port: in_port_t = 8080, forceIPv4: Bool = false, priority: DispatchQoS.QoSClass = DispatchQoS.QoSClass.background) throws {
     public func start(_ port: in_port_t = 8080, forceIPv4: Bool = false, priority: DispatchQoS.QoSClass = DispatchQoS.QoSClass.background) throws {
         guard !self.operating else { return }
         guard !self.operating else { return }
         stop()
         stop()
-        self.state = .Starting
+        self.state = .starting
         self.socket = try Socket.tcpSocketForListen(port, forceIPv4)
         self.socket = try Socket.tcpSocketForListen(port, forceIPv4)
         DispatchQueue.global(qos: priority).async { [weak self] in
         DispatchQueue.global(qos: priority).async { [weak self] in
             guard let `self` = self else { return }
             guard let `self` = self else { return }
@@ -63,12 +63,12 @@ public class HttpServerIO {
             }
             }
             self.stop()
             self.stop()
         }
         }
-        self.state = .Running
+        self.state = .running
     }
     }
     
     
     public func stop() {
     public func stop() {
         guard self.operating else { return }
         guard self.operating else { return }
-        self.state = .Stopping
+        self.state = .stopping
         // Shutdown connected peers because they can live in 'keep-alive' or 'websocket' loops.
         // Shutdown connected peers because they can live in 'keep-alive' or 'websocket' loops.
         for socket in self.sockets {
         for socket in self.sockets {
             socket.shutdwn()
             socket.shutdwn()
@@ -77,11 +77,11 @@ public class HttpServerIO {
             self.sockets.removeAll(keepingCapacity: true)
             self.sockets.removeAll(keepingCapacity: true)
         }
         }
         socket.release()
         socket.release()
-        self.state = .Stopped
+        self.state = .stopped
     }
     }
     
     
     public func dispatch(_ request: HttpRequest) -> ([String: String], (HttpRequest) -> HttpResponse) {
     public func dispatch(_ request: HttpRequest) -> ([String: String], (HttpRequest) -> HttpResponse) {
-        return ([:], { _ in HttpResponse.NotFound })
+        return ([:], { _ in HttpResponse.notFound })
     }
     }
     
     
     private func handleConnection(_ socket: Socket) {
     private func handleConnection(_ socket: Socket) {
@@ -166,10 +166,10 @@ public class HttpServerIO {
 }
 }
 
 
 public enum HttpServerIOState: Int32 {
 public enum HttpServerIOState: Int32 {
-    case Starting
-    case Running
-    case Stopping
-    case Stopped
+    case starting
+    case running
+    case stopping
+    case stopped
 }
 }
 
 
 #if os(Linux)
 #if os(Linux)

+ 1 - 1
Sources/Scopes.swift

@@ -15,7 +15,7 @@ public func scopes(_ scope: @escaping Closure) -> ((HttpRequest) -> HttpResponse
     return { r in
     return { r in
         ScopesBuffer[Process.tid] = ""
         ScopesBuffer[Process.tid] = ""
         scope()
         scope()
-        return .RAW(200, "OK", ["Content-Type": "text/html"], {
+        return .raw(200, "OK", ["Content-Type": "text/html"], {
             try? $0.write([UInt8](("<!DOCTYPE html>"  + (ScopesBuffer[Process.tid] ?? "")).utf8))
             try? $0.write([UInt8](("<!DOCTYPE html>"  + (ScopesBuffer[Process.tid] ?? "")).utf8))
         })
         })
     }
     }

+ 5 - 3
Sources/Socket+File.swift

@@ -14,8 +14,8 @@
 #if os(iOS) || os (Linux)
 #if os(iOS) || os (Linux)
     struct sf_hdtr { }
     struct sf_hdtr { }
     
     
-    private func sendfileImpl(source: Int32, _ target: Int32, _: off_t, _: UnsafeMutablePointer<off_t>, _: UnsafeMutablePointer<sf_hdtr>, _: Int32) -> Int32 {
-        var buffer = [UInt8](count: 1024, repeatedValue: 0)
+    private func sendfileImpl(_ source: Int32, _ target: Int32, _: off_t, _: UnsafeMutablePointer<off_t>, _: UnsafeMutablePointer<sf_hdtr>, _: Int32) -> Int32 {
+        var buffer = [UInt8](repeating: 0, count: 1024)
         while true {
         while true {
             let readResult = read(source, &buffer, buffer.count)
             let readResult = read(source, &buffer, buffer.count)
             guard readResult > 0 else {
             guard readResult > 0 else {
@@ -40,7 +40,9 @@ extension Socket {
     
     
     public func writeFile(_ file: File) throws -> Void {
     public func writeFile(_ file: File) throws -> Void {
         var offset: off_t = 0
         var offset: off_t = 0
-        let result = sendfileImpl(fileno(file.pointer), self.socketFileDescriptor, 0, &offset, nil, 0)
+        var sf: sf_hdtr = sf_hdtr()
+        let result = sendfileImpl(fileno(file.pointer), self.socketFileDescriptor, 0, &offset, &sf
+            , 0)
         if result == -1 {
         if result == -1 {
             throw SocketError.writeFailed("sendfile: " + Errno.description())
             throw SocketError.writeFailed("sendfile: " + Errno.description())
         }
         }

+ 2 - 2
Sources/Socket.swift

@@ -27,7 +27,7 @@ public enum SocketError: Error {
     case getSockNameFailed(String)
     case getSockNameFailed(String)
 }
 }
 
 
-public class Socket: Hashable, Equatable {
+open class Socket: Hashable, Equatable {
         
         
     let socketFileDescriptor: Int32
     let socketFileDescriptor: Int32
     private var shutdown = false
     private var shutdown = false
@@ -124,7 +124,7 @@ public class Socket: Hashable, Equatable {
         }
         }
     }
     }
     
     
-    public func read() throws -> UInt8 {
+    open func read() throws -> UInt8 {
         var buffer = [UInt8](repeating: 0, count: 1)
         var buffer = [UInt8](repeating: 0, count: 1)
         let next = recv(self.socketFileDescriptor as Int32, &buffer, Int(buffer.count), 0)
         let next = recv(self.socketFileDescriptor as Int32, &buffer, Int(buffer.count), 0)
         if next <= 0 {
         if next <= 0 {

+ 20 - 20
Sources/WebSockets.swift

@@ -16,13 +16,13 @@ public func websocket(
     _ binary: ((WebSocketSession, [UInt8]) -> Void)?) -> ((HttpRequest) -> HttpResponse) {
     _ binary: ((WebSocketSession, [UInt8]) -> Void)?) -> ((HttpRequest) -> HttpResponse) {
     return { r in
     return { r in
         guard r.hasTokenForHeader("upgrade", token: "websocket") else {
         guard r.hasTokenForHeader("upgrade", token: "websocket") else {
-            return .BadRequest(.Text("Invalid value of 'Upgrade' header: \(r.headers["upgrade"])"))
+            return .badRequest(.text("Invalid value of 'Upgrade' header: \(r.headers["upgrade"])"))
         }
         }
         guard r.hasTokenForHeader("connection", token: "upgrade") else {
         guard r.hasTokenForHeader("connection", token: "upgrade") else {
-            return .BadRequest(.Text("Invalid value of 'Connection' header: \(r.headers["connection"])"))
+            return .badRequest(.text("Invalid value of 'Connection' header: \(r.headers["connection"])"))
         }
         }
         guard let secWebSocketKey = r.headers["sec-websocket-key"] else {
         guard let secWebSocketKey = r.headers["sec-websocket-key"] else {
-            return .BadRequest(.Text("Invalid value of 'Sec-Websocket-Key' header: \(r.headers["sec-websocket-key"])"))
+            return .badRequest(.text("Invalid value of 'Sec-Websocket-Key' header: \(r.headers["sec-websocket-key"])"))
         }
         }
         let protocolSessionClosure: ((Socket) -> Void) = { socket in
         let protocolSessionClosure: ((Socket) -> Void) = { socket in
             let session = WebSocketSession(socket)
             let session = WebSocketSession(socket)
@@ -33,14 +33,14 @@ public func websocket(
                 if let handleText = text {
                 if let handleText = text {
                     if frame.fin {
                     if frame.fin {
                         if payload.count > 0 {
                         if payload.count > 0 {
-                            throw WebSocketSession.WsError.ProtocolError("Continuing fragmented frame cannot have an operation code.")
+                            throw WebSocketSession.WsError.protocolError("Continuing fragmented frame cannot have an operation code.")
                         }
                         }
                         var textFramePayload = frame.payload.map { Int8(bitPattern: $0) }
                         var textFramePayload = frame.payload.map { Int8(bitPattern: $0) }
                         textFramePayload.append(0)
                         textFramePayload.append(0)
                         if let text = String(validatingUTF8: textFramePayload) {
                         if let text = String(validatingUTF8: textFramePayload) {
                             handleText(session, text)
                             handleText(session, text)
                         } else {
                         } else {
-                            throw WebSocketSession.WsError.InvalidUTF8("")
+                            throw WebSocketSession.WsError.invalidUTF8("")
                         }
                         }
                     } else {
                     } else {
                         payload.append(contentsOf: frame.payload)
                         payload.append(contentsOf: frame.payload)
@@ -53,7 +53,7 @@ public func websocket(
                 if let handleBinary = binary {
                 if let handleBinary = binary {
                     if frame.fin {
                     if frame.fin {
                         if payload.count > 0 {
                         if payload.count > 0 {
-                            throw WebSocketSession.WsError.ProtocolError("Continuing fragmented frame cannot have an operation code.")
+                            throw WebSocketSession.WsError.protocolError("Continuing fragmented frame cannot have an operation code.")
                         }
                         }
                         handleBinary(session, frame.payload)
                         handleBinary(session, frame.payload)
                     } else {
                     } else {
@@ -85,10 +85,10 @@ public func websocket(
                 case .binary:
                 case .binary:
                     try handleBinaryPayload(frame)
                     try handleBinaryPayload(frame)
                 case .close:
                 case .close:
-                    throw WebSocketSession.Control.Close
+                    throw WebSocketSession.Control.close
                 case .ping:
                 case .ping:
                     if frame.payload.count > 125 {
                     if frame.payload.count > 125 {
-                        throw WebSocketSession.WsError.ProtocolError("Payload gretter than 125 octets.")
+                        throw WebSocketSession.WsError.protocolError("Payload gretter than 125 octets.")
                     } else {
                     } else {
                         session.writeFrame(ArraySlice(frame.payload), .pong)
                         session.writeFrame(ArraySlice(frame.payload), .pong)
                     }
                     }
@@ -104,16 +104,16 @@ public func websocket(
                 }
                 }
             } catch let error {
             } catch let error {
                 switch error {
                 switch error {
-                case WebSocketSession.Control.Close:
+                case WebSocketSession.Control.close:
                     // Normal close
                     // Normal close
                     break
                     break
-                case WebSocketSession.WsError.UnknownOpCode:
+                case WebSocketSession.WsError.unknownOpCode:
                     print("Unknown Op Code: \(error)")
                     print("Unknown Op Code: \(error)")
-                case WebSocketSession.WsError.UnMaskedFrame:
+                case WebSocketSession.WsError.unMaskedFrame:
                     print("Unmasked frame: \(error)")
                     print("Unmasked frame: \(error)")
-                case WebSocketSession.WsError.InvalidUTF8:
+                case WebSocketSession.WsError.invalidUTF8:
                     print("Invalid UTF8 character: \(error)")
                     print("Invalid UTF8 character: \(error)")
-                case WebSocketSession.WsError.ProtocolError:
+                case WebSocketSession.WsError.protocolError:
                     print("Protocol error: \(error)")
                     print("Protocol error: \(error)")
                 default:
                 default:
                     print("Unkown error \(error)")
                     print("Unkown error \(error)")
@@ -124,15 +124,15 @@ public func websocket(
         }
         }
         let secWebSocketAccept = String.toBase64((secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1())
         let secWebSocketAccept = String.toBase64((secWebSocketKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11").sha1())
         let headers = [ "Upgrade": "WebSocket", "Connection": "Upgrade", "Sec-WebSocket-Accept": secWebSocketAccept]
         let headers = [ "Upgrade": "WebSocket", "Connection": "Upgrade", "Sec-WebSocket-Accept": secWebSocketAccept]
-        return HttpResponse.SwitchProtocols(headers, protocolSessionClosure)
+        return HttpResponse.switchProtocols(headers, protocolSessionClosure)
     }
     }
 }
 }
 
 
 public class WebSocketSession: Hashable, Equatable  {
 public class WebSocketSession: Hashable, Equatable  {
     
     
-    public enum WsError: Error { case UnknownOpCode(String), UnMaskedFrame(String), ProtocolError(String), InvalidUTF8(String) }
+    public enum WsError: Error { case unknownOpCode(String), unMaskedFrame(String), protocolError(String), invalidUTF8(String) }
     public enum OpCode: UInt8 { case `continue` = 0x00, close = 0x08, ping = 0x09, pong = 0x0A, text = 0x01, binary = 0x02 }
     public enum OpCode: UInt8 { case `continue` = 0x00, close = 0x08, ping = 0x09, pong = 0x0A, text = 0x01, binary = 0x02 }
-    public enum Control: Error { case Close }
+    public enum Control: Error { case close }
     
     
     public class Frame {
     public class Frame {
         public var opcode = OpCode.close
         public var opcode = OpCode.close
@@ -215,20 +215,20 @@ public class WebSocketSession: Hashable, Equatable  {
         frm.rsv3 = fst & 0x10
         frm.rsv3 = fst & 0x10
         guard frm.rsv1 == 0 && frm.rsv2 == 0 && frm.rsv3 == 0
         guard frm.rsv1 == 0 && frm.rsv2 == 0 && frm.rsv3 == 0
             else {
             else {
-            throw WsError.ProtocolError("Reserved frame bit has not been negocitated.")
+            throw WsError.protocolError("Reserved frame bit has not been negocitated.")
         }
         }
         let opc = fst & 0x0F
         let opc = fst & 0x0F
         guard let opcode = OpCode(rawValue: opc) else {
         guard let opcode = OpCode(rawValue: opc) else {
             // "If an unknown opcode is received, the receiving endpoint MUST _Fail the WebSocket Connection_."
             // "If an unknown opcode is received, the receiving endpoint MUST _Fail the WebSocket Connection_."
             // http://tools.ietf.org/html/rfc6455#section-5.2 ( Page 29 )
             // http://tools.ietf.org/html/rfc6455#section-5.2 ( Page 29 )
-            throw WsError.UnknownOpCode("\(opc)")
+            throw WsError.unknownOpCode("\(opc)")
         }
         }
         if frm.fin == false {
         if frm.fin == false {
             switch opcode {
             switch opcode {
             case .ping, .pong, .close:
             case .ping, .pong, .close:
                 // Control frames must not be fragmented
                 // Control frames must not be fragmented
                 // https://tools.ietf.org/html/rfc6455#section-5.5 ( Page 35 )
                 // https://tools.ietf.org/html/rfc6455#section-5.5 ( Page 35 )
-                throw WsError.ProtocolError("Control frames must not be framgemted.")
+                throw WsError.protocolError("Control frames must not be fragmented.")
             default:
             default:
                 break
                 break
             }
             }
@@ -239,7 +239,7 @@ public class WebSocketSession: Hashable, Equatable  {
         guard msk else {
         guard msk else {
             // "...a client MUST mask all frames that it sends to the server."
             // "...a client MUST mask all frames that it sends to the server."
             // http://tools.ietf.org/html/rfc6455#section-5.1
             // http://tools.ietf.org/html/rfc6455#section-5.1
-            throw WsError.UnMaskedFrame("A client must mask all frames that it sends to the server.")
+            throw WsError.unMaskedFrame("A client must mask all frames that it sends to the server.")
         }
         }
         var len = UInt64(sec & 0x7F)
         var len = UInt64(sec & 0x7F)
         if len == 0x7E {
         if len == 0x7E {

+ 1 - 1
XCode/SwifterSampleOSX/main.swift

@@ -10,7 +10,7 @@ import Swifter
 do {
 do {
     let server = demoServer(try File.currentWorkingDirectory())
     let server = demoServer(try File.currentWorkingDirectory())
     server["/testAfterBaseRoute"] = { request in
     server["/testAfterBaseRoute"] = { request in
-        return .OK(.Html("ok !"))
+        return .ok(.html("ok !"))
     }
     }
     
     
     if #available(OSXApplicationExtension 10.10, *) {
     if #available(OSXApplicationExtension 10.10, *) {

+ 2 - 3
XCode/SwifterSampleiOS/AppDelegate.swift

@@ -12,8 +12,7 @@ import Swifter
 class AppDelegate: UIResponder, UIApplicationDelegate {
 class AppDelegate: UIResponder, UIApplicationDelegate {
     
     
     var window: UIWindow?
     var window: UIWindow?
-    
-    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
+    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
         return true
         return true
     }
     }
-}
+}

+ 1 - 1
XCode/SwifterSampleiOS/ViewController.swift

@@ -14,7 +14,7 @@ class ViewController: UIViewController {
     override func viewDidLoad() {
     override func viewDidLoad() {
         super.viewDidLoad()
         super.viewDidLoad()
         do {
         do {
-            let server = demoServer(NSBundle.mainBundle().resourcePath!)
+            let server = demoServer(Bundle.main.resourcePath!)
             try server.start(9080)
             try server.start(9080)
             self.server = server
             self.server = server
         } catch {
         } catch {

+ 12 - 7
XCode/SwifterTestsCommon/IOSafetyTests.swift

@@ -7,6 +7,7 @@
 //
 //
 
 
 import XCTest
 import XCTest
+import Swifter
 
 
 class IOSafetyTests: XCTestCase {
 class IOSafetyTests: XCTestCase {
     var server: HttpServer!
     var server: HttpServer!
@@ -24,16 +25,20 @@ class IOSafetyTests: XCTestCase {
     }
     }
 
 
     func testStopWithActiveConnections() {
     func testStopWithActiveConnections() {
-        (0...100).forEach { _ in
+        (0...100).forEach { cpt in
             server = HttpServer.pingServer()
             server = HttpServer.pingServer()
-            try! server.start()
-            XCTAssertFalse(URLSession.shared.retryPing())
-            (0...100).forEach { _ in
-                DispatchQueue.global(qos: DispatchQoS.default.qosClass).sync {
-                    URLSession.shared.pingTask { _, _, _ in }.resume()
+            do {
+                try server.start()
+                XCTAssertFalse(URLSession.shared.retryPing())
+                (0...100).forEach { _ in
+                    DispatchQueue.global(qos: DispatchQoS.default.qosClass).sync {
+                        URLSession.shared.pingTask { _, _, _ in }.resume()
+                    }
                 }
                 }
+                server.stop()
+            } catch let e {
+                XCTFail("\(cpt): \(e)")
             }
             }
-            server.stop()
         }
         }
     }
     }
 }
 }

+ 6 - 6
XCode/SwifterTestsCommon/PingServer.swift

@@ -14,25 +14,25 @@ extension HttpServer {
     class func pingServer() -> HttpServer {
     class func pingServer() -> HttpServer {
         let server = HttpServer()
         let server = HttpServer()
         server.GET["/ping"] = { request in
         server.GET["/ping"] = { request in
-            return HttpResponse.OK(.Text("pong!"))
+            return HttpResponse.ok(.text("pong!"))
         }
         }
         return server
         return server
     }
     }
 }
 }
 
 
-let defaultLocalhost = NSURL(string:"http://localhost:8080")!
+let defaultLocalhost = URL(string:"http://localhost:8080")!
 
 
 // Client
 // Client
 extension URLSession {
 extension URLSession {
     func pingTask(
     func pingTask(
-        hostURL: NSURL = defaultLocalhost,
+        hostURL: URL = defaultLocalhost,
         completionHandler handler: @escaping (Data?, URLResponse?, Error?) -> Void
         completionHandler handler: @escaping (Data?, URLResponse?, Error?) -> Void
     ) -> URLSessionDataTask {
     ) -> URLSessionDataTask {
-        return self.dataTask(with: hostURL.appendingPathComponent("/ping")!, completionHandler: handler)
+        return self.dataTask(with: hostURL.appendingPathComponent("/ping"), completionHandler: handler)
     }
     }
     
     
     func retryPing(
     func retryPing(
-        hostURL: NSURL = defaultLocalhost,
+        hostURL: URL = defaultLocalhost,
         timeout: Double = 2.0
         timeout: Double = 2.0
     ) -> Bool {
     ) -> Bool {
         let semaphore = DispatchSemaphore(value: 0)
         let semaphore = DispatchSemaphore(value: 0)
@@ -52,7 +52,7 @@ extension URLSession {
         return timedOut
         return timedOut
     }
     }
     
     
-    func signalIfPongReceived(_ semaphore: DispatchSemaphore, hostURL: NSURL) {
+    func signalIfPongReceived(_ semaphore: DispatchSemaphore, hostURL: URL) {
         pingTask(hostURL: hostURL) { data, response, error in
         pingTask(hostURL: hostURL) { data, response, error in
             if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
             if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
                 semaphore.signal()
                 semaphore.signal()

+ 1 - 0
XCode/SwifterTestsCommon/SwifterTestsHttpParser.swift

@@ -6,6 +6,7 @@
 //
 //
 
 
 import XCTest
 import XCTest
+import Swifter
 
 
 class SwifterTestsHttpParser: XCTestCase {
 class SwifterTestsHttpParser: XCTestCase {
     
     

+ 8 - 7
XCode/SwifterTestsCommon/SwifterTestsHttpRouter.swift

@@ -7,6 +7,7 @@
 //
 //
 
 
 import XCTest
 import XCTest
+import Swifter
 
 
 class SwifterTestsHttpRouter: XCTestCase {
 class SwifterTestsHttpRouter: XCTestCase {
     
     
@@ -15,7 +16,7 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/", handler: { r in
         router.register(nil, path: "/", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         XCTAssertNotNil(router.route(nil, path: "/"))
         XCTAssertNotNil(router.route(nil, path: "/"))
@@ -26,7 +27,7 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/a/b/c/d", handler: { r in
         router.register(nil, path: "/a/b/c/d", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         XCTAssertNil(router.route(nil, path: "/"))
         XCTAssertNil(router.route(nil, path: "/"))
@@ -41,7 +42,7 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/a/*/c/d", handler: { r in
         router.register(nil, path: "/a/*/c/d", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         XCTAssertNil(router.route(nil, path: "/"))
         XCTAssertNil(router.route(nil, path: "/"))
@@ -57,7 +58,7 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/a/:arg1/:arg2/b/c/d/:arg3", handler: { r in
         router.register(nil, path: "/a/:arg1/:arg2/b/c/d/:arg3", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         XCTAssertNil(router.route(nil, path: "/"))
         XCTAssertNil(router.route(nil, path: "/"))
@@ -73,7 +74,7 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/a/**/e/f/g", handler: { r in
         router.register(nil, path: "/a/**/e/f/g", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         XCTAssertNil(router.route(nil, path: "/"))
         XCTAssertNil(router.route(nil, path: "/"))
@@ -87,11 +88,11 @@ class SwifterTestsHttpRouter: XCTestCase {
         let router = HttpRouter()
         let router = HttpRouter()
         
         
         router.register(nil, path: "/a/b/", handler: { r in
         router.register(nil, path: "/a/b/", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         router.register(nil, path: "/a/b/:var", handler: { r in
         router.register(nil, path: "/a/b/:var", handler: { r in
-            return .OK(.Html("OK"))
+            return .ok(.html("OK"))
         })
         })
         
         
         
         

+ 9 - 8
XCode/SwifterTestsCommon/SwifterTestsWebSocketSession.swift

@@ -6,6 +6,7 @@
 //
 //
 
 
 import XCTest
 import XCTest
+import Swifter
 
 
 class SwifterTestsWebSocketSession: XCTestCase {
 class SwifterTestsWebSocketSession: XCTestCase {
     
     
@@ -42,7 +43,7 @@ class SwifterTestsWebSocketSession: XCTestCase {
             let session = WebSocketSession(TestSocket([0b0000_0001, 0b0000_0000, 0, 0, 0, 0]))
             let session = WebSocketSession(TestSocket([0b0000_0001, 0b0000_0000, 0, 0, 0, 0]))
             let _ = try session.readFrame()
             let _ = try session.readFrame()
             XCTAssert(false, "Parser should not accept unmasked frames.")
             XCTAssert(false, "Parser should not accept unmasked frames.")
-        } catch WebSocketSession.WsError.UnMaskedFrame {
+        } catch WebSocketSession.WsError.unMaskedFrame {
             XCTAssert(true, "Parse should throw UnMaskedFrame error for unmasked message.")
             XCTAssert(true, "Parse should throw UnMaskedFrame error for unmasked message.")
         } catch {
         } catch {
             XCTAssert(false, "Parse should throw UnMaskedFrame error for unmasked message.")
             XCTAssert(false, "Parse should throw UnMaskedFrame error for unmasked message.")
@@ -84,24 +85,24 @@ class SwifterTestsWebSocketSession: XCTestCase {
             let session = WebSocketSession(TestSocket([0b0000_1000, 0b1000_0000, 0, 0, 0, 0]))
             let session = WebSocketSession(TestSocket([0b0000_1000, 0b1000_0000, 0, 0, 0, 0]))
             let frame = try session.readFrame()
             let frame = try session.readFrame()
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.close, "Parser should accept Close opcode.")
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.close, "Parser should accept Close opcode.")
-        } catch {
-            XCTAssert(false, "Parser should accept Close opcode without any errors.")
+        } catch let e {
+            XCTAssert(false, "Parser should accept Close opcode without any errors. \(e)")
         }
         }
         
         
         do {
         do {
             let session = WebSocketSession(TestSocket([0b0000_1001, 0b1000_0000, 0, 0, 0, 0]))
             let session = WebSocketSession(TestSocket([0b0000_1001, 0b1000_0000, 0, 0, 0, 0]))
             let frame = try session.readFrame()
             let frame = try session.readFrame()
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.ping, "Parser should accept Ping opcode.")
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.ping, "Parser should accept Ping opcode.")
-        } catch {
-            XCTAssert(false, "Parser should accept Ping opcode without any errors.")
+        } catch let e {
+            XCTAssert(false, "Parser should accept Ping opcode without any errors. \(e)")
         }
         }
         
         
         do {
         do {
             let session = WebSocketSession(TestSocket([0b0000_1010, 0b1000_0000, 0, 0, 0, 0]))
             let session = WebSocketSession(TestSocket([0b0000_1010, 0b1000_0000, 0, 0, 0, 0]))
             let frame = try session.readFrame()
             let frame = try session.readFrame()
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.pong, "Parser should accept Pong opcode.")
             XCTAssertEqual(frame.opcode, WebSocketSession.OpCode.pong, "Parser should accept Pong opcode.")
-        } catch {
-            XCTAssert(false, "Parser should accept Pong opcode without any errors.")
+        } catch let e {
+            XCTAssert(false, "Parser should accept Pong opcode without any errors. \(e)")
         }
         }
         
         
         for opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
         for opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
@@ -109,7 +110,7 @@ class SwifterTestsWebSocketSession: XCTestCase {
                 let session = WebSocketSession(TestSocket([UInt8(opcode), 0b1000_0000, 0, 0, 0, 0]))
                 let session = WebSocketSession(TestSocket([UInt8(opcode), 0b1000_0000, 0, 0, 0, 0]))
                 let _ = try session.readFrame()
                 let _ = try session.readFrame()
                 XCTAssert(false, "Parse should throw an error for unknown opcode: \(opcode)")
                 XCTAssert(false, "Parse should throw an error for unknown opcode: \(opcode)")
-            } catch WebSocketSession.WsError.UnknownOpCode(_) {
+            } catch WebSocketSession.WsError.unknownOpCode(_) {
                 XCTAssert(true, "Parse should throw UnknownOpCode error for unknown opcode.")
                 XCTAssert(true, "Parse should throw UnknownOpCode error for unknown opcode.")
             } catch {
             } catch {
                 XCTAssert(false, "Parse should throw UnknownOpCode error for unknown opcode (was \(error)).")
                 XCTAssert(false, "Parse should throw UnknownOpCode error for unknown opcode (was \(error)).")