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= (major: Int, minor: Int) 0029 public typealias HeaderName
MessageType.swift:92 var version: Version { get set }Request.swift:34 public var version: VersionRequest.swift:42 init(method: Method, uri: URI, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {Response.swift:31 public var version: VersionResponse.swift:39 init(status: Status, version: Version, headers: Headers, cookies: Cookies, body: Body, upgrade: Upgrade?) {= CaseInsensitiveKey 0030 public typealias HeaderValue
MessageType.swift:31 public typealias Headers = [HeaderName: HeaderValue]RequestParser.swift:162 let headerName = HeaderName(headerField)ResponseParser.swift:164 let headerName = HeaderName(headerField)= String 0031 public typealias Headers
MessageType.swift:31 public typealias Headers = [HeaderName: HeaderValue]= [HeaderName: HeaderValue] 0032 public typealias Cookies
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: HeadersRequest.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: HeadersResponse.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
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: CookiesRequest.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: CookiesResponse.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) {{ 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: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: BodyRequest.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: BodyResponse.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) {= [String: Any] 0090 0091 public protocol MessageType
MessageType.swift:96 var storage: Storage { get set }Request.swift:40 public var storage: Storage = [:]Response.swift:37 public var storage: Storage = [:]{ 0092 var version
MessageType.swift:99 extension MessageType {MessageType.swift:174 extension MessageType {Request.swift:29 public struct Request: MessageType {Response.swift:27 public struct Response: MessageType {: Version { get set } 0093 var headers
MessageType.swift:152 if version.minor == 0 {: Headers { get set } 0094 var cookies: Cookies { get set } 0095 var body
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?.descriptionMessageType.swift:133 return headers["Transfer-Encoding"]MessageType.swift:137 headers["Transfer-Encoding"] = newValueMessageType.swift:143 return headers["Connection"]MessageType.swift:147 headers["Connection"] = newValueMessageType.swift:165 return headers["Upgrade"]MessageType.swift:169 headers["Upgrade"] = newValueMessageType.swift:178 for (header, value) in headers {: Body { get set } 0096 var storage
MessageType.swift:186 switch body {MessageType.swift:217 switch body {: 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:201 if storage.count == 0 {MessageType.swift:205 for (index, (key, value)) in storage.enumerate() {MessageType.swift:208 if index < storage.count - 1 {: 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:128 return transferEncoding?.lowercaseString == "chunked": 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
MessageType.swift:153 return connection?.lowercaseString == "keep-alive"MessageType.swift:156 return connection?.lowercaseString != "close"MessageType.swift:160 return connection?.lowercaseString == "upgrade": 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:235 headerDescription +Response.swift:123 headerDescription +: 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:237 bodyDescriptionResponse.swift:125 bodyDescription: 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 }
Request.swift:243 return description + "\n\n" + storageDescriptionResponse.swift:131 return description + "\n\n" + storageDescription