decodeHeaderBlock() — netty Function Reference
Architecture documentation for the decodeHeaderBlock() function in SpdyHeaderBlockRawDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD ba703864_8c4c_a402_0ea4_c1e98dc38154["decodeHeaderBlock()"] 77ffda47_df0d_5f3f_1a09_80e71de6135b["SpdyHeaderBlockRawDecoder"] ba703864_8c4c_a402_0ea4_c1e98dc38154 -->|defined in| 77ffda47_df0d_5f3f_1a09_80e71de6135b 29a55946_3e46_6039_dd0f_cef33fd9b15d["decode()"] 29a55946_3e46_6039_dd0f_cef33fd9b15d -->|calls| ba703864_8c4c_a402_0ea4_c1e98dc38154 7c72b262_15bd_7c52_93f2_ff1a0ef2ebde["readLengthField()"] ba703864_8c4c_a402_0ea4_c1e98dc38154 -->|calls| 7c72b262_15bd_7c52_93f2_ff1a0ef2ebde style ba703864_8c4c_a402_0ea4_c1e98dc38154 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java lines 87–281
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;
case READ_NAME_LENGTH:
if (headerBlock.readableBytes() < LENGTH_FIELD_SIZE) {
return;
}
length = readLengthField(headerBlock);
// Recipients of a zero-length name must issue a stream error
if (length <= 0) {
state = State.ERROR;
frame.setInvalid();
} else if (length > maxHeaderSize || headerSize > maxHeaderSize - length) {
headerSize = maxHeaderSize + 1;
state = State.SKIP_NAME;
frame.setTruncated();
} else {
headerSize += length;
state = State.READ_NAME;
}
break;
case READ_NAME:
if (headerBlock.readableBytes() < length) {
return;
}
byte[] nameBytes = new byte[length];
headerBlock.readBytes(nameBytes);
name = new String(nameBytes, StandardCharsets.UTF_8);
// Check for identically named headers
if (frame.headers().contains(name)) {
state = State.ERROR;
frame.setInvalid();
} else {
state = State.READ_VALUE_LENGTH;
}
break;
case SKIP_NAME:
skipLength = Math.min(headerBlock.readableBytes(), length);
headerBlock.skipBytes(skipLength);
length -= skipLength;
if (length == 0) {
state = State.READ_VALUE_LENGTH;
}
break;
case READ_VALUE_LENGTH:
if (headerBlock.readableBytes() < LENGTH_FIELD_SIZE) {
return;
}
length = readLengthField(headerBlock);
// Recipients of illegal value fields must issue a stream error
if (length < 0) {
state = State.ERROR;
frame.setInvalid();
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does decodeHeaderBlock() do?
decodeHeaderBlock() is a function in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java.
Where is decodeHeaderBlock() defined?
decodeHeaderBlock() is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHeaderBlockRawDecoder.java at line 87.
What does decodeHeaderBlock() call?
decodeHeaderBlock() calls 1 function(s): readLengthField.
What calls decodeHeaderBlock()?
decodeHeaderBlock() is called by 1 function(s): decode.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free