Home / Class/ LineParser Class — netty Architecture

LineParser Class — netty Architecture

Architecture documentation for the LineParser class in HttpObjectDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f6d5dc41_af35_bf8a_75da_1474a14923bc["LineParser"]
  f15bbbf6_e315_8ba2_24a1_7970ea7b58eb["HttpObjectDecoder.java"]
  f6d5dc41_af35_bf8a_75da_1474a14923bc -->|defined in| f15bbbf6_e315_8ba2_24a1_7970ea7b58eb
  6ecc492d_29c4_32a5_ca59_bd99b14a1529["LineParser()"]
  f6d5dc41_af35_bf8a_75da_1474a14923bc -->|method| 6ecc492d_29c4_32a5_ca59_bd99b14a1529
  39c2c817_627b_3881_f9ba_0e89bdbe5fdd["ByteBuf()"]
  f6d5dc41_af35_bf8a_75da_1474a14923bc -->|method| 39c2c817_627b_3881_f9ba_0e89bdbe5fdd
  d87a93a4_b50d_553a_ff04_98f1cc468821["skipControlChars()"]
  f6d5dc41_af35_bf8a_75da_1474a14923bc -->|method| d87a93a4_b50d_553a_ff04_98f1cc468821
  52765229_f204_eb41_a209_57ec9b96af97["TooLongFrameException()"]
  f6d5dc41_af35_bf8a_75da_1474a14923bc -->|method| 52765229_f204_eb41_a209_57ec9b96af97

Relationship Graph

Source Code

codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.java lines 1228–1270

    private final class LineParser extends HeaderParser {

        LineParser(ByteBuf seq, int maxLength) {
            super(seq, maxLength);
        }

        @Override
        public ByteBuf parse(ByteBuf buffer, Runnable strictCRLFCheck) {
            // Suppress a warning because HeaderParser.reset() is supposed to be called
            reset();
            final int readableBytes = buffer.readableBytes();
            if (readableBytes == 0) {
                return null;
            }
            if (currentState == State.SKIP_CONTROL_CHARS &&
                    skipControlChars(buffer, readableBytes, buffer.readerIndex())) {
                return null;
            }
            return super.parse(buffer, strictCRLFCheck);
        }

        private boolean skipControlChars(ByteBuf buffer, int readableBytes, int readerIndex) {
            assert currentState == State.SKIP_CONTROL_CHARS;
            final int maxToSkip = Math.min(maxLength, readableBytes);
            final int firstNonControlIndex = buffer.forEachByte(readerIndex, maxToSkip, SKIP_CONTROL_CHARS_BYTES);
            if (firstNonControlIndex == -1) {
                buffer.skipBytes(maxToSkip);
                if (readableBytes > maxLength) {
                    throw newException(maxLength);
                }
                return true;
            }
            // from now on we don't care about control chars
            buffer.readerIndex(firstNonControlIndex);
            currentState = State.READ_INITIAL;
            return false;
        }

        @Override
        protected TooLongFrameException newException(int maxLength) {
            return new TooLongHttpLineException("An HTTP line is larger than " + maxLength + " bytes.");
        }
    }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free