Http3ControlStreamInboundHandler Class — netty Architecture
Architecture documentation for the Http3ControlStreamInboundHandler class in Http3ControlStreamInboundHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a["Http3ControlStreamInboundHandler"] 962d9bec_657d_ee43_1a3c_6ac7f20104fb["Http3ControlStreamInboundHandler.java"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|defined in| 962d9bec_657d_ee43_1a3c_6ac7f20104fb f7969e76_5364_d5b3_78bd_74c9a17eddbe["Http3ControlStreamInboundHandler()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| f7969e76_5364_d5b3_78bd_74c9a17eddbe 24bb57e4_f4a3_573d_cda3_8f432f6ed2d8["isServer()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 24bb57e4_f4a3_573d_cda3_8f432f6ed2d8 595c7669_5e01_389a_a265_6538ce4b1079["isGoAwayReceived()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 595c7669_5e01_389a_a265_6538ce4b1079 e43433d9_c5c3_3783_799a_e971c51269d9["maxPushIdReceived()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| e43433d9_c5c3_3783_799a_e971c51269d9 bdb44f5b_93a9_3f66_dff0_5b4f9abcd0ea["forwardControlFrames()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| bdb44f5b_93a9_3f66_dff0_5b4f9abcd0ea 5bdc0c1e_fda6_8556_2231_2ff645d433c7["handlerAdded()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 5bdc0c1e_fda6_8556_2231_2ff645d433c7 3cc0bf8d_689a_4fb1_7166_c2db6dc6df63["readFrameDiscarded()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 3cc0bf8d_689a_4fb1_7166_c2db6dc6df63 e1f1a7ae_5b21_5e0c_4d99_5ac309dfe1d9["channelRead()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| e1f1a7ae_5b21_5e0c_4d99_5ac309dfe1d9 26a29f3a_f6d2_e6f7_bb54_8d431ede4a6e["handleHttp3SettingsFrame()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 26a29f3a_f6d2_e6f7_bb54_8d431ede4a6e b709faf7_6fde_28f8_c2b5_909b643ca464["handleHttp3GoAwayFrame()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| b709faf7_6fde_28f8_c2b5_909b643ca464 67c08639_8a9a_85b2_08bb_7f127dc08474["handleHttp3MaxPushIdFrame()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 67c08639_8a9a_85b2_08bb_7f127dc08474 5245cc82_022f_2aaf_56bb_2cc8275f4a9f["handleHttp3CancelPushFrame()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| 5245cc82_022f_2aaf_56bb_2cc8275f4a9f f4e4173c_94c5_9e27_28fd_c10cad2db299["channelReadComplete()"] 482a62ae_e5d4_afc5_e7a7_ded7c1b1758a -->|method| f4e4173c_94c5_9e27_28fd_c10cad2db299
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java lines 45–321
final class Http3ControlStreamInboundHandler extends Http3FrameTypeInboundValidationHandler<Http3ControlStreamFrame> {
final boolean server;
private final ChannelHandler controlFrameHandler;
private final QpackEncoder qpackEncoder;
private final Http3ControlStreamOutboundHandler remoteControlStreamHandler;
private boolean firstFrameRead;
private Long receivedGoawayId;
private Long receivedMaxPushId;
Http3ControlStreamInboundHandler(boolean server, @Nullable ChannelHandler controlFrameHandler,
QpackEncoder qpackEncoder,
Http3ControlStreamOutboundHandler remoteControlStreamHandler) {
super(Http3ControlStreamFrame.class);
this.server = server;
this.controlFrameHandler = controlFrameHandler;
this.qpackEncoder = qpackEncoder;
this.remoteControlStreamHandler = remoteControlStreamHandler;
}
boolean isServer() {
return server;
}
boolean isGoAwayReceived() {
return receivedGoawayId != null;
}
long maxPushIdReceived() {
return receivedMaxPushId == null ? -1 : receivedMaxPushId;
}
private boolean forwardControlFrames() {
return controlFrameHandler != null;
}
@Override
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
super.handlerAdded(ctx);
// The user want's to be notified about control frames, add the handler to the pipeline.
if (controlFrameHandler != null) {
ctx.pipeline().addLast(controlFrameHandler);
}
}
@Override
void readFrameDiscarded(ChannelHandlerContext ctx, Object discardedFrame) {
if (!firstFrameRead && !(discardedFrame instanceof Http3SettingsFrame)) {
connectionError(ctx, Http3ErrorCode.H3_MISSING_SETTINGS, "Missing settings frame.", forwardControlFrames());
}
}
@Override
void channelRead(ChannelHandlerContext ctx, Http3ControlStreamFrame frame) throws QpackException {
boolean isSettingsFrame = frame instanceof Http3SettingsFrame;
if (!firstFrameRead && !isSettingsFrame) {
connectionError(ctx, H3_MISSING_SETTINGS, "Missing settings frame.", forwardControlFrames());
ReferenceCountUtil.release(frame);
return;
}
if (firstFrameRead && isSettingsFrame) {
connectionError(ctx, H3_FRAME_UNEXPECTED, "Second settings frame received.", forwardControlFrames());
ReferenceCountUtil.release(frame);
return;
}
firstFrameRead = true;
final boolean valid;
if (isSettingsFrame) {
valid = handleHttp3SettingsFrame(ctx, (Http3SettingsFrame) frame);
} else if (frame instanceof Http3GoAwayFrame) {
valid = handleHttp3GoAwayFrame(ctx, (Http3GoAwayFrame) frame);
} else if (frame instanceof Http3MaxPushIdFrame) {
valid = handleHttp3MaxPushIdFrame(ctx, (Http3MaxPushIdFrame) frame);
} else if (frame instanceof Http3CancelPushFrame) {
valid = handleHttp3CancelPushFrame(ctx, (Http3CancelPushFrame) frame);
} else {
// We don't need to do any special handling for Http3UnknownFrames as we either pass these to the next#
// handler or release these directly.
assert frame instanceof Http3UnknownFrame;
valid = true;
}
Defined In
Source
Frequently Asked Questions
What is the Http3ControlStreamInboundHandler class?
Http3ControlStreamInboundHandler is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java.
Where is Http3ControlStreamInboundHandler defined?
Http3ControlStreamInboundHandler is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java at line 45.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free