SpdyFrameDecoder Class — netty Architecture
Architecture documentation for the SpdyFrameDecoder class in SpdyFrameDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD d466aa70_56c1_4a3c_18e4_88294be3659b["SpdyFrameDecoder"] b72bbeda_d69a_d326_5b37_be897025f029["SpdyFrameDecoder.java"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|defined in| b72bbeda_d69a_d326_5b37_be897025f029 d8bebeef_97d3_add3_a097_e487f1ffe845["SpdyFrameDecoder()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| d8bebeef_97d3_add3_a097_e487f1ffe845 d733ec80_8d45_78bf_73a3_4ca9a6e4e860["decode()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| d733ec80_8d45_78bf_73a3_4ca9a6e4e860 74ae8469_41de_63b7_e141_8a65d5c87108["hasFlag()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| 74ae8469_41de_63b7_e141_8a65d5c87108 494d4d54_a335_a1ab_8d57_a8b522f9cbc2["State()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| 494d4d54_a335_a1ab_8d57_a8b522f9cbc2 eba2fe4a_1ab8_91df_a6a8_371a561c0e47["decodeUnknownFrame()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| eba2fe4a_1ab8_91df_a6a8_371a561c0e47 6c4f3872_c344_d38c_316d_a3c0c6e0e836["isValidUnknownFrameHeader()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| 6c4f3872_c344_d38c_316d_a3c0c6e0e836 fe196e54_3dae_3168_c8af_687feab92143["isValidFrameHeader()"] d466aa70_56c1_4a3c_18e4_88294be3659b -->|method| fe196e54_3dae_3168_c8af_687feab92143
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameDecoder.java lines 49–489
public class SpdyFrameDecoder {
protected final SpdyFrameDecoderDelegate delegate;
protected final int spdyVersion;
private final int maxChunkSize;
private int frameType;
private State state;
// SPDY common header fields
private byte flags;
private int length;
private int streamId;
private int numSettings;
private enum State {
READ_COMMON_HEADER,
READ_DATA_FRAME,
READ_SYN_STREAM_FRAME,
READ_SYN_REPLY_FRAME,
READ_RST_STREAM_FRAME,
READ_SETTINGS_FRAME,
READ_SETTING,
READ_PING_FRAME,
READ_GOAWAY_FRAME,
READ_HEADERS_FRAME,
READ_WINDOW_UPDATE_FRAME,
READ_UNKNOWN_FRAME,
READ_HEADER_BLOCK,
DISCARD_FRAME,
FRAME_ERROR
}
/**
* Creates a new instance with the specified {@code version}
* and the default {@code maxChunkSize (8192)}.
*/
public SpdyFrameDecoder(SpdyVersion spdyVersion, SpdyFrameDecoderDelegate delegate) {
this(spdyVersion, delegate, 8192);
}
/**
* Creates a new instance with the specified parameters.
*/
public SpdyFrameDecoder(SpdyVersion spdyVersion, SpdyFrameDecoderDelegate delegate, int maxChunkSize) {
this.spdyVersion = ObjectUtil.checkNotNull(spdyVersion, "spdyVersion").version();
this.delegate = ObjectUtil.checkNotNull(delegate, "delegate");
this.maxChunkSize = ObjectUtil.checkPositive(maxChunkSize, "maxChunkSize");
state = State.READ_COMMON_HEADER;
}
public void decode(ByteBuf buffer) {
boolean last;
int statusCode;
while (true) {
switch(state) {
case READ_COMMON_HEADER:
if (buffer.readableBytes() < SPDY_HEADER_SIZE) {
return;
}
int frameOffset = buffer.readerIndex();
int flagsOffset = frameOffset + SPDY_HEADER_FLAGS_OFFSET;
int lengthOffset = frameOffset + SPDY_HEADER_LENGTH_OFFSET;
buffer.skipBytes(SPDY_HEADER_SIZE);
boolean control = (buffer.getByte(frameOffset) & 0x80) != 0;
int version;
if (control) {
// Decode control frame common header
version = getUnsignedShort(buffer, frameOffset) & 0x7FFF;
frameType = getUnsignedShort(buffer, frameOffset + SPDY_HEADER_TYPE_OFFSET);
streamId = 0; // Default to session Stream-ID
} else {
// Decode data frame common header
version = spdyVersion; // Default to expected version
frameType = SPDY_DATA_FRAME;
streamId = getUnsignedInt(buffer, frameOffset);
Source
Frequently Asked Questions
What is the SpdyFrameDecoder class?
SpdyFrameDecoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameDecoder.java.
Where is SpdyFrameDecoder defined?
SpdyFrameDecoder is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyFrameDecoder.java at line 49.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free