Class ApplicationProtocolNegotiationHandler

All Implemented Interfaces:
ChannelHandler, ChannelInboundHandler

public abstract class ApplicationProtocolNegotiationHandler extends ChannelInboundHandlerAdapter
Configures a ChannelPipeline depending on the application-level protocol negotiation result of SslHandler. For example, you could configure your HTTP pipeline depending on the result of ALPN:
 public class MyInitializer extends ChannelInitializer<Channel> {
     private final SslContext sslCtx;

     public MyInitializer(SslContext sslCtx) {
         this.sslCtx = sslCtx;
     }

     protected void initChannel(Channel ch) {
         ChannelPipeline p = ch.pipeline();
         p.addLast(sslCtx.newHandler(...)); // Adds SslHandler
         p.addLast(new MyNegotiationHandler());
     }
 }

 public class MyNegotiationHandler extends ApplicationProtocolNegotiationHandler {
     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);
         }
     }
 }