<html><body><p><font size="2">Hi all,</font><br><br><font size="2">As part of PR#78 for TLS integration into HTTP, </font><a href="https://github.com/swift-server/http/pull/78"><font size="2">https://github.com/swift-server/http/pull/78</font></a><font size="2">, I had to update the HTTP API and would like to ask for feedback.</font><br><br><font size="2">The TLS code sits in: </font><br><a href="https://github.com/gtaban/security.git"><font size="2">https://github.com/gtaban/security.git</font></a><font size="2">                  // protocol definitions and data types</font><br><a href="https://github.com/gtaban/TLSService.git"><font size="2">https://github.com/gtaban/TLSService.git</font></a><font size="2">        // implementation using OpenSSL on Linux and SecureTransport on macOS</font><br><br><font size="2">The proposed HTTP API changes are in </font><b><font size="2">HTTPServing protocol:</font></b><br><br><font size="2">     /// Start the HTTP server on the given `port`, using `handler` to process incoming requests</font><br><font size="2"> -    func start(port: Int, handler: @escaping HTTPRequestHandler) throws</font><br><br><font size="2"> +    func start(port: Int, tls: TLSConfiguration?, handler: @escaping HTTPRequestHandler) throws</font><br><br><br><font size="2">and </font><b><font size="2">HTTPServer class</font></b><font size="2"> `start()` function:</font><br><br><font size="2"> -    public func start(port: Int = 0, handler: @escaping HTTPRequestHandler) throws {</font><br><font size="2"> -        try server.start(port: port, handler: handler)</font><br><br><font size="2"> +    public func start(port: Int = 0, tls: TLSConfiguration? = nil, handler: @escaping HTTPRequestHandler) throws {</font><br><font size="2"> +        try server.start(port: port, tlsConfig: tls, handler: handler)</font><br><br><font size="2">TLSConfiguration is a struct defined in: </font><br><a href="https://github.com/gtaban/security/blob/master/Sources/ServerSecurity/TLSConfiguration.swift"><font size="2">https://github.com/gtaban/security/blob/master/Sources/ServerSecurity/TLSConfiguration.swift</font></a><br><br><font size="2">which stores TLS parameters that are needed to configure a TLS connection. These include credentials (certificates and passwords) and cipher suites.</font><br><br><br><font size="2">There is a corresponding change in PoCSocket/PoCSocketSimpleServer.swift `start()` to pass in the configuration. </font><br><br><font size="2">The way that the proposed APIs would get uses can be seen in Tests/HTTPTests/TLSServerTests.swift.</font><br><br><font size="2">        let config = createCASignedTLSConfig()</font><br><br><font size="2">        // HTTP</font><br><font size="2">        try server.start(port: 0, handler: simpleHelloWebApp.handle)</font><br><br><font size="2">        // HTTPS</font><br><font size="2">        try server.start(port: 0, tls: config, handler: simpleHelloWebApp.handle)</font><br><br><br><font size="2">Regards,</font><br><font size="2">Gelareh</font><BR>
</body></html>