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 {
Source
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