Home / Class/ Http3FrameCodec Class — netty Architecture

Http3FrameCodec Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  57499e74_1040_f300_12bb_215179e108be["Http3FrameCodec"]
  50e04e81_eb2c_8eef_5e05_95116fe8e65f["Http3FrameCodec.java"]
  57499e74_1040_f300_12bb_215179e108be -->|defined in| 50e04e81_eb2c_8eef_5e05_95116fe8e65f
  c4e8d7c5_9603_b528_219d_a82f333d9703["Http3FrameCodecFactory()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| c4e8d7c5_9603_b528_219d_a82f333d9703
  d08e22bb_468c_9263_1648_2ad94efd5628["Http3FrameCodec()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| d08e22bb_468c_9263_1648_2ad94efd5628
  be6560e3_c207_d655_9f18_f120edca475c["handlerAdded()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| be6560e3_c207_d655_9f18_f120edca475c
  f7f031b7_1830_ea2e_79b9_cbe1e41535f4["channelInactive()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| f7f031b7_1830_ea2e_79b9_cbe1e41535f4
  8e959716_4283_14c4_3615_74bd8ff69a7b["handlerRemoved0()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| 8e959716_4283_14c4_3615_74bd8ff69a7b
  552ee46c_e191_c31e_0760_893a4dc62d1b["channelRead()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| 552ee46c_e191_c31e_0760_893a4dc62d1b
  4432f04f_81b6_0995_2792_9dc615b00b96["channelReadComplete()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| 4432f04f_81b6_0995_2792_9dc615b00b96
  bc9d9e09_417f_cc2b_50ed_b48f93b8395c["connectionError()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| bc9d9e09_417f_cc2b_50ed_b48f93b8395c
  a9991e7a_1e1e_f455_19bd_4771a0c28625["decode()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| a9991e7a_1e1e_f455_19bd_4771a0c28625
  d0f8d7ea_8076_8153_91a0_088e231e99a1["skipBytes()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| d0f8d7ea_8076_8153_91a0_088e231e99a1
  8b0697bd_1098_91ad_7558_7e1c678364c7["decodeFrame()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| 8b0697bd_1098_91ad_7558_7e1c678364c7
  40fb57c4_f85d_87ad_ac47_bdfc5af1b6d8["enforceMaxPayloadLength()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| 40fb57c4_f85d_87ad_ac47_bdfc5af1b6d8
  bdd8ff0e_d030_965a_6ea5_7f31277ae36c["Http3SettingsFrame()"]
  57499e74_1040_f300_12bb_215179e108be -->|method| bdd8ff0e_d030_965a_6ea5_7f31277ae36c

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java lines 58–822

final class Http3FrameCodec extends ByteToMessageDecoder implements ChannelOutboundHandler {
    private final Http3FrameTypeValidator validator;
    private final long maxHeaderListSize;
    private final QpackDecoder qpackDecoder;
    private final QpackEncoder qpackEncoder;
    private final Http3RequestStreamCodecState encodeState;
    private final Http3RequestStreamCodecState decodeState;
    private final Http3Settings.NonStandardHttp3SettingsValidator nonStandardSettingsValidator;
    private boolean firstFrame = true;
    private boolean error;
    private long type = -1;
    private int payLoadLength = -1;
    private QpackAttributes qpackAttributes;
    private ReadResumptionListener readResumptionListener;
    private WriteResumptionListener writeResumptionListener;

    static Http3FrameCodecFactory newFactory(QpackDecoder qpackDecoder,
                                             long maxHeaderListSize, QpackEncoder qpackEncoder) {
        checkNotNull(qpackEncoder, "qpackEncoder");
        checkNotNull(qpackDecoder, "qpackDecoder");

        // QPACK decoder and encoder are shared between streams in a connection.
        return (validator, encodeState, decodeState,
                nonStandardSettingsValidator) -> new Http3FrameCodec(validator, qpackDecoder,
                maxHeaderListSize, qpackEncoder, encodeState, decodeState, nonStandardSettingsValidator);
    }

    Http3FrameCodec(Http3FrameTypeValidator validator, QpackDecoder qpackDecoder,
                    long maxHeaderListSize, QpackEncoder qpackEncoder, Http3RequestStreamCodecState encodeState,
                    Http3RequestStreamCodecState decodeState,
                    Http3Settings.NonStandardHttp3SettingsValidator nonStandardSettingsValidator) {
        this.validator = checkNotNull(validator, "validator");
        this.qpackDecoder = checkNotNull(qpackDecoder, "qpackDecoder");
        this.maxHeaderListSize = checkPositive(maxHeaderListSize, "maxHeaderListSize");
        this.qpackEncoder = checkNotNull(qpackEncoder, "qpackEncoder");
        this.encodeState = checkNotNull(encodeState, "encodeState");
        this.decodeState = checkNotNull(decodeState, "decodeState");
        this.nonStandardSettingsValidator = nonStandardSettingsValidator;
    }

    @Override
    public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
        qpackAttributes = Http3.getQpackAttributes(ctx.channel().parent());
        assert qpackAttributes != null;

        initReadResumptionListenerIfRequired(ctx);
        super.handlerAdded(ctx);
    }

    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        if (writeResumptionListener != null) {
            writeResumptionListener.drain();
        }
        super.channelInactive(ctx);
    }

    @Override
    protected void handlerRemoved0(ChannelHandlerContext ctx) throws Exception {
        if (writeResumptionListener != null) {
            // drain everything so we are sure we never leak anything.
            writeResumptionListener.drain();
        }
        super.handlerRemoved0(ctx);
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        ByteBuf buffer;
        if (msg instanceof QuicStreamFrame) {
            QuicStreamFrame streamFrame = (QuicStreamFrame) msg;
            buffer = streamFrame.content().retain();
            streamFrame.release();
        } else {
            buffer = (ByteBuf) msg;
        }
        super.channelRead(ctx, buffer);
    }

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {

Frequently Asked Questions

What is the Http3FrameCodec class?
Http3FrameCodec is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java.
Where is Http3FrameCodec defined?
Http3FrameCodec is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java at line 58.

Analyze Your Own Codebase

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

Try Supermodel Free