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()));
}
Source
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