0001    // MessageType.swift
0002    //
0003    // The MIT License (MIT)
0004    //
0005    // Copyright (c) 2015 Zewo
0006    //
0007    // Permission is hereby granted, free of charge, to any person obtaining a copy
0008    // of this software and associated documentation files (the "Software"), to deal
0009    // in the Software without restriction, including without limitation the rights
0010    // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
0011    // copies of the Software, and to permit persons to whom the Software is
0012    // furnished to do so, subject to the following conditions:
0013    //
0014    // The above copyright notice and this permission notice shall be included in all
0015    // copies or substantial portions of the Software.
0016    //
0017    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0018    // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0019    // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
0020    // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0021    // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
0022    // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
0023    // SOFTWARE.
0024    
0025    @_exported import Stream
0026    @_exported import MediaType
0027    
0028    public typealias Version
MessageType.swift:92
    var version: Version { get set }
Request.swift:34
    public var version: Version
Request.swift:42
    init(method: Method, uri: URI, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Response.swift:31
    public var version: Version
Response.swift:39
    init(status: Status, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
= (major: Int, minor: Int) 0029 public typealias HeaderName
MessageType.swift:31
public typealias Headers = [HeaderName: HeaderValue]
RequestParser.swift:162
            let headerName = HeaderName(headerField)
ResponseParser.swift:164
            let headerName = HeaderName(headerField)
= CaseInsensitiveKey 0030 public typealias HeaderValue
MessageType.swift:31
public typealias Headers = [HeaderName: HeaderValue]
= String 0031 public typealias Headers
MessageType.swift:93
    var headers: Headers { get set }
RequestParser.swift:36
    var headers: Headers = [:]
ResponseParser.swift:34
    var headers: Headers = [:]
Request.swift:35
    public var headers: Headers
Request.swift:42
    init(method: Method, uri: URI, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Request.swift:54
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
Request.swift:72
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) {
Request.swift:83
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) {
Request.swift:94
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) {
Request.swift:105
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) throws {
Request.swift:116
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) throws {
Request.swift:127
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) throws {
Response.swift:32
    public var headers: Headers
Response.swift:39
    init(status: Status, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Response.swift:50
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
Response.swift:67
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) {
Response.swift:77
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) {
Response.swift:87
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) {
= [HeaderName: HeaderValue] 0032 public typealias Cookies
Cookie.swift:115
    public static func parseCookie(string: String) throws -> Cookies {
Cookie.swift:116
        var cookies = Cookies()
MessageType.swift:94
    var cookies: Cookies { get set }
RequestParser.swift:37
    var cookies: Cookies = []
ResponseParser.swift:35
    var cookies: Cookies = []
Request.swift:36
    public var cookies: Cookies
Request.swift:42
    init(method: Method, uri: URI, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Request.swift:54
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
Request.swift:72
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) {
Request.swift:83
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) {
Request.swift:94
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) {
Request.swift:105
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) throws {
Request.swift:116
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) throws {
Request.swift:127
    public init(method: Method, uri: String, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) throws {
Response.swift:33
    public var cookies: Cookies
Response.swift:39
    init(status: Status, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Response.swift:50
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
Response.swift:67
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: Data = nil, upgrade: Upgrade? = nil) {
Response.swift:77
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: DataConvertible, upgrade: Upgrade? = nil) {
Response.swift:87
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: StreamType, upgrade: Upgrade? = nil) {
= Set<Cookie> 0033 0034 public enum Body
MessageType.swift:39
extension Body {
MessageType.swift:50
                self = Buffer(data)
MessageType.swift:52
                self = Buffer([])
MessageType.swift:74
                self = Stream(stream)
MessageType.swift:76
                self = Buffer([])
MessageType.swift:95
    var body: Body { get set }
Request.swift:37
    public var body: Body
Request.swift:42
    init(method: Method, uri: URI, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Request.swift:54
    public init(method: Method, uri: URI, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
Response.swift:34
    public var body: Body
Response.swift:39
    init(status: Status, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {
Response.swift:50
    public init(status: Status = .OK, headers: Headers = [:], cookies: Cookies = [], body: Body, upgrade: Upgrade? = nil) {
{ 0035 case Buffer(Data) 0036 case Stream(StreamType) 0037 } 0038 0039 extension Body { 0040 public var buffer: Data? { 0041 get { 0042 switch self { 0043 case .Buffer(let data): return data 0044 default: return nil 0045 } 0046 } 0047 0048 set { 0049 if let data = newValue { 0050 self = Buffer(data) 0051 } else { 0052 self = Buffer([]) 0053 } 0054 } 0055 } 0056 0057 public var isBuffer: Bool { 0058 switch self { 0059 case .Buffer: return true 0060 default: return false 0061 } 0062 } 0063 0064 public var stream: StreamType? { 0065 get { 0066 switch self { 0067 case .Stream(let stream): return stream 0068 default: return nil 0069 } 0070 } 0071 0072 set { 0073 if let stream = newValue { 0074 self = Stream(stream) 0075 } else { 0076 self = Buffer([]) 0077 } 0078 } 0079 } 0080 0081 public var isStream: Bool { 0082 switch self { 0083 case .Stream: return true 0084 default: return false 0085 } 0086 } 0087 } 0088 0089 public typealias Storage
MessageType.swift:96
    var storage: Storage { get set }
Request.swift:40
    public var storage: Storage = [:]
Response.swift:37
    public var storage: Storage = [:]
= [String: Any] 0090 0091 public protocol MessageType
MessageType.swift:99
extension MessageType {
MessageType.swift:174
extension MessageType {
Request.swift:29
public struct Request: MessageType {
Response.swift:27
public struct Response: MessageType {
{ 0092 var version
MessageType.swift:152
        if version.minor == 0 {
: Version { get set } 0093 var headers
MessageType.swift:102
            if let contentType = headers["Content-Type"] {
MessageType.swift:115
            if let contentLength = headers["Content-Length"] {
MessageType.swift:123
            headers["Content-Length"] = newValue?.description
MessageType.swift:133
            return headers["Transfer-Encoding"]
MessageType.swift:137
            headers["Transfer-Encoding"] = newValue
MessageType.swift:143
            return headers["Connection"]
MessageType.swift:147
            headers["Connection"] = newValue
MessageType.swift:165
            return headers["Upgrade"]
MessageType.swift:169
            headers["Upgrade"] = newValue
MessageType.swift:178
        for (header, value) in headers {
: Headers { get set } 0094 var cookies: Cookies { get set } 0095 var body
MessageType.swift:186
        switch body {
MessageType.swift:217
        switch body {
: Body { get set } 0096 var storage
MessageType.swift:201
        if storage.count == 0 {
MessageType.swift:205
        for (index, (key, value)) in storage.enumerate() {
MessageType.swift:208
            if index < storage.count - 1 {
: Storage { get set } 0097 } 0098 0099 extension MessageType { 0100 public var contentType: MediaType? { 0101 get { 0102 if let contentType = headers["Content-Type"] { 0103 return MediaType(string: contentType) 0104 } 0105 return nil 0106 } 0107 0108 set { 0109 headers["Content-Type"] = newValue?.description 0110 } 0111 } 0112 0113 public var contentLength: Int? { 0114 get { 0115 if let contentLength = headers["Content-Length"] { 0116 return Int(contentLength) 0117 } 0118 0119 return nil 0120 } 0121 0122 set { 0123 headers["Content-Length"] = newValue?.description 0124 } 0125 } 0126 0127 public var isChunkEncoded: Bool { 0128 return transferEncoding?.lowercaseString == "chunked" 0129 } 0130 0131 public var transferEncoding
MessageType.swift:128
        return transferEncoding?.lowercaseString == "chunked"
: String? { 0132 get { 0133 return headers["Transfer-Encoding"] 0134 } 0135 0136 set { 0137 headers["Transfer-Encoding"] = newValue 0138 } 0139 } 0140 0141 public var connection
MessageType.swift:153
            return connection?.lowercaseString == "keep-alive"
MessageType.swift:156
        return connection?.lowercaseString != "close"
MessageType.swift:160
        return connection?.lowercaseString == "upgrade"
: String? { 0142 get { 0143 return headers["Connection"] 0144 } 0145 0146 set { 0147 headers["Connection"] = newValue 0148 } 0149 } 0150 0151 public var isKeepAlive: Bool { 0152 if version.minor == 0 { 0153 return connection?.lowercaseString == "keep-alive" 0154 } 0155 0156 return connection?.lowercaseString != "close" 0157 } 0158 0159 public var isUpgrade: Bool { 0160 return connection?.lowercaseString == "upgrade" 0161 } 0162 0163 public var upgrade: String? { 0164 get { 0165 return headers["Upgrade"] 0166 } 0167 0168 set { 0169 headers["Upgrade"] = newValue 0170 } 0171 } 0172 } 0173 0174 extension MessageType { 0175 public var headerDescription
Request.swift:235
            headerDescription +
Response.swift:123
            headerDescription +
: String { 0176 var string = "" 0177 0178 for (header, value) in headers { 0179 string += "\(header): \(value)\n" 0180 } 0181 0182 return string 0183 } 0184 0185 public var bodyDescription
Request.swift:237
            bodyDescription
Response.swift:125
            bodyDescription
: String { 0186 switch body { 0187 case .Buffer(let data): 0188 if data.count == 0 { 0189 return "-" 0190 } 0191 0192 return data.description 0193 case .Stream: 0194 return "Stream" 0195 } 0196 } 0197 0198 public var storageDescription
Request.swift:243
        return description + "\n\n" + storageDescription
Response.swift:131
        return description + "\n\n" + storageDescription
: String { 0199 var string = "Storage:\n" 0200 0201 if storage.count == 0 { 0202 string += "-" 0203 } 0204 0205 for (index, (key, value)) in storage.enumerate() { 0206 string += "\(key): \(value)" 0207 0208 if index < storage.count - 1 { 0209 string += "\n" 0210 } 0211 } 0212 0213 return string 0214 } 0215 0216 public var bodyString: String? { 0217 switch body { 0218 case .Buffer(let data): 0219 return try? String(data: data) 0220 case .Stream: 0221 return nil 0222 } 0223 } 0224 }