diff options
Diffstat (limited to 'jetty-server/src/main/java/org/eclipse/jetty/server')
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java | 35 | ||||
-rw-r--r-- | jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java | 17 |
2 files changed, 40 insertions, 12 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java index 8bf464a78d..3d2d13f94e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java @@ -129,6 +129,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection private boolean _head = false; private boolean _host = false; private boolean _delayedHandling=false; + private boolean _earlyEOF = false; /* ------------------------------------------------------------ */ public static AbstractHttpConnection getCurrentConnection() @@ -395,6 +396,12 @@ public abstract class AbstractHttpConnection extends AbstractConnection } /* ------------------------------------------------------------ */ + public boolean isEarlyEOF() + { + return _earlyEOF; + } + + /* ------------------------------------------------------------ */ public void reset() { _parser.reset(); @@ -407,6 +414,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection _response.recycle(); _uri.clear(); _writer=null; + _earlyEOF = false; } /* ------------------------------------------------------------ */ @@ -443,7 +451,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection { _uri.getPort(); String path = null; - + try { path = _uri.getDecodedPath(); @@ -454,7 +462,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection LOG.ignore(e); path = _uri.getDecodedPath(StringUtil.__ISO_8859_1); } - + info=URIUtil.canonicalPath(path); if (info==null && !_request.getMethod().equals(HttpMethods.CONNECT)) { @@ -719,6 +727,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection _requests); } + /* ------------------------------------------------------------ */ protected void startRequest(Buffer method, Buffer uri, Buffer version) throws IOException { uri=uri.asImmutableBuffer(); @@ -778,6 +787,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection } } + /* ------------------------------------------------------------ */ protected void parsedHeader(Buffer name, Buffer value) throws IOException { int ho = HttpHeaders.CACHE.getOrdinal(name); @@ -839,6 +849,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection _requestFields.add(name, value); } + /* ------------------------------------------------------------ */ protected void headerComplete() throws IOException { _requests++; @@ -909,6 +920,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection _delayedHandling=true; } + /* ------------------------------------------------------------ */ protected void content(Buffer buffer) throws IOException { if (_delayedHandling) @@ -918,6 +930,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection } } + /* ------------------------------------------------------------ */ public void messageComplete(long contentLength) throws IOException { if (_delayedHandling) @@ -928,6 +941,12 @@ public abstract class AbstractHttpConnection extends AbstractConnection } /* ------------------------------------------------------------ */ + public void earlyEOF() + { + _earlyEOF = true; + } + + /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */ private class RequestHandler extends HttpParser.EventHandler @@ -996,6 +1015,18 @@ public abstract class AbstractHttpConnection extends AbstractConnection if (LOG.isDebugEnabled()) LOG.debug("Bad request!: "+version+" "+status+" "+reason); } + + /* ------------------------------------------------------------ */ + /* + * (non-Javadoc) + * + * @see org.eclipse.jetty.server.server.HttpParser.EventHandler#earlyEOF() + */ + @Override + public void earlyEOF() + { + AbstractHttpConnection.this.earlyEOF(); + } } /* ------------------------------------------------------------ */ diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java index af5d510d86..025cf68c8a 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java @@ -24,12 +24,13 @@ import javax.servlet.ServletInputStream; import org.eclipse.jetty.http.HttpParser; import org.eclipse.jetty.io.Buffer; +import org.eclipse.jetty.io.EofException; public class HttpInput extends ServletInputStream { protected final AbstractHttpConnection _connection; protected final HttpParser _parser; - + /* ------------------------------------------------------------ */ public HttpInput(AbstractHttpConnection connection) { @@ -44,11 +45,9 @@ public class HttpInput extends ServletInputStream @Override public int read() throws IOException { - int c=-1; - Buffer content=_parser.blockForContent(_connection.getMaxIdleTime()); - if (content!=null) - c= 0xff & content.get(); - return c; + byte[] bytes = new byte[1]; + int read = read(bytes, 0, 1); + return read < 0 ? -1 : 0xff & bytes[0]; } /* ------------------------------------------------------------ */ @@ -62,6 +61,8 @@ public class HttpInput extends ServletInputStream Buffer content=_parser.blockForContent(_connection.getMaxIdleTime()); if (content!=null) l= content.get(b, off, len); + else if (_connection.isEarlyEOF()) + throw new EofException("early EOF"); return l; } @@ -71,8 +72,4 @@ public class HttpInput extends ServletInputStream { return _parser.available(); } - - - - } |