From b62c5290ed0fbe8ddd67a9ae7e05312bb59dc22a Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 17 Dec 2015 13:55:10 +0900 Subject: [PATCH] Let SniHandler accept Mapping as well as DominaNameMapping Related: #4470 #4473 Motivation: A user might want to: - implement dynamic mapping from hostname to SslContext - server large number of domain names whose SslContext can be initialized lazily and destroyed when unused Modifications: - Let SniHandler accept Mapping as well as DomainNameMapping - Make the default constructor of SslContext so that a user can create his or her own SslContext wrapper Result: Flexibility --- .../java/io/netty/handler/ssl/SniHandler.java | 23 ++++++++++++++----- .../java/io/netty/handler/ssl/SslContext.java | 5 +++- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/handler/src/main/java/io/netty/handler/ssl/SniHandler.java b/handler/src/main/java/io/netty/handler/ssl/SniHandler.java index 25b472ea26..516131e18c 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SniHandler.java +++ b/handler/src/main/java/io/netty/handler/ssl/SniHandler.java @@ -21,6 +21,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.util.CharsetUtil; import io.netty.util.DomainNameMapping; +import io.netty.util.Mapping; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; @@ -40,28 +41,38 @@ public class SniHandler extends ByteToMessageDecoder { private static final InternalLogger logger = InternalLoggerFactory.getInstance(SniHandler.class); - private final DomainNameMapping mapping; + private final Mapping mapping; private boolean handshaken; private volatile String hostname; private volatile SslContext selectedContext; /** - * Create a SNI detection handler with configured {@link SslContext} - * maintained by {@link DomainNameMapping} + * Creates a SNI detection handler with configured {@link SslContext} + * maintained by {@link Mapping} * * @param mapping the mapping of domain name to {@link SslContext} */ @SuppressWarnings("unchecked") - public SniHandler(DomainNameMapping mapping) { + public SniHandler(Mapping mapping) { if (mapping == null) { throw new NullPointerException("mapping"); } - this.mapping = (DomainNameMapping) mapping; + this.mapping = (Mapping) mapping; handshaken = false; } + /** + * Creates a SNI detection handler with configured {@link SslContext} + * maintained by {@link DomainNameMapping} + * + * @param mapping the mapping of domain name to {@link SslContext} + */ + public SniHandler(DomainNameMapping mapping) { + this((Mapping) mapping); + } + /** * @return the selected hostname */ @@ -70,7 +81,7 @@ public class SniHandler extends ByteToMessageDecoder { } /** - * @return the selected sslcontext + * @return the selected {@link SslContext} */ public SslContext sslContext() { return selectedContext; diff --git a/handler/src/main/java/io/netty/handler/ssl/SslContext.java b/handler/src/main/java/io/netty/handler/ssl/SslContext.java index 3ba011d4ef..70402f2644 100644 --- a/handler/src/main/java/io/netty/handler/ssl/SslContext.java +++ b/handler/src/main/java/io/netty/handler/ssl/SslContext.java @@ -760,7 +760,10 @@ public abstract class SslContext { return apn; } - SslContext() { } + /** + * Creates a new instance. + */ + protected SslContext() { } /** * Returns {@code true} if and only if this context is for server-side.