Home / Class/ FrameListener Class — netty Architecture

FrameListener Class — netty Architecture

Architecture documentation for the FrameListener class in Http2FrameCodec.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  c7728670_9ef4_3d0d_475d_7c991c96be4c["FrameListener"]
  bc7ad616_b6c9_c3f9_4388_1ec2dab7e120["Http2FrameCodec.java"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|defined in| bc7ad616_b6c9_c3f9_4388_1ec2dab7e120
  44279444_9173_3345_1bd5_3e6243c034f6["onUnknownFrame()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 44279444_9173_3345_1bd5_3e6243c034f6
  3861e659_f29c_43f1_733d_176b0ebe50fd["onSettingsRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 3861e659_f29c_43f1_733d_176b0ebe50fd
  ce7e253e_2c73_902b_030b_b8c61ccbe217["onPingRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| ce7e253e_2c73_902b_030b_b8c61ccbe217
  4ecfd2fe_b49a_c0d6_1cbb_dfccf30f277e["onPingAckRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 4ecfd2fe_b49a_c0d6_1cbb_dfccf30f277e
  848db713_1bc2_fe18_fe28_cdc544f5cdfe["onRstStreamRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 848db713_1bc2_fe18_fe28_cdc544f5cdfe
  5f74091e_359e_7103_341e_603dcf1148b6["onWindowUpdateRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 5f74091e_359e_7103_341e_603dcf1148b6
  987088ab_7a53_3b70_edad_8a8c7fda9323["onHeadersRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 987088ab_7a53_3b70_edad_8a8c7fda9323
  c2979b96_390d_7b64_2c99_e3e669d4bbfa["onDataRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| c2979b96_390d_7b64_2c99_e3e669d4bbfa
  e99fb505_43d8_c6bf_b7ec_53a8a8c68ea4["onGoAwayRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| e99fb505_43d8_c6bf_b7ec_53a8a8c68ea4
  4c576026_e170_7ae6_899f_769c98506ef5["onPriorityRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 4c576026_e170_7ae6_899f_769c98506ef5
  353af1f5_ccdd_deef_72d9_d19b13c3dd1c["onSettingsAckRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 353af1f5_ccdd_deef_72d9_d19b13c3dd1c
  ca954d49_60aa_a980_7f56_a7c5d06e2116["onPushPromiseRead()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| ca954d49_60aa_a980_7f56_a7c5d06e2116
  205fe3df_f5ab_a4b8_a14b_1aec18a7bc52["Http2FrameStream()"]
  c7728670_9ef4_3d0d_475d_7c991c96be4c -->|method| 205fe3df_f5ab_a4b8_a14b_1aec18a7bc52

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/Http2FrameCodec.java lines 590–707

    private final class FrameListener implements Http2FrameListener {

        @Override
        public void onUnknownFrame(
                ChannelHandlerContext ctx, byte frameType, int streamId, Http2Flags flags, ByteBuf payload) {
            if (streamId == 0) {
                // Ignore unknown frames on connection stream, for example: HTTP/2 GREASE testing
                return;
            }
            Http2FrameStream stream = requireStream(streamId);
            onHttp2Frame(ctx, newHttp2UnknownFrame(frameType, streamId, flags, payload.retain()).stream(stream));
        }

        @Override
        public void onSettingsRead(ChannelHandlerContext ctx, Http2Settings settings) {
            onHttp2Frame(ctx, new DefaultHttp2SettingsFrame(settings));
        }

        @Override
        public void onPingRead(ChannelHandlerContext ctx, long data) {
            onHttp2Frame(ctx, new DefaultHttp2PingFrame(data, false));
        }

        @Override
        public void onPingAckRead(ChannelHandlerContext ctx, long data) {
            onHttp2Frame(ctx, new DefaultHttp2PingFrame(data, true));
        }

        @Override
        public void onRstStreamRead(ChannelHandlerContext ctx, int streamId, long errorCode) {
            Http2FrameStream stream = requireStream(streamId);
            onHttp2Frame(ctx, new DefaultHttp2ResetFrame(errorCode).stream(stream));
        }

        @Override
        public void onWindowUpdateRead(ChannelHandlerContext ctx, int streamId, int windowSizeIncrement) {
            if (streamId == 0) {
                // Ignore connection window updates.
                return;
            }
            Http2FrameStream stream = requireStream(streamId);
            onHttp2Frame(ctx, new DefaultHttp2WindowUpdateFrame(windowSizeIncrement).stream(stream));
        }

        @Override
        public void onHeadersRead(ChannelHandlerContext ctx, int streamId,
                                  Http2Headers headers, int streamDependency, short weight, boolean
                                          exclusive, int padding, boolean endStream) {
            onHeadersRead(ctx, streamId, headers, padding, endStream);
        }

        @Override
        public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers,
                                  int padding, boolean endOfStream) {
            Http2FrameStream stream = requireStream(streamId);
            onHttp2Frame(ctx, new DefaultHttp2HeadersFrame(headers, endOfStream, padding).stream(stream));
        }

        @Override
        public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding,
                              boolean endOfStream) {
            Http2FrameStream stream = requireStream(streamId);
            final Http2DataFrame dataframe;
            try {
                dataframe = new DefaultHttp2DataFrame(data.retain(), endOfStream, padding);
            } catch (IllegalArgumentException e) {
                // Might be thrown in case of invalid padding / length.
                data.release();
                throw e;
            }
            dataframe.stream(stream);
            onHttp2Frame(ctx, dataframe);
            // We return the bytes in consumeBytes() once the stream channel consumed the bytes.
            return 0;
        }

        @Override
        public void onGoAwayRead(ChannelHandlerContext ctx, int lastStreamId, long errorCode, ByteBuf debugData) {
            onHttp2Frame(ctx, new DefaultHttp2GoAwayFrame(lastStreamId, errorCode, debugData.retain()));
        }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free