SpdyHeaderBlockRawDecoder Class — netty Architecture
Architecture documentation for the SpdyHeaderBlockRawDecoder class in SpdyHeaderBlockRawDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 77ffda47_df0d_5f3f_1a09_80e71de6135b["SpdyHeaderBlockRawDecoder"] 69981a23_470b_b9bb_c947_7393dc57e42a["SpdyHeaderBlockRawDecoder.java"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|defined in| 69981a23_470b_b9bb_c947_7393dc57e42a 16214988_9bdf_bd49_e537_6c2faf75e396["SpdyHeaderBlockRawDecoder()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| 16214988_9bdf_bd49_e537_6c2faf75e396 7c72b262_15bd_7c52_93f2_ff1a0ef2ebde["readLengthField()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| 7c72b262_15bd_7c52_93f2_ff1a0ef2ebde 29a55946_3e46_6039_dd0f_cef33fd9b15d["decode()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| 29a55946_3e46_6039_dd0f_cef33fd9b15d ba703864_8c4c_a402_0ea4_c1e98dc38154["decodeHeaderBlock()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| ba703864_8c4c_a402_0ea4_c1e98dc38154 6db69abb_a019_ee35_cad4_303556aaf603["endHeaderBlock()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| 6db69abb_a019_ee35_cad4_303556aaf603 ad6ca907_f450_8f0e_fe5a_bf99eec38567["end()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| ad6ca907_f450_8f0e_fe5a_bf99eec38567 611e648f_06b9_6900_5c16_b5fdcac2a6a1["releaseBuffer()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b -->|method| 611e648f_06b9_6900_5c16_b5fdcac2a6a1
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java lines 26–308
public class SpdyHeaderBlockRawDecoder extends SpdyHeaderBlockDecoder {
private static final int LENGTH_FIELD_SIZE = 4;
private final int maxHeaderSize;
private State state;
private ByteBuf cumulation;
private int headerSize;
private int numHeaders;
private int length;
private String name;
private enum State {
READ_NUM_HEADERS,
READ_NAME_LENGTH,
READ_NAME,
SKIP_NAME,
READ_VALUE_LENGTH,
READ_VALUE,
SKIP_VALUE,
END_HEADER_BLOCK,
ERROR
}
public SpdyHeaderBlockRawDecoder(SpdyVersion spdyVersion, int maxHeaderSize) {
ObjectUtil.checkNotNull(spdyVersion, "spdyVersion");
this.maxHeaderSize = maxHeaderSize;
state = State.READ_NUM_HEADERS;
}
private static int readLengthField(ByteBuf buffer) {
int length = getSignedInt(buffer, buffer.readerIndex());
buffer.skipBytes(LENGTH_FIELD_SIZE);
return length;
}
@Override
void decode(ByteBufAllocator alloc, ByteBuf headerBlock, SpdyHeadersFrame frame) throws Exception {
ObjectUtil.checkNotNull(headerBlock, "headerBlock");
ObjectUtil.checkNotNull(frame, "frame");
if (cumulation == null) {
decodeHeaderBlock(headerBlock, frame);
if (headerBlock.isReadable()) {
cumulation = alloc.buffer(headerBlock.readableBytes());
cumulation.writeBytes(headerBlock);
}
} else {
cumulation.writeBytes(headerBlock);
decodeHeaderBlock(cumulation, frame);
if (cumulation.isReadable()) {
cumulation.discardReadBytes();
} else {
releaseBuffer();
}
}
}
protected void decodeHeaderBlock(ByteBuf headerBlock, SpdyHeadersFrame frame) throws Exception {
int skipLength;
while (headerBlock.isReadable()) {
switch(state) {
case READ_NUM_HEADERS:
if (headerBlock.readableBytes() < LENGTH_FIELD_SIZE) {
return;
}
numHeaders = readLengthField(headerBlock);
if (numHeaders < 0) {
state = State.ERROR;
frame.setInvalid();
} else if (numHeaders == 0) {
state = State.END_HEADER_BLOCK;
} else {
state = State.READ_NAME_LENGTH;
}
break;
Source
Frequently Asked Questions
What is the SpdyHeaderBlockRawDecoder class?
SpdyHeaderBlockRawDecoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java.
Where is SpdyHeaderBlockRawDecoder defined?
SpdyHeaderBlockRawDecoder is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java at line 26.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free