Home / Function/ decodeHeaderBlock() — netty Function Reference

decodeHeaderBlock() — netty Function Reference

Architecture documentation for the decodeHeaderBlock() function in SpdyHeaderBlockRawDecoder.java from the netty codebase.

Function java Buffer Allocators calls 1 called by 1

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

Called By

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