Apply the DIRMINA-933 patch Project: http://git-wip-us.apache.org/repos/asf/mina/repo Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/89605f0d Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/89605f0d Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/89605f0d
Branch: refs/heads/2.0 Commit: 89605f0db26813eaaaac450c1f61ef9bbccdc595 Parents: 885ec9f Author: Emmanuel Lécharny <[email protected]> Authored: Thu Apr 11 00:15:31 2013 +0200 Committer: Jeff MAURY <[email protected]> Committed: Wed Nov 27 13:23:06 2013 +0100 ---------------------------------------------------------------------- .../java/org/apache/mina/http/HttpServerDecoder.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mina/blob/89605f0d/mina-http/src/main/java/org/apache/mina/http/HttpServerDecoder.java ---------------------------------------------------------------------- diff --git a/mina-http/src/main/java/org/apache/mina/http/HttpServerDecoder.java b/mina-http/src/main/java/org/apache/mina/http/HttpServerDecoder.java index e9d09b8..61c1933 100644 --- a/mina-http/src/main/java/org/apache/mina/http/HttpServerDecoder.java +++ b/mina-http/src/main/java/org/apache/mina/http/HttpServerDecoder.java @@ -71,7 +71,7 @@ public class HttpServerDecoder implements ProtocolDecoder { /** Regex to split cookie header following RFC6265 Section 5.4 */ public static final Pattern COOKIE_SEPARATOR_PATTERN = Pattern.compile(";"); - public void decode(final IoSession session, final IoBuffer msg, final ProtocolDecoderOutput out) { + public void decode(IoSession session, IoBuffer msg, ProtocolDecoderOutput out) { DecoderState state = (DecoderState) session.getAttribute(DECODER_STATE_ATT); if (null == state) { session.setAttribute(DECODER_STATE_ATT, DecoderState.NEW); @@ -85,37 +85,38 @@ public class HttpServerDecoder implements ProtocolDecoder { // concat the old buffer and the new incoming one IoBuffer.allocate(oldBuffer.remaining() + msg.remaining()).put(oldBuffer).put(msg).flip(); // now let's decode like it was a new message - + msg = IoBuffer.allocate(oldBuffer.remaining() + msg.remaining()).put(oldBuffer).put(msg).flip(); case NEW: LOG.debug("decoding NEW"); - final HttpRequestImpl rq = parseHttpRequestHead(msg.buf()); + HttpRequestImpl rq = parseHttpRequestHead(msg.buf()); if (rq == null) { // we copy the incoming BB because it's going to be recycled by the inner IoProcessor for next reads - final ByteBuffer partial = ByteBuffer.allocate(msg.remaining()); + ByteBuffer partial = ByteBuffer.allocate(msg.remaining()); partial.put(msg.buf()); partial.flip(); // no request decoded, we accumulate session.setAttribute(PARTIAL_HEAD_ATT, partial); session.setAttribute(DECODER_STATE_ATT, DecoderState.HEAD); + break; } else { out.write(rq); // is it a request with some body content ? - final String contentLen = rq.getHeader("content-length"); + String contentLen = rq.getHeader("content-length"); if (contentLen != null) { LOG.debug("found content len : {}", contentLen); session.setAttribute(BODY_REMAINING_BYTES, Integer.valueOf(contentLen)); session.setAttribute(DECODER_STATE_ATT, DecoderState.BODY); + // fallthrough, process body immediately } else { LOG.debug("request without content"); session.setAttribute(DECODER_STATE_ATT, DecoderState.NEW); out.write(new HttpEndOfContent()); + break; } } - break; - case BODY: LOG.debug("decoding BODY: {} bytes", msg.remaining()); final int chunkSize = msg.remaining();
