Package io.netty.handler.ssl
Class ApplicationProtocolNegotiationHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.handler.ssl.ApplicationProtocolNegotiationHandler
-
- All Implemented Interfaces:
ChannelHandler
,ChannelInboundHandler
public abstract class ApplicationProtocolNegotiationHandler extends ChannelInboundHandlerAdapter
Configures aChannelPipeline
depending on the application-level protocol negotiation result ofSslHandler
. For example, you could configure your HTTP pipeline depending on the result of ALPN:public class MyInitializer extends
ChannelInitializer
<Channel
> { private finalSslContext
sslCtx; public MyInitializer(SslContext
sslCtx) { this.sslCtx = sslCtx; } protected void initChannel(Channel
ch) {ChannelPipeline
p = ch.pipeline(); p.addLast(sslCtx.newHandler(...)); // AddsSslHandler
p.addLast(new MyNegotiationHandler()); } } public class MyNegotiationHandler extendsApplicationProtocolNegotiationHandler
{ public MyNegotiationHandler() { super(ApplicationProtocolNames
.HTTP_1_1); } protected void configurePipeline(ChannelHandlerContext
ctx, String protocol) { if (ApplicationProtocolNames
.HTTP_2.equals(protocol) { configureHttp2(ctx); } else if (ApplicationProtocolNames
.HTTP_1_1.equals(protocol)) { configureHttp1(ctx); } else { throw new IllegalStateException("unknown protocol: " + protocol); } } }
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.String
fallbackProtocol
private static InternalLogger
logger
-
Constructor Summary
Constructors Modifier Constructor Description protected
ApplicationProtocolNegotiationHandler(java.lang.String fallbackProtocol)
Creates a new instance with the specified fallback protocol name.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract void
configurePipeline(ChannelHandlerContext ctx, java.lang.String protocol)
Invoked on successful initial SSL/TLS handshake.void
exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause)
CallsChannelHandlerContext.fireExceptionCaught(Throwable)
to forward to the nextChannelHandler
in theChannelPipeline
.protected void
handshakeFailure(ChannelHandlerContext ctx, java.lang.Throwable cause)
Invoked on failed initial SSL/TLS handshake.private void
removeSelfIfPresent(ChannelHandlerContext ctx)
void
userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt)
CallsChannelHandlerContext.fireUserEventTriggered(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
.-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelInactive, channelRead, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded, handlerRemoved
-
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
fallbackProtocol
private final java.lang.String fallbackProtocol
-
-
Constructor Detail
-
ApplicationProtocolNegotiationHandler
protected ApplicationProtocolNegotiationHandler(java.lang.String fallbackProtocol)
Creates a new instance with the specified fallback protocol name.- Parameters:
fallbackProtocol
- the name of the protocol to use when ALPN/NPN negotiation fails or the client does not support ALPN/NPN
-
-
Method Detail
-
userEventTriggered
public void userEventTriggered(ChannelHandlerContext ctx, java.lang.Object evt) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapter
CallsChannelHandlerContext.fireUserEventTriggered(Object)
to forward to the nextChannelInboundHandler
in theChannelPipeline
. Sub-classes may override this method to change behavior.- Specified by:
userEventTriggered
in interfaceChannelInboundHandler
- Overrides:
userEventTriggered
in classChannelInboundHandlerAdapter
- Throws:
java.lang.Exception
-
removeSelfIfPresent
private void removeSelfIfPresent(ChannelHandlerContext ctx)
-
configurePipeline
protected abstract void configurePipeline(ChannelHandlerContext ctx, java.lang.String protocol) throws java.lang.Exception
Invoked on successful initial SSL/TLS handshake. Implement this method to configure your pipeline for the negotiated application-level protocol.- Parameters:
protocol
- the name of the negotiated application-level protocol, or the fallback protocol name specified in the constructor call if negotiation failed or the client isn't aware of ALPN/NPN extension- Throws:
java.lang.Exception
-
handshakeFailure
protected void handshakeFailure(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
Invoked on failed initial SSL/TLS handshake.- Throws:
java.lang.Exception
-
exceptionCaught
public void exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
Description copied from class:ChannelInboundHandlerAdapter
CallsChannelHandlerContext.fireExceptionCaught(Throwable)
to forward to the nextChannelHandler
in theChannelPipeline
. Sub-classes may override this method to change behavior.- Specified by:
exceptionCaught
in interfaceChannelHandler
- Specified by:
exceptionCaught
in interfaceChannelInboundHandler
- Overrides:
exceptionCaught
in classChannelInboundHandlerAdapter
- Throws:
java.lang.Exception
-
-