Http3RequestStreamValidationHandler Class — netty Architecture
Architecture documentation for the Http3RequestStreamValidationHandler class in Http3RequestStreamValidationHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 5d15be70_e004_6097_bf4e_460653eef37b["Http3RequestStreamValidationHandler"] 6c46708e_51ae_378a_5ac7_9fcb4a559f17["Http3RequestStreamValidationHandler.java"] 5d15be70_e004_6097_bf4e_460653eef37b -->|defined in| 6c46708e_51ae_378a_5ac7_9fcb4a559f17 d46a8ad6_87e6_2ce8_71a1_2cc0d3f9c264["ChannelHandler()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| d46a8ad6_87e6_2ce8_71a1_2cc0d3f9c264 028fa4ee_59ff_f2a0_3131_9ebdc96748e0["Http3RequestStreamValidationHandler()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| 028fa4ee_59ff_f2a0_3131_9ebdc96748e0 e507c4a7_5d91_9296_4892_b3445bfeec41["write()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| e507c4a7_5d91_9296_4892_b3445bfeec41 7eb82d3c_d46c_48eb_c142_ec762066c3e2["channelRead()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| 7eb82d3c_d46c_48eb_c142_ec762066c3e2 428ee99c_850f_4b02_96f8_02833d9a8661["userEventTriggered()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| 428ee99c_850f_4b02_96f8_02833d9a8661 22ba5f14_4d88_a618_2831_fc1b4abef8db["isSharable()"] 5d15be70_e004_6097_bf4e_460653eef37b -->|method| 22ba5f14_4d88_a618_2831_fc1b4abef8db
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java lines 34–139
final class Http3RequestStreamValidationHandler extends Http3FrameTypeDuplexValidationHandler<Http3RequestStreamFrame> {
private final boolean server;
private final BooleanSupplier goAwayReceivedSupplier;
private final QpackAttributes qpackAttributes;
private final QpackDecoder qpackDecoder;
private final Http3RequestStreamCodecState decodeState;
private final Http3RequestStreamCodecState encodeState;
private boolean clientHeadRequest;
private long expectedLength = -1;
private long seenLength;
static ChannelHandler newServerValidator(QpackAttributes qpackAttributes, QpackDecoder decoder,
Http3RequestStreamCodecState encodeState,
Http3RequestStreamCodecState decodeState) {
return new Http3RequestStreamValidationHandler(true, () -> false, qpackAttributes, decoder,
encodeState, decodeState);
}
static ChannelHandler newClientValidator(BooleanSupplier goAwayReceivedSupplier, QpackAttributes qpackAttributes,
QpackDecoder decoder, Http3RequestStreamCodecState encodeState,
Http3RequestStreamCodecState decodeState) {
return new Http3RequestStreamValidationHandler(false, goAwayReceivedSupplier, qpackAttributes, decoder,
encodeState, decodeState);
}
private Http3RequestStreamValidationHandler(boolean server, BooleanSupplier goAwayReceivedSupplier,
QpackAttributes qpackAttributes, QpackDecoder qpackDecoder,
Http3RequestStreamCodecState encodeState,
Http3RequestStreamCodecState decodeState) {
super(Http3RequestStreamFrame.class);
this.server = server;
this.goAwayReceivedSupplier = goAwayReceivedSupplier;
this.qpackAttributes = qpackAttributes;
this.qpackDecoder = qpackDecoder;
this.decodeState = decodeState;
this.encodeState = encodeState;
}
@Override
void write(ChannelHandlerContext ctx, Http3RequestStreamFrame frame, ChannelPromise promise) {
if (!server) {
if (!validateClientWrite(frame, promise, ctx, goAwayReceivedSupplier, encodeState)) {
return;
}
if (frame instanceof Http3HeadersFrame) {
clientHeadRequest = HEAD.asciiName().equals(((Http3HeadersFrame) frame).headers().method());
}
}
ctx.write(frame, promise);
}
@Override
void channelRead(ChannelHandlerContext ctx, Http3RequestStreamFrame frame) {
if (frame instanceof Http3PushPromiseFrame) {
if (server) {
// Server should not receive a push promise
// https://quicwg.org/base-drafts/draft-ietf-quic-http.html#name-push_promise
frameTypeUnexpected(ctx, frame);
} else {
ctx.fireChannelRead(frame);
}
return;
}
if (frame instanceof Http3HeadersFrame) {
Http3HeadersFrame headersFrame = (Http3HeadersFrame) frame;
long maybeContentLength = validateHeaderFrameRead(headersFrame, ctx, decodeState);
if (maybeContentLength >= 0) {
expectedLength = maybeContentLength;
} else if (maybeContentLength == INVALID_FRAME_READ) {
return;
}
}
if (frame instanceof Http3DataFrame) {
final Http3DataFrame dataFrame = (Http3DataFrame) frame;
long maybeContentLength = validateDataFrameRead(dataFrame, ctx, expectedLength, seenLength,
clientHeadRequest);
if (maybeContentLength >= 0) {
seenLength = maybeContentLength;
Defined In
Source
Frequently Asked Questions
What is the Http3RequestStreamValidationHandler class?
Http3RequestStreamValidationHandler is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java.
Where is Http3RequestStreamValidationHandler defined?
Http3RequestStreamValidationHandler is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java at line 34.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free