Home / Class/ HeaderParser Class — netty Architecture

HeaderParser Class — netty Architecture

Architecture documentation for the HeaderParser class in StompSubframeDecoder.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  455cae9c_9e00_1f87_c8dd_0c3016efab2d["HeaderParser"]
  0eb6c218_fd84_4ac9_b764_f0c162e318dd["StompSubframeDecoder.java"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|defined in| 0eb6c218_fd84_4ac9_b764_f0c162e318dd
  7bebdba9_b6da_cc3e_5ea9_1c5ce9e251be["HeaderParser()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| 7bebdba9_b6da_cc3e_5ea9_1c5ce9e251be
  99df35d3_4eef_abe1_fc18_c39c3b863c65["parseHeader()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| 99df35d3_4eef_abe1_fc18_c39c3b863c65
  7625c351_feff_b906_08e6_200b708f58f8["process()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| 7625c351_feff_b906_08e6_200b708f58f8
  cd8409e5_26a0_1038_22a7_b1da40de201b["appendTo()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| cd8409e5_26a0_1038_22a7_b1da40de201b
  ec2014eb_ddf6_09cc_a715_0543033c48e8["reset()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| ec2014eb_ddf6_09cc_a715_0543033c48e8
  8c58c4f4_1437_6b58_1f15_0853d629e224["shouldUnescape()"]
  455cae9c_9e00_1f87_c8dd_0c3016efab2d -->|method| 8c58c4f4_1437_6b58_1f15_0853d629e224

Relationship Graph

Source Code

codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java lines 337–440

    private static final class HeaderParser extends Utf8LineParser {

        private final boolean validateHeaders;

        private String name;
        private boolean valid;

        private boolean shouldUnescape;
        private boolean unescapeInProgress;

        HeaderParser(AppendableCharSequence charSeq, int maxLineLength, boolean validateHeaders) {
            super(charSeq, maxLineLength);
            this.validateHeaders = validateHeaders;
        }

        boolean parseHeader(StompHeadersSubframe headersSubframe, ByteBuf buf) {
            shouldUnescape = shouldUnescape(headersSubframe.command());
            AppendableCharSequence value = super.parse(buf);
            if (value == null || (name == null && value.length() == 0)) {
                return false;
            }

            if (valid) {
                headersSubframe.headers().add(name, value.toString());
            } else if (validateHeaders) {
                if (StringUtil.isNullOrEmpty(name)) {
                    throw new IllegalArgumentException("received an invalid header line '" + value + '\'');
                }
                String line = name + ':' + value;
                throw new IllegalArgumentException("a header value or name contains a prohibited character ':'"
                                                   + ", " + line);
            }
            return true;
        }

        @Override
        public boolean process(byte nextByte) throws Exception {
            if (nextByte == StompConstants.COLON) {
                if (name == null) {
                    AppendableCharSequence charSeq = charSequence();
                    if (charSeq.length() != 0) {
                        name = charSeq.substring(0, charSeq.length());
                        charSeq.reset();
                        valid = true;
                        return true;
                    } else {
                        name = StringUtil.EMPTY_STRING;
                    }
                } else {
                    valid = false;
                }
            }

            return super.process(nextByte);
        }

        @Override
        protected void appendTo(AppendableCharSequence charSeq, char chr) {
            if (!shouldUnescape) {
                super.appendTo(charSeq, chr);
                return;
            }

            if (chr == '\\') {
                if (unescapeInProgress) {
                    super.appendTo(charSeq, chr);
                    unescapeInProgress = false;
                } else {
                    unescapeInProgress = true;
                }
                return;
            }

            if (unescapeInProgress) {
                if (chr == 'c') {
                    charSeq.append(':');
                } else if (chr == 'r') {
                    charSeq.append('\r');
                } else if (chr == 'n') {
                    charSeq.append('\n');
                } else {

Frequently Asked Questions

What is the HeaderParser class?
HeaderParser is a class in the netty codebase, defined in codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java.
Where is HeaderParser defined?
HeaderParser is defined in codec-stomp/src/main/java/io/netty/handler/codec/stomp/StompSubframeDecoder.java at line 337.

Analyze Your Own Codebase

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

Try Supermodel Free