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);
Defined In
Source
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