Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java2
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/AbstractHttpConnection.java2
-rw-r--r--jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java52
3 files changed, 55 insertions, 1 deletions
diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
index 5d24c9cac3..1effdada24 100644
--- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
+++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java
@@ -637,8 +637,8 @@ public class HttpParser implements Parser
break;
case HttpTokens.NO_CONTENT:
- _handler.headerComplete();
_state=_persistent||(_responseStatus>=100&&_responseStatus<200)?STATE_END:STATE_SEEKING_EOF;
+ _handler.headerComplete();
_handler.messageComplete(_contentPosition);
return 1;
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 42bd11d3c3..ccdd878900 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
@@ -922,6 +922,8 @@ public abstract class AbstractHttpConnection extends AbstractConnection
{
_generator.setPersistent(true);
_parser.setPersistent(true);
+ if (_parser instanceof HttpParser)
+ ((HttpParser)_parser).setState(HttpParser.STATE_END);
}
if (_server.getSendDateHeader())
diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java
index 899038e499..4fabe954dd 100644
--- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java
+++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java
@@ -1234,6 +1234,58 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture
}
}
+ @Test
+ public void testAvailableForPipelinedRequests() throws Exception
+ {
+ configureServer(new AbstractHandler()
+ {
+ public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+ {
+ baseRequest.setHandled(true);
+ int available = request.getInputStream().available();
+ ServletOutputStream output = response.getOutputStream();
+ output.println(target);
+ output.println(String.valueOf(available));
+ }
+ });
+
+ Socket client = newSocket(HOST,_connector.getLocalPort());
+ try
+ {
+ OutputStream output = client.getOutputStream();
+ InputStream input = client.getInputStream();
+
+ output.write((
+ "GET /one HTTP/1.1\r\n"+
+ "host: "+HOST+":"+_connector.getLocalPort()+"\r\n"+
+ "\r\n"+
+ "GET /two HTTP/1.1\r\n"+
+ "host: "+HOST+":"+_connector.getLocalPort()+"\r\n"+
+ "\r\n"
+ ).getBytes());
+ output.flush();
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(input, "UTF-8"));
+
+ while(reader.readLine().length() > 0)
+ {
+ // Skip response headers.
+ }
+ assertEquals("/one", reader.readLine());
+ assertEquals(0, Integer.parseInt(reader.readLine()));
+
+ while(reader.readLine().length() > 0)
+ {
+ // Skip response headers.
+ }
+ assertEquals("/two", reader.readLine());
+ assertEquals(0, Integer.parseInt(reader.readLine()));
+ }
+ finally
+ {
+ client.close();
+ }
+ }
@Test
public void testDualRequest1() throws Exception

Back to the top