Home / Class/ SpdyFrameDecoder Class — netty Architecture

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);

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