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);
        }
    }
}