Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
/.build
/Packages
/*.xcodeproj
Sources/Prorsum/main.swift
Package.resolved
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 0 additions & 34 deletions Package.resolved

This file was deleted.

6 changes: 3 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// swift-tools-version:4.0
// swift-tools-version:5.0
import PackageDescription

let package = Package(
Expand All @@ -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/noppoman/ProrsumNet.git", .upToNextMajor(from: "0.1.2"))
.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"]),
Expand Down
19 changes: 19 additions & 0 deletions Package@swift-4.0.swift
Original file line number Diff line number Diff line change
@@ -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"])
]
)
10 changes: 5 additions & 5 deletions Scripts/install-swift.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

VERSION="4.0"
VERSION="5.0.3"

# Determine OS
UNAME=`uname`;
Expand All @@ -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
Expand All @@ -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
Expand Down
11 changes: 8 additions & 3 deletions Sources/Prorsum/HTTP/MediaType/MediaType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand Down Expand Up @@ -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 {
Expand Down
13 changes: 9 additions & 4 deletions Sources/Prorsum/HTTP/Message/AttributedCookie.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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] = [:]

Expand All @@ -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
}
Expand Down Expand Up @@ -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 {
Expand Down
7 changes: 6 additions & 1 deletion Sources/Prorsum/HTTP/Message/Cookie.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
Expand Down Expand Up @@ -64,7 +69,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
Expand Down
2 changes: 1 addition & 1 deletion Sources/Prorsum/HTTP/Message/Request.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
5 changes: 5 additions & 0 deletions Sources/Prorsum/HTTP/Message/Status.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
7 changes: 7 additions & 0 deletions Sources/Prorsum/HTTP/Message/Versioin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
//SOFTWARE.

public struct Version {

public var major: Int

public var minor: Int

public init(major: Int, minor: Int) {
Expand All @@ -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 {}
Expand Down
8 changes: 0 additions & 8 deletions Sources/Prorsum/HTTP/Parser/Parser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<Byte>) throws -> [Message] {
let final = bytes.isEmpty
let needsMessage: Bool
Expand Down
3 changes: 2 additions & 1 deletion Sources/Prorsum/HTTP/Serializer/RequestSerializer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ public struct RequestSerializer {

switch request.body {
case .buffer(let buffer):
try stream.write(buffer.bytes, 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)
Expand Down
4 changes: 2 additions & 2 deletions Sources/Prorsum/HTTP/Serializer/ResponseSerializer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion Sources/Prorsum/WebSocket/Client/WebSocketClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions Sources/Prorsum/WebSocket/Data+WebsocketCompute.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ extension Data {
let valuePointer = UnsafeMutablePointer<T>.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)
Expand Down
8 changes: 6 additions & 2 deletions Sources/Prorsum/WebSocket/Frame.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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<Int>.size)))

let masked: Bool = maskKey.count == 4
let mask: UInt8 = masked ? 1 : 0
Expand Down
4 changes: 2 additions & 2 deletions Sources/Prorsum/WebSocket/WebSocket.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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

}
Expand Down