mirror of
https://github.com/HaishinKit/HaishinKit.swift.git
synced 2026-06-06 20:17:36 +00:00
65 lines
1.8 KiB
Swift
65 lines
1.8 KiB
Swift
import Foundation
|
|
|
|
struct HTTPRequest {
|
|
static let separator:UInt8 = 0x0a
|
|
|
|
var uri:String = "/"
|
|
var method:HTTPMethod = .UNKOWN
|
|
var version:HTTPVersion = .Unkown
|
|
var headerFields:[String: String] = [:]
|
|
|
|
init() {
|
|
}
|
|
|
|
init?(bytes:[UInt8]) {
|
|
self.bytes = bytes
|
|
if (method == .UNKOWN || version == .Unkown) {
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: CustomStringConvertible
|
|
extension HTTPRequest: CustomStringConvertible {
|
|
var description:String {
|
|
return Mirror(reflecting: self).description
|
|
}
|
|
}
|
|
|
|
// MARK: BytesConvertible
|
|
extension HTTPRequest: BytesConvertible {
|
|
var bytes:[UInt8] {
|
|
get {
|
|
return []
|
|
}
|
|
set {
|
|
var count:Int = 0
|
|
var lines:[String] = []
|
|
let bytes:[ArraySlice<UInt8>] = newValue.split(HTTPRequest.separator)
|
|
for i in 0..<bytes.count {
|
|
count += bytes[i].count + 1
|
|
guard let line:String = String(bytes: Array(bytes[i]), encoding: NSUTF8StringEncoding) else {
|
|
continue
|
|
}
|
|
lines.append(line.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet()))
|
|
if (bytes.last!.isEmpty) {
|
|
break
|
|
}
|
|
}
|
|
|
|
let first:[String] = lines.first!.componentsSeparatedByString(" ")
|
|
method = HTTPMethod(rawValue: first[0]) ?? .UNKOWN
|
|
uri = first[1]
|
|
version = HTTPVersion(rawValue: first[2]) ?? .Unkown
|
|
|
|
for i in 1..<lines.count {
|
|
if (lines[i].isEmpty) {
|
|
continue
|
|
}
|
|
let pairs:[String] = lines[i].componentsSeparatedByString(": ")
|
|
headerFields[pairs[0]] = pairs[1]
|
|
}
|
|
}
|
|
}
|
|
}
|