Home / Class/ PrefaceFrameListener Class — netty Architecture

PrefaceFrameListener Class — netty Architecture

Architecture documentation for the PrefaceFrameListener class in DefaultHttp2ConnectionDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  af231ad8_ae8c_ebec_d9d7_226af08e6f24["PrefaceFrameListener"]
  a43ecbf7_4477_1770_e9bd_6bd36bd824e3["DefaultHttp2ConnectionDecoder.java"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|defined in| a43ecbf7_4477_1770_e9bd_6bd36bd824e3
  ef9a3b25_ec9f_f99b_71ed_3efbcd8388ea["verifyPrefaceReceived()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| ef9a3b25_ec9f_f99b_71ed_3efbcd8388ea
  a9a6e3dd_b339_3553_1e73_f0026b13c4ae["onDataRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| a9a6e3dd_b339_3553_1e73_f0026b13c4ae
  4d5989cc_6339_6f87_868b_a436d0075e4a["onHeadersRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 4d5989cc_6339_6f87_868b_a436d0075e4a
  ceb0fd48_1f4b_1253_6b60_4a88d671c433["onPriorityRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| ceb0fd48_1f4b_1253_6b60_4a88d671c433
  f17f7216_ce2e_36bf_1376_2384370a35b1["onRstStreamRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| f17f7216_ce2e_36bf_1376_2384370a35b1
  da068e1d_3f2d_7c09_5aa9_f839e3ed555a["onSettingsAckRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| da068e1d_3f2d_7c09_5aa9_f839e3ed555a
  2e7a8b56_19d4_b081_6c1f_4ec815ec889b["onSettingsRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 2e7a8b56_19d4_b081_6c1f_4ec815ec889b
  15f28600_a160_733e_4b54_f496696f8cdb["onPingRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 15f28600_a160_733e_4b54_f496696f8cdb
  b1be5e44_b310_12d0_1c7d_86898f893b12["onPingAckRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| b1be5e44_b310_12d0_1c7d_86898f893b12
  1eaaf9ee_71d0_7014_1f1e_25d86629850c["onPushPromiseRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 1eaaf9ee_71d0_7014_1f1e_25d86629850c
  47b09ad8_2dfd_2f63_0614_d54157fdb276["onGoAwayRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 47b09ad8_2dfd_2f63_0614_d54157fdb276
  2f8204a7_43f9_050e_0ef8_d65744a07bb2["onWindowUpdateRead()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 2f8204a7_43f9_050e_0ef8_d65744a07bb2
  5c05c7ba_9c59_b9b3_7681_3399bc4f97a3["onUnknownFrame()"]
  af231ad8_ae8c_ebec_d9d7_226af08e6f24 -->|method| 5c05c7ba_9c59_b9b3_7681_3399bc4f97a3

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2ConnectionDecoder.java lines 696–798

    private final class PrefaceFrameListener implements Http2FrameListener {
        /**
         * Verifies that the HTTP/2 connection preface has been received from the remote endpoint.
         * It is possible that the current call to
         * {@link Http2FrameReader#readFrame(ChannelHandlerContext, ByteBuf, Http2FrameListener)} will have multiple
         * frames to dispatch. So it may be OK for this class to get legitimate frames for the first readFrame.
         */
        private void verifyPrefaceReceived() throws Http2Exception {
            if (!prefaceReceived()) {
                throw connectionError(PROTOCOL_ERROR, "Received non-SETTINGS as first frame.");
            }
        }

        @Override
        public int onDataRead(ChannelHandlerContext ctx, int streamId, ByteBuf data, int padding, boolean endOfStream)
                throws Http2Exception {
            verifyPrefaceReceived();
            return internalFrameListener.onDataRead(ctx, streamId, data, padding, endOfStream);
        }

        @Override
        public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int padding,
                boolean endOfStream) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onHeadersRead(ctx, streamId, headers, padding, endOfStream);
        }

        @Override
        public void onHeadersRead(ChannelHandlerContext ctx, int streamId, Http2Headers headers, int streamDependency,
                short weight, boolean exclusive, int padding, boolean endOfStream) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onHeadersRead(ctx, streamId, headers, streamDependency, weight,
                    exclusive, padding, endOfStream);
        }

        @Override
        public void onPriorityRead(ChannelHandlerContext ctx, int streamId, int streamDependency, short weight,
                boolean exclusive) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onPriorityRead(ctx, streamId, streamDependency, weight, exclusive);
        }

        @Override
        public void onRstStreamRead(ChannelHandlerContext ctx, int streamId, long errorCode) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onRstStreamRead(ctx, streamId, errorCode);
        }

        @Override
        public void onSettingsAckRead(ChannelHandlerContext ctx) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onSettingsAckRead(ctx);
        }

        @Override
        public void onSettingsRead(ChannelHandlerContext ctx, Http2Settings settings) throws Http2Exception {
            // The first settings should change the internalFrameListener to the "real" listener
            // that expects the preface to be verified.
            if (!prefaceReceived()) {
                internalFrameListener = new FrameReadListener();
            }
            internalFrameListener.onSettingsRead(ctx, settings);
        }

        @Override
        public void onPingRead(ChannelHandlerContext ctx, long data) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onPingRead(ctx, data);
        }

        @Override
        public void onPingAckRead(ChannelHandlerContext ctx, long data) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onPingAckRead(ctx, data);
        }

        @Override
        public void onPushPromiseRead(ChannelHandlerContext ctx, int streamId, int promisedStreamId,
                Http2Headers headers, int padding) throws Http2Exception {
            verifyPrefaceReceived();
            internalFrameListener.onPushPromiseRead(ctx, streamId, promisedStreamId, headers, padding);

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free