Home / Class/ ReadResumptionListener Class — netty Architecture

ReadResumptionListener Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  2248914c_cfca_0e01_f610_307d55182207["ReadResumptionListener"]
  50e04e81_eb2c_8eef_5e05_95116fe8e65f["Http3FrameCodec.java"]
  2248914c_cfca_0e01_f610_307d55182207 -->|defined in| 50e04e81_eb2c_8eef_5e05_95116fe8e65f
  13cdb0c0_b6b5_f0e7_646c_0bd7f715a1e4["ReadResumptionListener()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| 13cdb0c0_b6b5_f0e7_646c_0bd7f715a1e4
  a494429d_99b3_b9af_835d_5ed99ff53bf4["suspended()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| a494429d_99b3_b9af_835d_5ed99ff53bf4
  84c0aa73_08b8_9f37_baf7_cad995c3c8e3["readCompleted()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| 84c0aa73_08b8_9f37_baf7_cad995c3c8e3
  bf6a269e_242a_db84_cd3a_85582cef9b57["readRequested()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| bf6a269e_242a_db84_cd3a_85582cef9b57
  c751e13f_6797_7f70_b084_d0fd5fbd468f["isSuspended()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| c751e13f_6797_7f70_b084_d0fd5fbd468f
  6c431423_5862_114e_ae38_4efbbb53a2ef["operationComplete()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| 6c431423_5862_114e_ae38_4efbbb53a2ef
  94361bfc_917a_a19d_075f_c428f5eb421e["run()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| 94361bfc_917a_a19d_075f_c428f5eb421e
  bc889d75_7258_5336_e80d_f4e24471b1ac["resume()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| bc889d75_7258_5336_e80d_f4e24471b1ac
  6e1a101a_f7ee_1213_970e_5639c659e0c2["setState()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| 6e1a101a_f7ee_1213_970e_5639c659e0c2
  d58a8d53_dc7f_23c0_786a_622145d546c1["hasState()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| d58a8d53_dc7f_23c0_786a_622145d546c1
  dd8418fa_a2ac_642f_3bcd_5b0e0bde92b3["unsetState()"]
  2248914c_cfca_0e01_f610_307d55182207 -->|method| dd8418fa_a2ac_642f_3bcd_5b0e0bde92b3

Relationship Graph

Source Code

codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java lines 652–738

    private static final class ReadResumptionListener
            implements Runnable, GenericFutureListener<Future<? super QuicStreamChannel>> {
        private static final int STATE_SUSPENDED = 0b1000_0000;
        private static final int STATE_READ_PENDING = 0b0100_0000;
        private static final int STATE_READ_COMPLETE_PENDING = 0b0010_0000;

        private final ChannelHandlerContext ctx;
        private final Http3FrameCodec codec;
        private byte state;

        ReadResumptionListener(ChannelHandlerContext ctx, Http3FrameCodec codec) {
            this.ctx = ctx;
            this.codec = codec;
            assert codec.qpackAttributes != null;
            if (!codec.qpackAttributes.dynamicTableDisabled() && !codec.qpackAttributes.decoderStreamAvailable()) {
                codec.qpackAttributes.whenDecoderStreamAvailable(this);
            }
        }

        void suspended() {
            assert !codec.qpackAttributes.dynamicTableDisabled();
            setState(STATE_SUSPENDED);
        }

        boolean readCompleted() {
            if (hasState(STATE_SUSPENDED)) {
                setState(STATE_READ_COMPLETE_PENDING);
                return false;
            }
            return true;
        }

        boolean readRequested() {
            if (hasState(STATE_SUSPENDED)) {
                setState(STATE_READ_PENDING);
                return false;
            }
            return true;
        }

        boolean isSuspended() {
            return hasState(STATE_SUSPENDED);
        }

        @Override
        public void operationComplete(Future<? super QuicStreamChannel> future) {
            if (future.isSuccess()) {
                resume();
            } else {
                ctx.fireExceptionCaught(future.cause());
            }
        }

        @Override
        public void run() {
            resume();
        }

        private void resume() {
            unsetState(STATE_SUSPENDED);
            try {
                codec.channelRead(ctx, Unpooled.EMPTY_BUFFER);
                if (hasState(STATE_READ_COMPLETE_PENDING)) {
                    unsetState(STATE_READ_COMPLETE_PENDING);
                    codec.channelReadComplete(ctx);
                }
                if (hasState(STATE_READ_PENDING)) {
                    unsetState(STATE_READ_PENDING);
                    codec.read(ctx);
                }
            } catch (Exception e) {
                ctx.fireExceptionCaught(e);
            }
        }

        private void setState(int toSet) {
            state |= toSet;
        }

        private boolean hasState(int toCheck) {
            return (state & toCheck) == toCheck;

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free