diff --git a/flash/src/main/java/dev/relism/flash/HttpServer.java b/flash/src/main/java/dev/relism/flash/HttpServer.java index a00853d..1c76172 100644 --- a/flash/src/main/java/dev/relism/flash/HttpServer.java +++ b/flash/src/main/java/dev/relism/flash/HttpServer.java @@ -10,6 +10,7 @@ import dev.relism.flash.models.RequestHandler; import dev.relism.flash.models.Response; import dev.relism.flash.routing.AbstractRouter; import dev.relism.flash.routing.AbstractWsRouter; +import dev.relism.flash.tls.TlsConfig; import dev.relism.flash.websocket.WebSocketFrame; import dev.relism.flash.websocket.WebSocketHandler; import dev.relism.flash.websocket.WebSocketSession; @@ -17,6 +18,8 @@ import dev.relism.fpr.core.ByteView; import lombok.extern.slf4j.Slf4j; +import javax.net.ssl.SSLServerSocket; + import java.io.*; import java.net.InetSocketAddress; import java.net.ServerSocket; @@ -24,15 +27,23 @@ import java.net.Socket; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.Base64; +import java.util.List; import java.util.Set; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; /** - * Pure I/O transport layer. Owns the {@link ServerSocket}, the virtual-thread - * executor, and the keep-alive accept loop. Routing is delegated to HTTP and WS routers. + * Pure I/O transport layer. Owns one {@link ServerSocket} per configured listener (plain or + * TLS), the virtual-thread executor, and the keep-alive accept loop. Routing is delegated to + * HTTP and WS routers — identically, regardless of which listener accepted the connection. + * + *

TLS is a transport-level concern only: once a {@link BoundListener} is bound, an accepted + * {@link Socket} is either plain or an {@code SSLSocket} indistinguishably from here on — + * {@link #process} never branches on it. This is also why WSS needs no separate code path from + * WS: the WebSocket upgrade happens over whatever transport {@link #process} was handed. * *

Allocation model

*