Http3RequestStreamEncodeStateValidator Class — netty Architecture
Architecture documentation for the Http3RequestStreamEncodeStateValidator class in Http3RequestStreamEncodeStateValidator.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 35fbecb2_27ff_1183_af47_baab108d3ae0["Http3RequestStreamEncodeStateValidator"] 0b723dc0_7a41_27b3_bd38_0416fe74e0a9["Http3RequestStreamEncodeStateValidator.java"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|defined in| 0b723dc0_7a41_27b3_bd38_0416fe74e0a9 993c46bd_c93a_441d_f93d_a3d353316ce5["write()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 993c46bd_c93a_441d_f93d_a3d353316ce5 7f3b8ff9_2c75_e49b_8bbd_581105ee3124["started()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 7f3b8ff9_2c75_e49b_8bbd_581105ee3124 21f1a3ca_2de3_eaa0_d5fc_56e6495e2dd5["receivedFinalHeaders()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 21f1a3ca_2de3_eaa0_d5fc_56e6495e2dd5 0108cfc9_d96d_701d_c1e9_cef1d17a8ec7["terminated()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 0108cfc9_d96d_701d_c1e9_cef1d17a8ec7 24ba9f0f_4388_7120_7cfc_0f5c4e535a52["State()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 24ba9f0f_4388_7120_7cfc_0f5c4e535a52 d0cf5161_3135_635e_f33c_53420a35c7e3["isStreamStarted()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| d0cf5161_3135_635e_f33c_53420a35c7e3 a347b63e_27a0_9e59_4cad_f7e0bfab1ace["isFinalHeadersReceived()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| a347b63e_27a0_9e59_4cad_f7e0bfab1ace 7080975a_aacf_ac69_a700_da76c4ee928b["isTrailersReceived()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 7080975a_aacf_ac69_a700_da76c4ee928b 6d5073ce_a14d_61fd_ac66_a1371360e0f3["isInformationalResponse()"] 35fbecb2_27ff_1183_af47_baab108d3ae0 -->|method| 6d5073ce_a14d_61fd_ac66_a1371360e0f3
Relationship Graph
Source Code
codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java lines 26–124
final class Http3RequestStreamEncodeStateValidator extends ChannelOutboundHandlerAdapter
implements Http3RequestStreamCodecState {
enum State {
None,
Headers,
FinalHeaders,
Trailers
}
private State state = State.None;
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
if (!(msg instanceof Http3RequestStreamFrame)) {
super.write(ctx, msg, promise);
return;
}
final Http3RequestStreamFrame frame = (Http3RequestStreamFrame) msg;
final State nextState = evaluateFrame(state, frame);
if (nextState == null) {
frameTypeUnexpected(ctx, msg);
return;
}
state = nextState;
super.write(ctx, msg, promise);
}
@Override
public boolean started() {
return isStreamStarted(state);
}
@Override
public boolean receivedFinalHeaders() {
return isFinalHeadersReceived(state);
}
@Override
public boolean terminated() {
return isTrailersReceived(state);
}
/**
* Evaluates the passed frame and returns the following:
* <ul>
* <li>Modified {@link State} if the state should be changed.</li>
* <li>Same {@link State} as the passed {@code state} if no state change is necessary</li>
* <li>{@code null} if the frame is unexpected</li>
* </ul>
*
* @param state Current state.
* @param frame to evaluate.
* @return Next {@link State} or {@code null} if the frame is invalid.
*/
@Nullable
static State evaluateFrame(State state, Http3RequestStreamFrame frame) {
if (frame instanceof Http3PushPromiseFrame || frame instanceof Http3UnknownFrame) {
// always allow push promise frames.
return state;
}
switch (state) {
case None:
case Headers:
if (!(frame instanceof Http3HeadersFrame)) {
return null;
}
return isInformationalResponse((Http3HeadersFrame) frame) ? State.Headers : State.FinalHeaders;
case FinalHeaders:
if (frame instanceof Http3HeadersFrame) {
if (isInformationalResponse((Http3HeadersFrame) frame)) {
// Information response after final response headers
return null;
}
// trailers
return State.Trailers;
}
return state;
case Trailers:
return null;
default:
throw new Error("Unexpected frame state: " + state);
}
Defined In
Source
Frequently Asked Questions
What is the Http3RequestStreamEncodeStateValidator class?
Http3RequestStreamEncodeStateValidator is a class in the netty codebase, defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java.
Where is Http3RequestStreamEncodeStateValidator defined?
Http3RequestStreamEncodeStateValidator is defined in codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java at line 26.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free