* Push completion block to queueSocketWrite
* Fix test assert
I had put this fix in the PR for Swift 4 instead of the PR for this when I split them up. Sorry.
* Simplification of HTTPResponse/HTTPResponseWriter
* `HTTPResponse` is redundent. Its `status` and `headers` properties
are moved to parameters of `writeHeader` method of `HTTPResponseWriter`
instance. `transferEncoding` handling is moved to `HTTPHeaders` - it
is not as simple as an enum and depends on used HTTP protocol version
and capabilites set by a client in its request headers.
`httpVersion` should not be configured by an outer scope - a server should
use the HTTP version which was requested by a client.
* `writeResponse` and `writeContinue` are replaced by `writeHeader`.
* `writeTrailer` accepts trailers as `HTTPHeaders` struct.
* All `write*` methods accept a completion handler.
* `writeBody` accepts `UnsafeHTTPResponseBody` instead of just `Data`
and `Dispatch`. It should be used only in the scope of a call and a
copy should be made or value should be checked for `HTTPResponseBody`
conformance before storing it anythere. This approch allows to reduce
memory copying.
* `Result<POSIXError, Void>` enum is replaced with `Result`. In the
first case `POSIXError` and `Void` are generic parameters names, not
types. I think this behaviour was unintended.
* Always respond with HTTP/1.1 for any HTTP/1.x requests
* Get back HTTPResponse for possible use in the client
* Convert HTTPMethod to a struct
* Compare on rawValue rather than description
* Remove RawRepresentable and add ExpressibleByStringLiteral conformance
* Make HTTPHeaders more user-friendly
* Header name is a struct conforming to `ExpressibleByStringLiteral`.
Standard header names are available through static constants.
This allows to save some CPU on lowercasing and hash value
calculation.
* Original headers are stored until first modification. Iterator
of `HTTPHeaders` iterates over original headers while they are actual,
in other case it iterates over underlying mutable dictionary.
* Default subscript returns values of all headers with the same
name concatenated with comma [RFC7230, section 3.2.2], except
for "Set-Cookie" for which only first value is returned.
* As-is values of all headers with same name can be accessed
through subscript with label `valuesFor`.
* append() method is modified to accept dictionary literal.
replace() method is added.
* Split HTTPHeaders implementation to separate extensions