* HttpMessage.isChunked() checks the 'Transfer-Encoding' header

This commit is contained in:
Trustin Lee 2009-11-17 07:39:02 +00:00
parent 2dab484372
commit 8c39e2823e
2 changed files with 22 additions and 16 deletions

View File

@ -113,7 +113,21 @@ public class DefaultHttpMessage implements HttpMessage {
}
public boolean isChunked() {
return chunked;
if (chunked) {
return true;
}
List<String> chunked = getHeaders(HttpHeaders.Names.TRANSFER_ENCODING);
if (chunked.isEmpty()) {
return false;
}
for (String v: chunked) {
if (v.equalsIgnoreCase(HttpHeaders.Values.CHUNKED)) {
return true;
}
}
return false;
}
public void setChunked(boolean chunked) {

View File

@ -453,7 +453,13 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
if (isContentAlwaysEmpty(message)) {
nextState = State.SKIP_CONTROL_CHARS;
} else if (isChunked(message)) {
} else if (message.isChunked()) {
// HttpMessage.isChunked() returns true when either:
// 1) HttpMessage.setChunked(true) was called or
// 2) 'Transfer-Encoding' is 'chunked'.
// Because this decoder did not call HttpMessage.setChunked(true)
// yet, HttpMessage.isChunked() should return true only when
// 'Transfer-Encoding' is 'chunked'.
nextState = State.READ_CHUNK_SIZE;
} else if (message.getContentLength(-1) >= 0) {
nextState = State.READ_FIXED_LENGTH_CONTENT;
@ -463,20 +469,6 @@ public abstract class HttpMessageDecoder extends ReplayingDecoder<HttpMessageDec
return nextState;
}
private static boolean isChunked(HttpMessage message) {
List<String> chunked = message.getHeaders(HttpHeaders.Names.TRANSFER_ENCODING);
if (chunked.isEmpty()) {
return false;
}
for (String v: chunked) {
if (v.equalsIgnoreCase(HttpHeaders.Values.CHUNKED)) {
return true;
}
}
return false;
}
private HttpChunkTrailer readTrailingHeaders(ChannelBuffer buffer) throws TooLongFrameException {
headerSize = 0;
String line = readHeader(buffer);