Home / Class/ Http2ClientInitializer Class — netty Architecture

Http2ClientInitializer Class — netty Architecture

Architecture documentation for the Http2ClientInitializer class in Http2ClientInitializer.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  3d194589_1edf_6e5a_e7b1_3add79b11968["Http2ClientInitializer"]
  3207617e_a09d_a13b_e65a_89274792f09a["Http2ClientInitializer.java"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|defined in| 3207617e_a09d_a13b_e65a_89274792f09a
  3374f1c0_78c2_bea4_1f98_232cca7f24c1["Http2ClientInitializer()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| 3374f1c0_78c2_bea4_1f98_232cca7f24c1
  ff062f25_3104_30ff_00bd_7656cbb235e3["initChannel()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| ff062f25_3104_30ff_00bd_7656cbb235e3
  cbd7be89_3c75_1446_4abb_98fd4f557bf6["HttpResponseHandler()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| cbd7be89_3c75_1446_4abb_98fd4f557bf6
  2541efa9_c7a2_c1da_7edb_099b45e092cd["Http2SettingsHandler()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| 2541efa9_c7a2_c1da_7edb_099b45e092cd
  4804e25a_c676_6daf_89ce_d3dd191d19e7["configureEndOfPipeline()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| 4804e25a_c676_6daf_89ce_d3dd191d19e7
  91f0fece_507b_58de_8f7b_b73b6467c862["configureSsl()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| 91f0fece_507b_58de_8f7b_b73b6467c862
  22eedc29_6e66_560d_c74e_292ba5f1eb16["configureClearText()"]
  3d194589_1edf_6e5a_e7b1_3add79b11968 -->|method| 22eedc29_6e66_560d_c74e_292ba5f1eb16

Relationship Graph

Source Code

example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java lines 48–175

public class Http2ClientInitializer extends ChannelInitializer<SocketChannel> {
    private static final Http2FrameLogger logger = new Http2FrameLogger(INFO, Http2ClientInitializer.class);

    private final SslContext sslCtx;
    private final int maxContentLength;
    private HttpToHttp2ConnectionHandler connectionHandler;
    private HttpResponseHandler responseHandler;
    private Http2SettingsHandler settingsHandler;

    public Http2ClientInitializer(SslContext sslCtx, int maxContentLength) {
        this.sslCtx = sslCtx;
        this.maxContentLength = maxContentLength;
    }

    @Override
    public void initChannel(SocketChannel ch) throws Exception {
        final Http2Connection connection = new DefaultHttp2Connection(false);
        connectionHandler = new HttpToHttp2ConnectionHandlerBuilder()
                .frameListener(new DelegatingDecompressorFrameListener(
                        connection,
                        new InboundHttp2ToHttpAdapterBuilder(connection)
                                .maxContentLength(maxContentLength)
                                .propagateSettings(true)
                                .build(),
                        maxContentLength))
                .frameLogger(logger)
                .connection(connection)
                .build();
        responseHandler = new HttpResponseHandler();
        settingsHandler = new Http2SettingsHandler(ch.newPromise());
        if (sslCtx != null) {
            configureSsl(ch);
        } else {
            configureClearText(ch);
        }
    }

    public HttpResponseHandler responseHandler() {
        return responseHandler;
    }

    public Http2SettingsHandler settingsHandler() {
        return settingsHandler;
    }

    protected void configureEndOfPipeline(ChannelPipeline pipeline) {
        pipeline.addLast(settingsHandler, responseHandler);
    }

    /**
     * Configure the pipeline for TLS NPN negotiation to HTTP/2.
     */
    private void configureSsl(SocketChannel ch) {
        ChannelPipeline pipeline = ch.pipeline();
        // Specify Host in SSLContext New Handler to add TLS SNI Extension
        pipeline.addLast(sslCtx.newHandler(ch.alloc(), Http2Client.HOST, Http2Client.PORT));
        // We must wait for the handshake to finish and the protocol to be negotiated before configuring
        // the HTTP/2 components of the pipeline.
        pipeline.addLast(new ApplicationProtocolNegotiationHandler("") {
            @Override
            protected void configurePipeline(ChannelHandlerContext ctx, String protocol) {
                if (ApplicationProtocolNames.HTTP_2.equals(protocol)) {
                    ChannelPipeline p = ctx.pipeline();
                    p.addLast(connectionHandler);
                    configureEndOfPipeline(p);
                    return;
                }
                ctx.close();
                throw new IllegalStateException("unknown protocol: " + protocol);
            }
        });
    }

    /**
     * Configure the pipeline for a cleartext upgrade from HTTP to HTTP/2.
     */
    private void configureClearText(SocketChannel ch) {
        HttpClientCodec sourceCodec = new HttpClientCodec();
        Http2ClientUpgradeCodec upgradeCodec = new Http2ClientUpgradeCodec(connectionHandler);
        HttpClientUpgradeHandler upgradeHandler = new HttpClientUpgradeHandler(sourceCodec, upgradeCodec,
                maxContentLength);

Frequently Asked Questions

What is the Http2ClientInitializer class?
Http2ClientInitializer is a class in the netty codebase, defined in example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java.
Where is Http2ClientInitializer defined?
Http2ClientInitializer is defined in example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java at line 48.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free