Home / Class/ CleartextHttp2ServerUpgradeHandler Class — netty Architecture

CleartextHttp2ServerUpgradeHandler Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  8437dc8d_808f_d72e_cee8_b6e3a5bf8173["CleartextHttp2ServerUpgradeHandler"]
  f0299706_204d_1815_80cd_a87c010c0d3c["CleartextHttp2ServerUpgradeHandler.java"]
  8437dc8d_808f_d72e_cee8_b6e3a5bf8173 -->|defined in| f0299706_204d_1815_80cd_a87c010c0d3c
  f32e72ca_1aa0_f918_1555_3a9e16b71c70["CleartextHttp2ServerUpgradeHandler()"]
  8437dc8d_808f_d72e_cee8_b6e3a5bf8173 -->|method| f32e72ca_1aa0_f918_1555_3a9e16b71c70
  cedd3441_dd00_3aad_59fa_5d62784223d6["handlerAdded()"]
  8437dc8d_808f_d72e_cee8_b6e3a5bf8173 -->|method| cedd3441_dd00_3aad_59fa_5d62784223d6
  18e7382b_2e92_617f_b6b3_cfb23db693a7["decode()"]
  8437dc8d_808f_d72e_cee8_b6e3a5bf8173 -->|method| 18e7382b_2e92_617f_b6b3_cfb23db693a7

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/CleartextHttp2ServerUpgradeHandler.java lines 39–105

public final class CleartextHttp2ServerUpgradeHandler extends ByteToMessageDecoder {
    private static final ByteBuf CONNECTION_PREFACE = unreleasableBuffer(connectionPrefaceBuf()).asReadOnly();

    private final HttpServerCodec httpServerCodec;
    private final HttpServerUpgradeHandler httpServerUpgradeHandler;
    private final ChannelHandler http2ServerHandler;

    /**
     * Creates the channel handler provide cleartext HTTP/2 upgrade from HTTP
     * upgrade or prior knowledge
     *
     * @param httpServerCodec the http server codec
     * @param httpServerUpgradeHandler the http server upgrade handler for HTTP/2
     * @param http2ServerHandler the http2 server handler, will be added into pipeline
     *                           when starting HTTP/2 by prior knowledge
     */
    public CleartextHttp2ServerUpgradeHandler(HttpServerCodec httpServerCodec,
                                              HttpServerUpgradeHandler httpServerUpgradeHandler,
                                              ChannelHandler http2ServerHandler) {
        this.httpServerCodec = checkNotNull(httpServerCodec, "httpServerCodec");
        this.httpServerUpgradeHandler = checkNotNull(httpServerUpgradeHandler, "httpServerUpgradeHandler");
        this.http2ServerHandler = checkNotNull(http2ServerHandler, "http2ServerHandler");
    }

    @Override
    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
        ctx.pipeline()
                .addAfter(ctx.name(), null, httpServerUpgradeHandler)
                .addAfter(ctx.name(), null, httpServerCodec);
    }

    /**
     * Peek inbound message to determine current connection wants to start HTTP/2
     * by HTTP upgrade or prior knowledge
     */
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        int prefaceLength = CONNECTION_PREFACE.readableBytes();
        int bytesRead = Math.min(in.readableBytes(), prefaceLength);

        if (!ByteBufUtil.equals(CONNECTION_PREFACE, CONNECTION_PREFACE.readerIndex(),
                in, in.readerIndex(), bytesRead)) {
            ctx.pipeline().remove(this);
        } else if (bytesRead == prefaceLength) {
            // Full h2 preface match, removed source codec, using http2 codec to handle
            // following network traffic
            ctx.pipeline()
                    .remove(httpServerCodec)
                    .remove(httpServerUpgradeHandler);

            ctx.pipeline().addAfter(ctx.name(), null, http2ServerHandler);
            ctx.pipeline().remove(this);

            ctx.fireUserEventTriggered(PriorKnowledgeUpgradeEvent.INSTANCE);
        }
    }

    /**
     * User event that is fired to notify about HTTP/2 protocol is started.
     */
    public static final class PriorKnowledgeUpgradeEvent {
        private static final PriorKnowledgeUpgradeEvent INSTANCE = new PriorKnowledgeUpgradeEvent();

        private PriorKnowledgeUpgradeEvent() {
        }
    }
}

Frequently Asked Questions

What is the CleartextHttp2ServerUpgradeHandler class?
CleartextHttp2ServerUpgradeHandler is a class in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/CleartextHttp2ServerUpgradeHandler.java.
Where is CleartextHttp2ServerUpgradeHandler defined?
CleartextHttp2ServerUpgradeHandler is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/CleartextHttp2ServerUpgradeHandler.java at line 39.

Analyze Your Own Codebase

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

Try Supermodel Free