From e17e93806cfe5b87499a699a304a79af0823baa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 15:27:46 +0900 Subject: [PATCH 01/17] modify .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 52c62f0..7fb530a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /.build /Packages /*.xcodeproj -Sources/Prorsum/main.swift +Package.resolved From 344a8ade599db7de4dffa1f3c6d62dc1173642ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 15:32:54 +0900 Subject: [PATCH 02/17] modify deinitialize and deallocate --- Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift b/Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift index 9fdf5a1..7d8569e 100644 --- a/Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift +++ b/Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift @@ -45,8 +45,8 @@ extension Data { let valuePointer = UnsafeMutablePointer.allocate(capacity: 1) valuePointer.pointee = number defer { - valuePointer.deinitialize() - valuePointer.deallocate(capacity: 1) + valuePointer.deinitialize(count: 1) + valuePointer.deallocate() } var bytes = [UInt8](repeating: 0, count: totalBytes) From edb822b8f380479ef283331df1d914408116de81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 15:37:36 +0900 Subject: [PATCH 03/17] change dependency package (ProsumNet) --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 83d578e..cc662af 100644 --- a/Package.swift +++ b/Package.swift @@ -9,7 +9,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/Zewo/CHTTPParser.git", .exact("0.14.0")), - .package(url: "https://github.com/noppoman/ProrsumNet.git", .upToNextMajor(from: "0.1.2")) + .package(url: "https://github.com/tuken/ProrsumNet.git", .branch("re-recv")) ], targets: [ .target(name: "Prorsum", dependencies: ["CHTTPParser", "ProrsumNet"]), From b674f62749eac25a92961e34d9436ffa65377993 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 21:23:40 +0900 Subject: [PATCH 04/17] no message --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7fb530a..1d4127c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ +Package.resolved .DS_Store /.build /Packages /*.xcodeproj -Package.resolved From e596f00043c509bc2ffbdc24b79a9bbc19d8e20f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 21:29:51 +0900 Subject: [PATCH 05/17] change Package.swift --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index cc662af..22f8f52 100644 --- a/Package.swift +++ b/Package.swift @@ -9,7 +9,7 @@ let package = Package( ], dependencies: [ .package(url: "https://github.com/Zewo/CHTTPParser.git", .exact("0.14.0")), - .package(url: "https://github.com/tuken/ProrsumNet.git", .branch("re-recv")) + .package(url: "https://github.com/tuken/ProrsumNet.git", from: "0.2.0"), ], targets: [ .target(name: "Prorsum", dependencies: ["CHTTPParser", "ProrsumNet"]), From 18d68c226366474405220467a4c7409af068f262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 21:41:45 +0900 Subject: [PATCH 06/17] no message --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1d4127c..7fb530a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -Package.resolved .DS_Store /.build /Packages /*.xcodeproj +Package.resolved From 56e0f37bacc7dd8ae10875132d79d2a28df394de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 4 Jun 2019 21:44:47 +0900 Subject: [PATCH 07/17] =?UTF-8?q?Package.resolved=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Package.resolved | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 Package.resolved diff --git a/Package.resolved b/Package.resolved deleted file mode 100644 index 7046498..0000000 --- a/Package.resolved +++ /dev/null @@ -1,34 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "CHTTPParser", - "repositoryURL": "https://github.com/Zewo/CHTTPParser.git", - "state": { - "branch": null, - "revision": "88306ab33bb316b2eedd39c90f4be8f4ebf65a11", - "version": "0.14.0" - } - }, - { - "package": "CLibreSSL", - "repositoryURL": "https://github.com/vapor/clibressl.git", - "state": { - "branch": null, - "revision": "23ddb296981d17a8ee6c7418742a40cad5d2f9d0", - "version": "1.0.0" - } - }, - { - "package": "ProrsumNet", - "repositoryURL": "https://github.com/noppoman/ProrsumNet.git", - "state": { - "branch": null, - "revision": "941e0c65df620467130e9eb2496a3c1275c1d307", - "version": "0.1.3" - } - } - ] - }, - "version": 1 -} From d74797c331937ea589d759c020f80b607a4dc839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:08:01 +0900 Subject: [PATCH 08/17] correspond to swift5.0 --- Package.swift | 6 +++--- Package@swift-4.0.swift | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 Package@swift-4.0.swift diff --git a/Package.swift b/Package.swift index 22f8f52..649525c 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:4.0 +// swift-tools-version:5.0 import PackageDescription let package = Package( @@ -8,8 +8,8 @@ let package = Package( .library(name: "Prorsum", targets: ["Prorsum"]) ], dependencies: [ - .package(url: "https://github.com/Zewo/CHTTPParser.git", .exact("0.14.0")), - .package(url: "https://github.com/tuken/ProrsumNet.git", from: "0.2.0"), + .package(url: "https://github.com/tuken/CHTTPParser.git", from: "0.15.0"), + .package(url: "https://github.com/tuken/ProrsumNet.git", from: "0.3.0"), ], targets: [ .target(name: "Prorsum", dependencies: ["CHTTPParser", "ProrsumNet"]), diff --git a/Package@swift-4.0.swift b/Package@swift-4.0.swift new file mode 100644 index 0000000..22f8f52 --- /dev/null +++ b/Package@swift-4.0.swift @@ -0,0 +1,19 @@ +// swift-tools-version:4.0 +import PackageDescription + +let package = Package( + name: "Prorsum", + products: [ + .executable(name: "prorsum-performance", targets: ["Performance"]), + .library(name: "Prorsum", targets: ["Prorsum"]) + ], + dependencies: [ + .package(url: "https://github.com/Zewo/CHTTPParser.git", .exact("0.14.0")), + .package(url: "https://github.com/tuken/ProrsumNet.git", from: "0.2.0"), + ], + targets: [ + .target(name: "Prorsum", dependencies: ["CHTTPParser", "ProrsumNet"]), + .target(name: "Performance", dependencies: ["Prorsum"]), + .testTarget(name: "ProrsumTests", dependencies: ["Prorsum"]) + ] +) From cf3262a343fe406c7bd187d3d9f82e7666b1c6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:10:17 +0900 Subject: [PATCH 09/17] fix related-string --- Sources/Performance/HTTPServer.swift | 2 +- Sources/Prorsum/HTTP/MediaType/MediaType.swift | 6 +++--- Sources/Prorsum/HTTP/Message/AttributedCookie.swift | 8 ++++---- Sources/Prorsum/HTTP/Message/Cookie.swift | 2 +- Sources/Prorsum/HTTP/Message/Request.swift | 2 +- Sources/Prorsum/HTTP/Serializer/BodyStream.swift | 6 +++--- .../Prorsum/HTTP/Serializer/RequestSerializer.swift | 12 ++++++------ .../Prorsum/HTTP/Serializer/ResponseSerializer.swift | 10 +++++----- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Sources/Performance/HTTPServer.swift b/Sources/Performance/HTTPServer.swift index 4526627..4e6a480 100644 --- a/Sources/Performance/HTTPServer.swift +++ b/Sources/Performance/HTTPServer.swift @@ -15,7 +15,7 @@ func httpServerTest(){ do { let response = Response( headers: ["Server": "Prorsum Micro HTTP Server"], - body: .buffer("hello".data) + body: .buffer("hello".data(using: .utf8)!) ) try writer.serialize(response) diff --git a/Sources/Prorsum/HTTP/MediaType/MediaType.swift b/Sources/Prorsum/HTTP/MediaType/MediaType.swift index 8b1208d..7d732e2 100644 --- a/Sources/Prorsum/HTTP/MediaType/MediaType.swift +++ b/Sources/Prorsum/HTTP/MediaType/MediaType.swift @@ -52,14 +52,14 @@ public struct MediaType : CustomStringConvertible { var parameters: [String: String] = [:] if mediaTypeTokens.count == 2 { - let parametersTokens = mediaTypeTokens[1].trim().split(separator: " ") + let parametersTokens = mediaTypeTokens[1].trimmingCharacters(in: .whitespacesAndNewlines).split(separator: " ") for parametersToken in parametersTokens { let parameterTokens = parametersToken.split(separator: "=") if parameterTokens.count == 2 { - let key = parameterTokens[0] - let value = parameterTokens[1] + let key = String(parameterTokens[0]) + let value = String(parameterTokens[1]) parameters[key] = value } } diff --git a/Sources/Prorsum/HTTP/Message/AttributedCookie.swift b/Sources/Prorsum/HTTP/Message/AttributedCookie.swift index f4f4d0f..63fa073 100644 --- a/Sources/Prorsum/HTTP/Message/AttributedCookie.swift +++ b/Sources/Prorsum/HTTP/Message/AttributedCookie.swift @@ -52,8 +52,8 @@ public struct AttributedCookie { return nil } - let name = cookieTokens[0] - let value = cookieTokens[1] + let name = String(cookieTokens[0]) + let value = String(cookieTokens[1]) var attributes: [CaseInsensitiveString: String] = [:] @@ -62,9 +62,9 @@ public struct AttributedCookie { switch attributeTokens.count { case 1: - attributes[CaseInsensitiveString(attributeTokens[0].trim())] = "" + attributes[CaseInsensitiveString(attributeTokens[0].trimmingCharacters(in: .whitespacesAndNewlines))] = "" case 2: - attributes[CaseInsensitiveString(attributeTokens[0].trim())] = attributeTokens[1].trim() + attributes[CaseInsensitiveString(attributeTokens[0].trimmingCharacters(in: .whitespacesAndNewlines))] = attributeTokens[1].trimmingCharacters(in: .whitespacesAndNewlines) default: return nil } diff --git a/Sources/Prorsum/HTTP/Message/Cookie.swift b/Sources/Prorsum/HTTP/Message/Cookie.swift index c25e22c..8b5c81f 100644 --- a/Sources/Prorsum/HTTP/Message/Cookie.swift +++ b/Sources/Prorsum/HTTP/Message/Cookie.swift @@ -64,7 +64,7 @@ extension Set where Element : CookieProtocol { return nil } - cookies.insert(Element(name: cookieTokens[0].trim(), value: cookieTokens[1].trim())) + cookies.insert(Element(name: cookieTokens[0].trimmingCharacters(in: .whitespacesAndNewlines), value: cookieTokens[1].trimmingCharacters(in: .whitespacesAndNewlines))) } self = cookies diff --git a/Sources/Prorsum/HTTP/Message/Request.swift b/Sources/Prorsum/HTTP/Message/Request.swift index 3d27f3b..ff0bdd9 100644 --- a/Sources/Prorsum/HTTP/Message/Request.swift +++ b/Sources/Prorsum/HTTP/Message/Request.swift @@ -182,7 +182,7 @@ extension Request { let acceptedTypeTokens = acceptedTypeString.split(separator: ";") if acceptedTypeTokens.count >= 1 { - let mediaTypeString = acceptedTypeTokens[0].trim() + let mediaTypeString = acceptedTypeTokens[0].trimmingCharacters(in: .whitespacesAndNewlines) if let acceptedMediaType = try? MediaType(string: mediaTypeString) { acceptedMediaTypes.append(acceptedMediaType) } diff --git a/Sources/Prorsum/HTTP/Serializer/BodyStream.swift b/Sources/Prorsum/HTTP/Serializer/BodyStream.swift index bbf37aa..b49c205 100644 --- a/Sources/Prorsum/HTTP/Serializer/BodyStream.swift +++ b/Sources/Prorsum/HTTP/Serializer/BodyStream.swift @@ -41,9 +41,9 @@ final class BodyStream : DuplexStream { throw StreamError.alreadyClosed } - try transport.write(String(bytes.count, radix: 16).bytes, deadline: deadline) - try transport.write("\r\n".bytes, deadline: deadline) + try transport.write(Array(String(bytes.count, radix: 16).utf8), deadline: deadline) + try transport.write(Array("\r\n".utf8), deadline: deadline) try transport.write(bytes, deadline: deadline) - try transport.write("\r\n".bytes, deadline: deadline) + try transport.write(Array("\r\n".utf8), deadline: deadline) } } diff --git a/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift b/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift index 3faafd8..a9013a9 100644 --- a/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift +++ b/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift @@ -35,11 +35,11 @@ public struct RequestSerializer { requestURI = request.url.absoluteString } - try stream.write("\(method) \(requestURI) HTTP/\(request.version.major).\(request.version.minor)".bytes, deadline: deadline) + try stream.write(Array("\(method) \(requestURI) HTTP/\(request.version.major).\(request.version.minor)".utf8), deadline: deadline) try stream.write(newLine, deadline: deadline) for (name, value) in request.headers.headers { - try stream.write("\(name): \(value)".bytes, deadline: deadline) + try stream.write(Array("\(name): \(value)".utf8), deadline: deadline) try stream.write(newLine, deadline: deadline) } @@ -47,7 +47,7 @@ public struct RequestSerializer { switch request.body { case .buffer(let buffer): - try stream.write(buffer.bytes, deadline: deadline) + try stream.write(buffer.withUnsafeBytes { [UInt8]($0) }, deadline: deadline) case .reader(let reader): while !reader.isClosed { let buffer = try reader.read(upTo: bufferSize, deadline: deadline) @@ -55,20 +55,20 @@ public struct RequestSerializer { break } - try stream.write(String(buffer.count, radix: 16).bytes, deadline: deadline) + try stream.write(Array(String(buffer.count, radix: 16).utf8), deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(buffer, deadline: deadline) try stream.write(newLine, deadline: deadline) } - try stream.write("0".bytes, deadline: deadline) + try stream.write(Array("0".utf8), deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(newLine, deadline: deadline) case .writer(let writer): let body = BodyStream(stream) try writer(body) - try stream.write("0".bytes, deadline: deadline) + try stream.write(Array("0".utf8), deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(newLine, deadline: deadline) } diff --git a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift index 74952a5..d565a93 100644 --- a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift +++ b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift @@ -54,17 +54,17 @@ public struct ResponseSerializer { break } - try stream.write(String(bytes.count, radix: 16).bytes, deadline: deadline) - try stream.write("\r\n".bytes, deadline: deadline) + try stream.write(Array(String(bytes.count, radix: 16).utf8), deadline: deadline) + try stream.write(Array("\r\n".utf8), deadline: deadline) try stream.write(bytes, deadline: deadline) - try stream.write("\r\n".bytes, deadline: deadline) + try stream.write(Array("\r\n".utf8), deadline: deadline) } - try stream.write("0\r\n\r\n".bytes, deadline: deadline) + try stream.write(Array("0\r\n\r\n".utf8), deadline: deadline) case .writer(let writer): let body = BodyStream(stream) try writer(body) - try stream.write("0\r\n\r\n".bytes, deadline: deadline) + try stream.write(Array("0\r\n\r\n".utf8), deadline: deadline) } } } From 3853baa52cd75ee5c8634f3fff86af910291f408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:10:43 +0900 Subject: [PATCH 10/17] fix related-data --- Sources/Prorsum/HTTP/Message/Body.swift | 2 +- Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift | 4 ++-- Sources/Prorsum/WebSocket/Frame.swift | 8 ++++++-- Sources/Prorsum/WebSocket/WebSocket.swift | 4 ++-- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Sources/Prorsum/HTTP/Message/Body.swift b/Sources/Prorsum/HTTP/Message/Body.swift index bc1d07b..180e83a 100644 --- a/Sources/Prorsum/HTTP/Message/Body.swift +++ b/Sources/Prorsum/HTTP/Message/Body.swift @@ -16,7 +16,7 @@ public enum Body { extension Body { public static var empty: Body { - return .buffer(.empty) + return .buffer(Data()) } public var isEmpty: Bool { diff --git a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift index d565a93..5015c80 100644 --- a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift +++ b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift @@ -41,11 +41,11 @@ public struct ResponseSerializer { header += "\r\n" - try stream.write(header.bytes, deadline: deadline) + try stream.write(Array(header.utf8), deadline: deadline) switch response.body { case .buffer(let buffer): - try stream.write(buffer.bytes, deadline: deadline) + try stream.write(buffer.withUnsafeBytes { [UInt8]($0) }, deadline: deadline) case .reader(let reader): while !reader.isClosed { let bytes = try reader.read(upTo: bufferSize, deadline: deadline) diff --git a/Sources/Prorsum/WebSocket/Frame.swift b/Sources/Prorsum/WebSocket/Frame.swift index 092062e..bacb236 100644 --- a/Sources/Prorsum/WebSocket/Frame.swift +++ b/Sources/Prorsum/WebSocket/Frame.swift @@ -170,8 +170,12 @@ struct Frame { let data = data.data let maskKey = maskKey.data - let op = (1 << 7) | (0 << 6) | (0 << 5) | (0 << 4) | opCode.rawValue - self.data.append(op) + let op7 = 1 << 7 + let op6 = 0 << 6 + let op5 = 0 << 5 + let op4 = 0 << 4 + var op = op7 | op6 | op5 | op4 | Int(opCode.rawValue) + self.data.append([UInt8](Data(bytes: &op, count: MemoryLayout.size))) let masked: Bool = maskKey.count == 4 let mask: UInt8 = masked ? 1 : 0 diff --git a/Sources/Prorsum/WebSocket/WebSocket.swift b/Sources/Prorsum/WebSocket/WebSocket.swift index 530156c..afd5584 100644 --- a/Sources/Prorsum/WebSocket/WebSocket.swift +++ b/Sources/Prorsum/WebSocket/WebSocket.swift @@ -356,13 +356,13 @@ public final class WebSocket { let frame = Frame(opCode: opCode, data: data, maskKey: maskKey) let data = frame.data - try stream.write(data.bytes, deadline: 5) + try stream.write(data.withUnsafeBytes { [UInt8]($0) }, deadline: 5) } public static func accept(_ key: String) -> String? { let hashed = sha1(Array((key + GUID).utf8)) - let encoded = Data(bytes: hashed).base64EncodedString(options: []) + let encoded = Data(hashed).base64EncodedString(options: []) return encoded } From c5b438cda40b5aa1e45a12ab415083997451e36f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:18:52 +0900 Subject: [PATCH 11/17] change travis.xml to xenial and xcode10.3 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index c8c08f9..9c26e62 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ os: - osx language: generic sudo: required -dist: trusty -osx_image: xcode9 +dist: xenial +osx_image: xcode10.3 install: - source Scripts/install-swift.sh From 0ed163dfd06f63066640ef00d1eda4f0d8366a97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:30:11 +0900 Subject: [PATCH 12/17] fix String.data in HTTPServerTests --- Tests/ProrsumTests/HTTPServerTests.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/ProrsumTests/HTTPServerTests.swift b/Tests/ProrsumTests/HTTPServerTests.swift index 2bb7796..2734d2c 100644 --- a/Tests/ProrsumTests/HTTPServerTests.swift +++ b/Tests/ProrsumTests/HTTPServerTests.swift @@ -25,7 +25,7 @@ class HTTPServerTests: XCTestCase { func testHTTPConnect() { let server = try! HTTPServer { request, writer in - let response = Response(body: "Hello!".data) + let response = Response(body: "Hello!".data(using: .utf8)!) try! writer.serialize(response) writer.close() From 5376b1417fb73fd4fa9e62c34cc3308c80041b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Tue, 10 Sep 2019 17:30:52 +0900 Subject: [PATCH 13/17] change swift version and ubuntu version in install-swift.sh --- Scripts/install-swift.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Scripts/install-swift.sh b/Scripts/install-swift.sh index 7546ada..37e15b5 100755 --- a/Scripts/install-swift.sh +++ b/Scripts/install-swift.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -VERSION="4.0" +VERSION="5.0.3" # Determine OS UNAME=`uname`; @@ -11,9 +11,9 @@ else if [[ $UNAME == "Linux" ]]; then UBUNTU_RELEASE=`lsb_release -a 2>/dev/null`; - if [[ $UBUNTU_RELEASE == *"15.10"* ]]; + if [[ $UBUNTU_RELEASE == *"16.04"* ]]; then - OS="ubuntu1510"; + OS="ubuntu1604"; else OS="ubuntu1404"; fi @@ -24,9 +24,9 @@ if [[ $OS != "macos" ]]; then sudo apt-get install -y clang libicu-dev uuid-dev - if [[ $OS == "ubuntu1510" ]]; + if [[ $OS == "ubuntu1604" ]]; then - SWIFTFILE="swift-$VERSION-RELEASE-ubuntu15.10"; + SWIFTFILE="swift-$VERSION-RELEASE-ubuntu16.04"; else SWIFTFILE="swift-$VERSION-RELEASE-ubuntu14.04"; fi From b4f4fb459e93bbc1642532d97476da64e654ecc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Wed, 11 Sep 2019 13:45:48 +0900 Subject: [PATCH 14/17] revert several parts of string/data-extension --- Sources/Performance/HTTPServer.swift | 2 +- Sources/Prorsum/HTTP/Message/Body.swift | 2 +- Sources/Prorsum/HTTP/Serializer/BodyStream.swift | 6 +++--- .../Prorsum/HTTP/Serializer/RequestSerializer.swift | 13 +++++++------ .../HTTP/Serializer/ResponseSerializer.swift | 10 +++++----- Tests/ProrsumTests/HTTPServerTests.swift | 2 +- 6 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Sources/Performance/HTTPServer.swift b/Sources/Performance/HTTPServer.swift index 4e6a480..4526627 100644 --- a/Sources/Performance/HTTPServer.swift +++ b/Sources/Performance/HTTPServer.swift @@ -15,7 +15,7 @@ func httpServerTest(){ do { let response = Response( headers: ["Server": "Prorsum Micro HTTP Server"], - body: .buffer("hello".data(using: .utf8)!) + body: .buffer("hello".data) ) try writer.serialize(response) diff --git a/Sources/Prorsum/HTTP/Message/Body.swift b/Sources/Prorsum/HTTP/Message/Body.swift index 180e83a..bc1d07b 100644 --- a/Sources/Prorsum/HTTP/Message/Body.swift +++ b/Sources/Prorsum/HTTP/Message/Body.swift @@ -16,7 +16,7 @@ public enum Body { extension Body { public static var empty: Body { - return .buffer(Data()) + return .buffer(.empty) } public var isEmpty: Bool { diff --git a/Sources/Prorsum/HTTP/Serializer/BodyStream.swift b/Sources/Prorsum/HTTP/Serializer/BodyStream.swift index b49c205..bbf37aa 100644 --- a/Sources/Prorsum/HTTP/Serializer/BodyStream.swift +++ b/Sources/Prorsum/HTTP/Serializer/BodyStream.swift @@ -41,9 +41,9 @@ final class BodyStream : DuplexStream { throw StreamError.alreadyClosed } - try transport.write(Array(String(bytes.count, radix: 16).utf8), deadline: deadline) - try transport.write(Array("\r\n".utf8), deadline: deadline) + try transport.write(String(bytes.count, radix: 16).bytes, deadline: deadline) + try transport.write("\r\n".bytes, deadline: deadline) try transport.write(bytes, deadline: deadline) - try transport.write(Array("\r\n".utf8), deadline: deadline) + try transport.write("\r\n".bytes, deadline: deadline) } } diff --git a/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift b/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift index a9013a9..55ed664 100644 --- a/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift +++ b/Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift @@ -35,11 +35,11 @@ public struct RequestSerializer { requestURI = request.url.absoluteString } - try stream.write(Array("\(method) \(requestURI) HTTP/\(request.version.major).\(request.version.minor)".utf8), deadline: deadline) + try stream.write("\(method) \(requestURI) HTTP/\(request.version.major).\(request.version.minor)".bytes, deadline: deadline) try stream.write(newLine, deadline: deadline) for (name, value) in request.headers.headers { - try stream.write(Array("\(name): \(value)".utf8), deadline: deadline) + try stream.write("\(name): \(value)".bytes, deadline: deadline) try stream.write(newLine, deadline: deadline) } @@ -47,7 +47,8 @@ public struct RequestSerializer { switch request.body { case .buffer(let buffer): - try stream.write(buffer.withUnsafeBytes { [UInt8]($0) }, deadline: deadline) +// try stream.write(buffer.withUnsafeBytes { [UInt8](UnsafeBufferPointer(start: $0, count: buffer.count)) }, deadline: deadline) + try stream.write([UInt8](buffer), deadline: deadline) case .reader(let reader): while !reader.isClosed { let buffer = try reader.read(upTo: bufferSize, deadline: deadline) @@ -55,20 +56,20 @@ public struct RequestSerializer { break } - try stream.write(Array(String(buffer.count, radix: 16).utf8), deadline: deadline) + try stream.write(String(buffer.count, radix: 16).bytes, deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(buffer, deadline: deadline) try stream.write(newLine, deadline: deadline) } - try stream.write(Array("0".utf8), deadline: deadline) + try stream.write("0".bytes, deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(newLine, deadline: deadline) case .writer(let writer): let body = BodyStream(stream) try writer(body) - try stream.write(Array("0".utf8), deadline: deadline) + try stream.write("0".bytes, deadline: deadline) try stream.write(newLine, deadline: deadline) try stream.write(newLine, deadline: deadline) } diff --git a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift index 5015c80..2dbce20 100644 --- a/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift +++ b/Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift @@ -54,17 +54,17 @@ public struct ResponseSerializer { break } - try stream.write(Array(String(bytes.count, radix: 16).utf8), deadline: deadline) - try stream.write(Array("\r\n".utf8), deadline: deadline) + try stream.write(String(bytes.count, radix: 16).bytes, deadline: deadline) + try stream.write("\r\n".bytes, deadline: deadline) try stream.write(bytes, deadline: deadline) - try stream.write(Array("\r\n".utf8), deadline: deadline) + try stream.write("\r\n".bytes, deadline: deadline) } - try stream.write(Array("0\r\n\r\n".utf8), deadline: deadline) + try stream.write("0\r\n\r\n".bytes, deadline: deadline) case .writer(let writer): let body = BodyStream(stream) try writer(body) - try stream.write(Array("0\r\n\r\n".utf8), deadline: deadline) + try stream.write("0\r\n\r\n".bytes, deadline: deadline) } } } diff --git a/Tests/ProrsumTests/HTTPServerTests.swift b/Tests/ProrsumTests/HTTPServerTests.swift index 2734d2c..2bb7796 100644 --- a/Tests/ProrsumTests/HTTPServerTests.swift +++ b/Tests/ProrsumTests/HTTPServerTests.swift @@ -25,7 +25,7 @@ class HTTPServerTests: XCTestCase { func testHTTPConnect() { let server = try! HTTPServer { request, writer in - let response = Response(body: "Hello!".data(using: .utf8)!) + let response = Response(body: "Hello!".data) try! writer.serialize(response) writer.close() From cc0e26f8b7490809b2b499645be7d100f8f79452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Wed, 11 Sep 2019 15:50:44 +0900 Subject: [PATCH 15/17] fix Hashable warning --- Sources/Prorsum/HTTP/MediaType/MediaType.swift | 5 +++++ Sources/Prorsum/HTTP/Message/AttributedCookie.swift | 5 +++++ Sources/Prorsum/HTTP/Message/Cookie.swift | 5 +++++ Sources/Prorsum/HTTP/Message/Status.swift | 5 +++++ Sources/Prorsum/HTTP/Message/Versioin.swift | 7 +++++++ 5 files changed, 27 insertions(+) diff --git a/Sources/Prorsum/HTTP/MediaType/MediaType.swift b/Sources/Prorsum/HTTP/MediaType/MediaType.swift index 7d732e2..bc5097c 100644 --- a/Sources/Prorsum/HTTP/MediaType/MediaType.swift +++ b/Sources/Prorsum/HTTP/MediaType/MediaType.swift @@ -103,9 +103,14 @@ extension Collection where Self.Iterator.Element == MediaType { } extension MediaType : Hashable { + public var hashValue: Int { return type.hashValue ^ subtype.hashValue } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.type.hashValue ^ self.subtype.hashValue) + } } public func == (lhs: MediaType, rhs: MediaType) -> Bool { diff --git a/Sources/Prorsum/HTTP/Message/AttributedCookie.swift b/Sources/Prorsum/HTTP/Message/AttributedCookie.swift index 63fa073..9f8698b 100644 --- a/Sources/Prorsum/HTTP/Message/AttributedCookie.swift +++ b/Sources/Prorsum/HTTP/Message/AttributedCookie.swift @@ -98,9 +98,14 @@ public struct AttributedCookie { } extension AttributedCookie : Hashable { + public var hashValue: Int { return name.hashValue } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.name.hashValue) + } } public func == (lhs: AttributedCookie, rhs: AttributedCookie) -> Bool { diff --git a/Sources/Prorsum/HTTP/Message/Cookie.swift b/Sources/Prorsum/HTTP/Message/Cookie.swift index 8b5c81f..fac8c04 100644 --- a/Sources/Prorsum/HTTP/Message/Cookie.swift +++ b/Sources/Prorsum/HTTP/Message/Cookie.swift @@ -31,9 +31,14 @@ public struct Cookie : CookieProtocol { } extension Cookie : Hashable { + public var hashValue: Int { return name.hashValue } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.name.hashValue) + } } extension Cookie : Equatable {} diff --git a/Sources/Prorsum/HTTP/Message/Status.swift b/Sources/Prorsum/HTTP/Message/Status.swift index 30394e7..1991660 100644 --- a/Sources/Prorsum/HTTP/Message/Status.swift +++ b/Sources/Prorsum/HTTP/Message/Status.swift @@ -262,9 +262,14 @@ extension Response.Status { } extension Response.Status : Hashable { + public var hashValue: Int { return statusCode } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.statusCode) + } } public func ==(lhs: Response.Status, rhs: Response.Status) -> Bool { diff --git a/Sources/Prorsum/HTTP/Message/Versioin.swift b/Sources/Prorsum/HTTP/Message/Versioin.swift index edd94c6..d842afa 100644 --- a/Sources/Prorsum/HTTP/Message/Versioin.swift +++ b/Sources/Prorsum/HTTP/Message/Versioin.swift @@ -21,7 +21,9 @@ //SOFTWARE. public struct Version { + public var major: Int + public var minor: Int public init(major: Int, minor: Int) { @@ -31,9 +33,14 @@ public struct Version { } extension Version : Hashable { + public var hashValue: Int { return major ^ minor } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.major ^ self.minor) + } } extension Version : Equatable {} From 8038c9a69561d16f7d25d9f0edc2695d20f023af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Wed, 11 Sep 2019 15:51:46 +0900 Subject: [PATCH 16/17] delete Parser.parse(_ from: DataRepresentable) --- Sources/Prorsum/HTTP/Parser/Parser.swift | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Sources/Prorsum/HTTP/Parser/Parser.swift b/Sources/Prorsum/HTTP/Parser/Parser.swift index d9f6b26..8090420 100644 --- a/Sources/Prorsum/HTTP/Parser/Parser.swift +++ b/Sources/Prorsum/HTTP/Parser/Parser.swift @@ -89,14 +89,6 @@ public final class MessageParser { } } - public func parse(_ from: DataRepresentable) throws -> [Message] { - let buffer = from.data - - return try buffer.withUnsafeBytes { - try self.parse(UnsafeBufferPointer(start: $0, count: buffer.count)) - } - } - public func parse(_ bytes: UnsafeBufferPointer) throws -> [Message] { let final = bytes.isEmpty let needsMessage: Bool From a28c5a7c134d09992f331c00272ecc37445f0daf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E5=B7=9D=E5=8F=B8?= Date: Wed, 11 Sep 2019 15:52:07 +0900 Subject: [PATCH 17/17] fix Data.init warning --- Sources/Prorsum/WebSocket/Client/WebSocketClient.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Prorsum/WebSocket/Client/WebSocketClient.swift b/Sources/Prorsum/WebSocket/Client/WebSocketClient.swift index 9e70914..b63fbad 100644 --- a/Sources/Prorsum/WebSocket/Client/WebSocketClient.swift +++ b/Sources/Prorsum/WebSocket/Client/WebSocketClient.swift @@ -25,7 +25,7 @@ public class WebSocketClient { } public func connect() throws { - let key = Data(bytes: Array(URandom().bytes(16))).base64EncodedString(options: []) + let key = Data(Array(URandom().bytes(16))).base64EncodedString(options: []) let headers: Headers = [ "Connection": "Upgrade",