Optimized HttpMessageDecoder.readHeader()
This commit is contained in:
parent
bda2f0a852
commit
ee8ffec265
@ -395,20 +395,24 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
|
||||
private String readHeader(ChannelBuffer buffer) throws TooLongFrameException {
|
||||
StringBuilder sb = new StringBuilder(64);
|
||||
int headerSize = this.headerSize;
|
||||
while (true) {
|
||||
byte nextByte = buffer.readByte();
|
||||
if (nextByte == HttpCodecUtil.CR) {
|
||||
nextByte = buffer.readByte();
|
||||
|
||||
loop:
|
||||
for (;;) {
|
||||
char nextByte = (char) buffer.readByte();
|
||||
headerSize ++;
|
||||
|
||||
switch (nextByte) {
|
||||
case HttpCodecUtil.CR:
|
||||
nextByte = (char) buffer.readByte();
|
||||
headerSize ++;
|
||||
if (nextByte == HttpCodecUtil.LF) {
|
||||
this.headerSize = headerSize + 2;
|
||||
return sb.toString();
|
||||
break loop;
|
||||
}
|
||||
break;
|
||||
case HttpCodecUtil.LF:
|
||||
break loop;
|
||||
}
|
||||
else if (nextByte == HttpCodecUtil.LF) {
|
||||
this.headerSize = headerSize + 1;
|
||||
return sb.toString();
|
||||
}
|
||||
else {
|
||||
|
||||
// Abort decoding if the header part is too large.
|
||||
if (headerSize >= maxHeaderSize) {
|
||||
throw new TooLongFrameException(
|
||||
@ -416,10 +420,12 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
|
||||
maxHeaderSize + " bytes.");
|
||||
|
||||
}
|
||||
headerSize ++;
|
||||
sb.append((char) nextByte);
|
||||
}
|
||||
|
||||
sb.append(nextByte);
|
||||
}
|
||||
|
||||
this.headerSize = headerSize;
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
protected abstract boolean isDecodingRequest();
|
||||
|
Loading…
x
Reference in New Issue
Block a user