public abstract class AbstractSniHandler<T> extends SslClientHelloHandler<T>
Enables SNI (Server Name Indication) extension for server side SSL. For clients support SNI, the server could have multiple host name bound on a single IP. The client will send host name in the handshake data so server could decide which certificate to choose for the host name.
ByteToMessageDecoder.Cumulator
ChannelHandler.Sharable
Modifier and Type | Field and Description |
---|---|
protected long |
handshakeTimeoutMillis |
MAX_CLIENT_HELLO_LENGTH
COMPOSITE_CUMULATOR, MERGE_CUMULATOR
Modifier | Constructor and Description |
---|---|
|
AbstractSniHandler() |
protected |
AbstractSniHandler(int maxClientHelloLength,
long handshakeTimeoutMillis) |
protected |
AbstractSniHandler(long handshakeTimeoutMillis) |
Modifier and Type | Method and Description |
---|---|
void |
channelActive(ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.fireChannelActive() to forward
to the next ChannelInboundHandler in the ChannelPipeline . |
void |
handlerAdded(ChannelHandlerContext ctx)
Do nothing by default, sub-classes may override this method.
|
protected Future<T> |
lookup(ChannelHandlerContext ctx,
ByteBuf clientHello)
Kicks off a lookup for the given
ClientHello and returns a Future which in turn will
notify the SslClientHelloHandler.onLookupComplete(ChannelHandlerContext, Future) on completion. |
protected abstract Future<T> |
lookup(ChannelHandlerContext ctx,
String hostname)
Kicks off a lookup for the given SNI value and returns a
Future which in turn will
notify the onLookupComplete(ChannelHandlerContext, String, Future) on completion. |
protected void |
onLookupComplete(ChannelHandlerContext ctx,
Future<T> future)
Called upon completion of the
SslClientHelloHandler.lookup(ChannelHandlerContext, ByteBuf) Future . |
protected abstract void |
onLookupComplete(ChannelHandlerContext ctx,
String hostname,
Future<T> future)
Called upon completion of the
lookup(ChannelHandlerContext, String) Future . |
bind, close, connect, decode, deregister, disconnect, flush, handlerRemoved0, read, write
actualReadableBytes, callDecode, channelInactive, channelRead, channelReadComplete, decodeLast, discardSomeReadBytes, handlerRemoved, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught
ensureNotSharable, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
exceptionCaught, handlerRemoved
protected AbstractSniHandler(long handshakeTimeoutMillis)
handshakeTimeoutMillis
- the handshake timeout in millisecondsprotected AbstractSniHandler(int maxClientHelloLength, long handshakeTimeoutMillis)
handshakeTimeoutMillis
- the handshake timeout in millisecondspublic AbstractSniHandler()
public void handlerAdded(ChannelHandlerContext ctx) throws Exception
ChannelHandlerAdapter
handlerAdded
in interface ChannelHandler
handlerAdded
in class ChannelHandlerAdapter
Exception
public void channelActive(ChannelHandlerContext ctx) throws Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelActive()
to forward
to the next ChannelInboundHandler
in the ChannelPipeline
.
Sub-classes may override this method to change behavior.channelActive
in interface ChannelInboundHandler
channelActive
in class ChannelInboundHandlerAdapter
Exception
protected Future<T> lookup(ChannelHandlerContext ctx, ByteBuf clientHello) throws Exception
SslClientHelloHandler
ClientHello
and returns a Future
which in turn will
notify the SslClientHelloHandler.onLookupComplete(ChannelHandlerContext, Future)
on completion.
See https://tools.ietf.org/html/rfc5246#section-7.4.1.2
struct { ProtocolVersion client_version; Random random; SessionID session_id; CipherSuite cipher_suites<2..2^16-2>; CompressionMethod compression_methods<1..2^8-1>; select (extensions_present) { case false: struct {}; case true: Extension extensions<0..2^16-1>; }; } ClientHello;
lookup
in class SslClientHelloHandler<T>
Exception
SslClientHelloHandler.onLookupComplete(ChannelHandlerContext, Future)
protected void onLookupComplete(ChannelHandlerContext ctx, Future<T> future) throws Exception
SslClientHelloHandler
SslClientHelloHandler.lookup(ChannelHandlerContext, ByteBuf)
Future
.onLookupComplete
in class SslClientHelloHandler<T>
Exception
SslClientHelloHandler.lookup(ChannelHandlerContext, ByteBuf)
protected abstract Future<T> lookup(ChannelHandlerContext ctx, String hostname) throws Exception
Future
which in turn will
notify the onLookupComplete(ChannelHandlerContext, String, Future)
on completion.Exception
onLookupComplete(ChannelHandlerContext, String, Future)
protected abstract void onLookupComplete(ChannelHandlerContext ctx, String hostname, Future<T> future) throws Exception
lookup(ChannelHandlerContext, String)
Future
.Exception
lookup(ChannelHandlerContext, String)
Copyright © 2008–2024 The Netty Project. All rights reserved.