Http3FrameCodec Class — netty Architecture
Architecture documentation for the Http3FrameCodec class in Http3FrameCodec.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 57499e74_1040_f300_12bb_215179e108be["Http3FrameCodec"] 50e04e81_eb2c_8eef_5e05_95116fe8e65f["Http3FrameCodec.java"] 57499e74_1040_f300_12bb_215179e108be -->|defined in| 50e04e81_eb2c_8eef_5e05_95116fe8e65f c4e8d7c5_9603_b528_219d_a82f333d9703["Http3FrameCodecFactory()"] 57499e74_1040_f300_12bb_215179e108be -->|method| c4e8d7c5_9603_b528_219d_a82f333d9703 d08e22bb_468c_9263_1648_2ad94efd5628["Http3FrameCodec()"] 57499e74_1040_f300_12bb_215179e108be -->|method| d08e22bb_468c_9263_1648_2ad94efd5628 be6560e3_c207_d655_9f18_f120edca475c["handlerAdded()"] 57499e74_1040_f300_12bb_215179e108be -->|method| be6560e3_c207_d655_9f18_f120edca475c f7f031b7_1830_ea2e_79b9_cbe1e41535f4["channelInactive()"] 57499e74_1040_f300_12bb_215179e108be -->|method| f7f031b7_1830_ea2e_79b9_cbe1e41535f4 8e959716_4283_14c4_3615_74bd8ff69a7b["handlerRemoved0()"] 57499e74_1040_f300_12bb_215179e108be -->|method| 8e959716_4283_14c4_3615_74bd8ff69a7b 552ee46c_e191_c31e_0760_893a4dc62d1b["channelRead()"] 57499e74_1040_f300_12bb_215179e108be -->|method| 552ee46c_e191_c31e_0760_893a4dc62d1b 4432f04f_81b6_0995_2792_9dc615b00b96["channelReadComplete()"] 57499e74_1040_f300_12bb_215179e108be -->|method| 4432f04f_81b6_0995_2792_9dc615b00b96 bc9d9e09_417f_cc2b_50ed_b48f93b8395c["connectionError()"] 57499e74_1040_f300_12bb_215179e108be -->|method| bc9d9e09_417f_cc2b_50ed_b48f93b8395c a9991e7a_1e1e_f455_19bd_4771a0c28625["decode()"] 57499e74_1040_f300_12bb_215179e108be -->|method| a9991e7a_1e1e_f455_19bd_4771a0c28625 d0f8d7ea_8076_8153_91a0_088e231e99a1["skipBytes()"] 57499e74_1040_f300_12bb_215179e108be -->|method| d0f8d7ea_8076_8153_91a0_088e231e99a1 8b0697bd_1098_91ad_7558_7e1c678364c7["decodeFrame()"] 57499e74_1040_f300_12bb_215179e108be -->|method| 8b0697bd_1098_91ad_7558_7e1c678364c7 40fb57c4_f85d_87ad_ac47_bdfc5af1b6d8["enforceMaxPayloadLength()"] 57499e74_1040_f300_12bb_215179e108be -->|method| 40fb57c4_f85d_87ad_ac47_bdfc5af1b6d8 bdd8ff0e_d030_965a_6ea5_7f31277ae36c["Http3SettingsFrame()"] 57499e74_1040_f300_12bb_215179e108be -->|method| bdd8ff0e_d030_965a_6ea5_7f31277ae36c
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java lines 58–822
final class Http3FrameCodec extends ByteToMessageDecoder implements ChannelOutboundHandler {
private final Http3FrameTypeValidator validator;
private final long maxHeaderListSize;
private final QpackDecoder qpackDecoder;
private final QpackEncoder qpackEncoder;
private final Http3RequestStreamCodecState encodeState;
private final Http3RequestStreamCodecState decodeState;
private final Http3Settings.NonStandardHttp3SettingsValidator nonStandardSettingsValidator;
private boolean firstFrame = true;
private boolean error;
private long type = -1;
private int payLoadLength = -1;
private QpackAttributes qpackAttributes;
private ReadResumptionListener readResumptionListener;
private WriteResumptionListener writeResumptionListener;
static Http3FrameCodecFactory newFactory(QpackDecoder qpackDecoder,
long maxHeaderListSize, QpackEncoder qpackEncoder) {
checkNotNull(qpackEncoder, "qpackEncoder");
checkNotNull(qpackDecoder, "qpackDecoder");
// QPACK decoder and encoder are shared between streams in a connection.
return (validator, encodeState, decodeState,
nonStandardSettingsValidator) -> new Http3FrameCodec(validator, qpackDecoder,
maxHeaderListSize, qpackEncoder, encodeState, decodeState, nonStandardSettingsValidator);
}
Http3FrameCodec(Http3FrameTypeValidator validator, QpackDecoder qpackDecoder,
long maxHeaderListSize, QpackEncoder qpackEncoder, Http3RequestStreamCodecState encodeState,
Http3RequestStreamCodecState decodeState,
Http3Settings.NonStandardHttp3SettingsValidator nonStandardSettingsValidator) {
this.validator = checkNotNull(validator, "validator");
this.qpackDecoder = checkNotNull(qpackDecoder, "qpackDecoder");
this.maxHeaderListSize = checkPositive(maxHeaderListSize, "maxHeaderListSize");
this.qpackEncoder = checkNotNull(qpackEncoder, "qpackEncoder");
this.encodeState = checkNotNull(encodeState, "encodeState");
this.decodeState = checkNotNull(decodeState, "decodeState");
this.nonStandardSettingsValidator = nonStandardSettingsValidator;
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
qpackAttributes = Http3.getQpackAttributes(ctx.channel().parent());
assert qpackAttributes != null;
initReadResumptionListenerIfRequired(ctx);
super.handlerAdded(ctx);
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
if (writeResumptionListener != null) {
writeResumptionListener.drain();
}
super.channelInactive(ctx);
}
@Override
protected void handlerRemoved0(ChannelHandlerContext ctx) throws Exception {
if (writeResumptionListener != null) {
// drain everything so we are sure we never leak anything.
writeResumptionListener.drain();
}
super.handlerRemoved0(ctx);
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf buffer;
if (msg instanceof QuicStreamFrame) {
QuicStreamFrame streamFrame = (QuicStreamFrame) msg;
buffer = streamFrame.content().retain();
streamFrame.release();
} else {
buffer = (ByteBuf) msg;
}
super.channelRead(ctx, buffer);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
Source
Frequently Asked Questions
What is the Http3FrameCodec class?
Http3FrameCodec is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java.
Where is Http3FrameCodec defined?
Http3FrameCodec is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java at line 58.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free