<html><body><p><font size="2">Good points on the existing design (without TLS). I worked with what was there, but in general I like the idea of having an options class, which gets set in `init`. Kind of like what we did with TLSConfiguration. </font><br><br><font size="2">I can't comment on the parser/writer design and the multi-port, perhaps @Chris Bailey?</font><br><br><font size="2">gelareh</font><br><font size="2"> </font><br><br><img width="16" height="16" src="cid:1__=8FBB0B5ADFE15E8E8f9e8a93df938690918c8FB@" border="0" alt="Inactive hide details for Helge Heß via swift-server-dev ---10/30/2017 12:06:09 PM---Hi, a few things I noticed working on it:"><font size="2" color="#424282">Helge Heß via swift-server-dev ---10/30/2017 12:06:09 PM---Hi, a few things I noticed working on it:</font><br><br><font size="2" color="#5F5F5F">From:        </font><font size="2">Helge Heß via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font><br><font size="2" color="#5F5F5F">To:        </font><font size="2">Helge Heß via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font><br><font size="2" color="#5F5F5F">Date:        </font><font size="2">10/30/2017 12:06 PM</font><br><font size="2" color="#5F5F5F">Subject:        </font><font size="2">Re: [swift-server-dev] HTTP API proposal for TLS integration</font><br><font size="2" color="#5F5F5F">Sent by:        </font><font size="2">swift-server-dev-bounces@swift.org</font><br><hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br><br><br><tt><font size="2">Hi,<br><br>a few things I noticed working on it:<br><br>- IMO the closure, ports and stuff should go into the `init`.<br><br>- The HTTPServing thing I don’t get at all. Why do we need this?<br>- Kinda the same for HTTPResponseWriter. (it is particularly weird that the writer is coupled with the parser in this implementation - they should be completely distinct).<br><br>- `start` should maybe be called `resume`, and `stop` `suspend` to match what GCD and Cocoa are doing.<br><br>- If we get tons of options we may rather want to add a<br><br>class HTTPServer {<br> &nbsp;class Options { // a class because subclasses may want to add<br> &nbsp; &nbsp;var certificate : ..<br> &nbsp; &nbsp;var port : ...<br> &nbsp;}<br>}<br><br>- Other things we need in the options: request/response logging.<br><br>- I was also wondering how we would want to handle multiple ports and in general addresses.<br>You would at least want to be able to listen on IPv6 …<br><br>I can see two options here:<br>- either create multiple server objects for each sockaddr_in<br>- or add listeners to the server objects<br> &nbsp;- this could be internal, but there needs to API to specify<br> &nbsp; &nbsp;what sockaddr_in’s you want to listen on.<br><br>hh<br><br>&gt; On 30. Oct 2017, at 17:41, Gelareh Taban via swift-server-dev &lt;swift-server-dev@swift.org&gt; wrote:<br>&gt; <br>&gt; Hi all,<br>&gt; <br>&gt; As part of PR#78 for TLS integration into HTTP, </font></tt><tt><font size="2"><a href="https://github.com/swift-server/http/pull/78">https://github.com/swift-server/http/pull/78</a></font></tt><tt><font size="2">, I had to update the HTTP API and would like to ask for feedback.<br>&gt; <br>&gt; The TLS code sits in:<br>&gt; </font></tt><tt><font size="2"><a href="https://github.com/gtaban/security.git">https://github.com/gtaban/security.git</a></font></tt><tt><font size="2">&nbsp;// protocol definitions and data types<br>&gt; </font></tt><tt><font size="2"><a href="https://github.com/gtaban/TLSService.git">https://github.com/gtaban/TLSService.git</a></font></tt><tt><font size="2">&nbsp;// implementation using OpenSSL on Linux and SecureTransport on macOS<br>&gt; <br>&gt; The proposed HTTP API changes are in HTTPServing protocol:<br>&gt; <br>&gt; /// Start the HTTP server on the given `port`, using `handler` to process incoming requests<br>&gt; - func start(port: Int, handler: @escaping HTTPRequestHandler) throws<br>&gt; <br>&gt; + func start(port: Int, tls: TLSConfiguration?, handler: @escaping HTTPRequestHandler) throws<br>&gt; <br>&gt; <br>&gt; and HTTPServer class `start()` function:<br>&gt; <br>&gt; - public func start(port: Int = 0, handler: @escaping HTTPRequestHandler) throws {<br>&gt; - try server.start(port: port, handler: handler)<br>&gt; <br>&gt; + public func start(port: Int = 0, tls: TLSConfiguration? = nil, handler: @escaping HTTPRequestHandler) throws {<br>&gt; + try server.start(port: port, tlsConfig: tls, handler: handler)<br>&gt; <br>&gt; TLSConfiguration is a struct defined in:<br>&gt; </font></tt><tt><font size="2"><a href="https://github.com/gtaban/security/blob/master/Sources/ServerSecurity/TLSConfiguration.swift">https://github.com/gtaban/security/blob/master/Sources/ServerSecurity/TLSConfiguration.swift</a></font></tt><tt><font size="2"><br>&gt; <br>&gt; which stores TLS parameters that are needed to configure a TLS connection. These include credentials (certificates and passwords) and cipher suites.<br>&gt; <br>&gt; <br>&gt; There is a corresponding change in PoCSocket/PoCSocketSimpleServer.swift `start()` to pass in the configuration.<br>&gt; <br>&gt; The way that the proposed APIs would get uses can be seen in Tests/HTTPTests/TLSServerTests.swift.<br>&gt; <br>&gt; let config = createCASignedTLSConfig()<br>&gt; <br>&gt; // HTTP<br>&gt; try server.start(port: 0, handler: simpleHelloWebApp.handle)<br>&gt; <br>&gt; // HTTPS<br>&gt; try server.start(port: 0, tls: config, handler: simpleHelloWebApp.handle)<br>&gt; <br>&gt; <br>&gt; Regards,<br>&gt; Gelareh<br>&gt; _______________________________________________<br>&gt; swift-server-dev mailing list<br>&gt; swift-server-dev@swift.org<br>&gt; </font></tt><tt><font size="2"><a href="https://lists.swift.org/mailman/listinfo/swift-server-dev">https://lists.swift.org/mailman/listinfo/swift-server-dev</a></font></tt><tt><font size="2"><br><br>[attachment &quot;signature.asc&quot; deleted by Gelareh Taban/Austin/IBM] _______________________________________________<br>swift-server-dev mailing list<br>swift-server-dev@swift.org<br></font></tt><tt><font size="2"><a href="https://lists.swift.org/mailman/listinfo/swift-server-dev">https://lists.swift.org/mailman/listinfo/swift-server-dev</a></font></tt><tt><font size="2"><br></font></tt><br><br><BR>
</body></html>