Home / Class/ SpdyHttpEncoder Class — netty Architecture

SpdyHttpEncoder Class — netty Architecture

Architecture documentation for the SpdyHttpEncoder class in SpdyHttpEncoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb["SpdyHttpEncoder"]
  24dcdade_99f3_f269_fe3e_1004812a7428["SpdyHttpEncoder.java"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|defined in| 24dcdade_99f3_f269_fe3e_1004812a7428
  c5fabd8d_037d_1be0_1e67_19eb37c6d756["SpdyHttpEncoder()"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| c5fabd8d_037d_1be0_1e67_19eb37c6d756
  9aa81464_45bd_d2c4_770c_f46f2337d072["encode()"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 9aa81464_45bd_d2c4_770c_f46f2337d072
  9e19a607_95cc_5b52_189e_a5072a72aa56["SpdySynStreamFrame()"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 9e19a607_95cc_5b52_189e_a5072a72aa56
  0aeff057_9424_398d_c320_e72e9d1c434b["SpdyHeadersFrame()"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 0aeff057_9424_398d_c320_e72e9d1c434b
  4b3a9241_a033_6042_cea3_ac272e0a6928["isLast()"]
  18ed3381_f0b5_3753_fac7_fb58d0f9ddbb -->|method| 4b3a9241_a033_6042_cea3_ac272e0a6928

Relationship Graph

Source Code

codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java lines 123–332

public class SpdyHttpEncoder extends MessageToMessageEncoder<HttpObject> {

    private int currentStreamId;

    private final boolean validateHeaders;
    private final boolean headersToLowerCase;

    /**
     * Creates a new instance.
     *
     * @param version the protocol version
     */
    public SpdyHttpEncoder(SpdyVersion version) {
        this(version, true, true);
    }

    /**
     * Creates a new instance.
     *
     * @param version            the protocol version
     * @param headersToLowerCase convert header names to lowercase. In a controlled environment,
     *                           one can disable the conversion.
     * @param validateHeaders    validate the header names and values when adding them to the {@link SpdyHeaders}
     */
    public SpdyHttpEncoder(SpdyVersion version, boolean headersToLowerCase, boolean validateHeaders) {
        super(HttpObject.class);
        ObjectUtil.checkNotNull(version, "version");
        this.headersToLowerCase = headersToLowerCase;
        this.validateHeaders = validateHeaders;
    }

    @Override
    protected void encode(ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception {

        boolean valid = false;
        boolean last = false;

        if (msg instanceof HttpRequest) {

            HttpRequest httpRequest = (HttpRequest) msg;
            SpdySynStreamFrame spdySynStreamFrame = createSynStreamFrame(httpRequest);
            out.add(spdySynStreamFrame);

            last = spdySynStreamFrame.isLast() || spdySynStreamFrame.isUnidirectional();
            valid = true;
        }
        if (msg instanceof HttpResponse) {

            HttpResponse httpResponse = (HttpResponse) msg;
            SpdyHeadersFrame spdyHeadersFrame = createHeadersFrame(httpResponse);
            out.add(spdyHeadersFrame);

            last = spdyHeadersFrame.isLast();
            valid = true;
        }
        if (msg instanceof HttpContent && !last) {

            HttpContent chunk = (HttpContent) msg;

            chunk.content().retain();
            SpdyDataFrame spdyDataFrame = new DefaultSpdyDataFrame(currentStreamId, chunk.content());
            if (chunk instanceof LastHttpContent) {
                LastHttpContent trailer = (LastHttpContent) chunk;
                HttpHeaders trailers = trailer.trailingHeaders();
                if (trailers.isEmpty()) {
                    spdyDataFrame.setLast(true);
                    out.add(spdyDataFrame);
                } else {
                    // Create SPDY HEADERS frame out of trailers
                    SpdyHeadersFrame spdyHeadersFrame = new DefaultSpdyHeadersFrame(currentStreamId, validateHeaders);
                    spdyHeadersFrame.setLast(true);
                    Iterator<Entry<CharSequence, CharSequence>> itr = trailers.iteratorCharSequence();
                    while (itr.hasNext()) {
                        Map.Entry<CharSequence, CharSequence> entry = itr.next();
                        final CharSequence headerName =
                                headersToLowerCase ? AsciiString.of(entry.getKey()).toLowerCase() : entry.getKey();
                        spdyHeadersFrame.headers().add(headerName, entry.getValue());
                    }

                    // Write DATA frame and append HEADERS frame
                    out.add(spdyDataFrame);

Frequently Asked Questions

What is the SpdyHttpEncoder class?
SpdyHttpEncoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java.
Where is SpdyHttpEncoder defined?
SpdyHttpEncoder is defined in codec-http/src/main/java/io/netty/handler/codec/spdy/SpdyHttpEncoder.java at line 123.

Analyze Your Own Codebase

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

Try Supermodel Free