Home / Function/ decode() — netty Function Reference

decode() — netty Function Reference

Architecture documentation for the decode() function in Http2StreamFrameToHttpObjectCodec.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f664b8a7_c178_2d04_e4cb_fdcf0adeceb5["decode()"]
  28068ec0_f470_e63a_089d_e0d46f43718e["Http2StreamFrameToHttpObjectCodec"]
  f664b8a7_c178_2d04_e4cb_fdcf0adeceb5 -->|defined in| 28068ec0_f470_e63a_089d_e0d46f43718e
  d414c489_fe8f_157d_99ae_be0434ba0f1e["isInformationalResponseHeaderFrame()"]
  f664b8a7_c178_2d04_e4cb_fdcf0adeceb5 -->|calls| d414c489_fe8f_157d_99ae_be0434ba0f1e
  a35070c1_935f_7a21_de02_ebb8de0fcf81["isContentAlwaysEmpty()"]
  f664b8a7_c178_2d04_e4cb_fdcf0adeceb5 -->|calls| a35070c1_935f_7a21_de02_ebb8de0fcf81
  style f664b8a7_c178_2d04_e4cb_fdcf0adeceb5 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-http2/src/main/java/io/netty/handler/codec/http2/Http2StreamFrameToHttpObjectCodec.java lines 84–127

    @Override
    protected void decode(ChannelHandlerContext ctx, Http2StreamFrame frame, List<Object> out) throws Exception {
        if (frame instanceof Http2HeadersFrame) {
            Http2HeadersFrame headersFrame = (Http2HeadersFrame) frame;
            Http2Headers headers = headersFrame.headers();
            Http2FrameStream stream = headersFrame.stream();
            int id = stream == null ? 0 : stream.id();

            final CharSequence status = headers.status();

            // 1xx response (excluding 101) is a special case where Http2HeadersFrame#isEndStream=false
            // but we need to decode it as a FullHttpResponse to play nice with HttpObjectAggregator.
            if (null != status && isInformationalResponseHeaderFrame(status)) {
                final FullHttpMessage fullMsg = newFullMessage(id, headers, ctx.alloc());
                out.add(fullMsg);
                return;
            }

            if (headersFrame.isEndStream()) {
                if (headers.method() == null && status == null) {
                    LastHttpContent last = new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER, validateHeaders);
                    HttpConversionUtil.addHttp2ToHttpHeaders(id, headers, last.trailingHeaders(),
                                                             HttpVersion.HTTP_1_1, true, true);
                    out.add(last);
                } else {
                    FullHttpMessage full = newFullMessage(id, headers, ctx.alloc());
                    out.add(full);
                }
            } else {
                HttpMessage req = newMessage(id, headers);
                if ((status == null || !isContentAlwaysEmpty(status)) && !HttpUtil.isContentLengthSet(req)) {
                    req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED);
                }
                out.add(req);
            }
        } else if (frame instanceof Http2DataFrame) {
            Http2DataFrame dataFrame = (Http2DataFrame) frame;
            if (dataFrame.isEndStream()) {
                out.add(new DefaultLastHttpContent(dataFrame.content().retain(), validateHeaders));
            } else {
                out.add(new DefaultHttpContent(dataFrame.content().retain()));
            }
        }
    }

Domain

Subdomains

Frequently Asked Questions

What does decode() do?
decode() is a function in the netty codebase, defined in codec-http2/src/main/java/io/netty/handler/codec/http2/Http2StreamFrameToHttpObjectCodec.java.
Where is decode() defined?
decode() is defined in codec-http2/src/main/java/io/netty/handler/codec/http2/Http2StreamFrameToHttpObjectCodec.java at line 84.
What does decode() call?
decode() calls 2 function(s): isContentAlwaysEmpty, isInformationalResponseHeaderFrame.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free