From d994f2db2d4aa788ff8c4b941e44d16e88a05d9e Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 3 May 2010 18:52:16 +0000 Subject: [PATCH] #296650 JETTY-1198 reset idle timeout on request body chunks git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@1654 7e9141cc-0065-0410-87d8-b60c137991c4 --- VERSION.txt | 1 + .../java/org/eclipse/jetty/client/HttpConnection.java | 4 ++++ .../main/java/org/eclipse/jetty/io/AsyncEndPoint.java | 11 +++++++++++ .../eclipse/jetty/io/nio/SelectChannelEndPoint.java | 2 ++ .../java/org/eclipse/jetty/server/HttpConnection.java | 4 ++++ .../eclipse/jetty/websocket/WebSocketConnection.java | 7 ++++++- 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/VERSION.txt b/VERSION.txt index 38313974937..976d827ebd6 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,4 +1,5 @@ jetty-7.1.0.RC1-SNAPSHOT + + 296650 JETTY-1198 reset idle timeout on request body chunks + 291448 SessionManager has isCheckingRemoteSessionIdEncoding + 297104 HTTP CONNECT does not work correct with SSL destinations + 308848 Update test suite to JUnit4 - Module jetty-ajp diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java index 65cce32c1c4..066d710e52d 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java @@ -549,6 +549,8 @@ public class HttpConnection implements Connection @Override public void headerComplete() throws IOException { + if (_endp instanceof AsyncEndPoint) + ((AsyncEndPoint)_endp).scheduleIdle(); HttpExchange exchange = _exchange; if (exchange!=null) exchange.setStatus(HttpExchange.STATUS_PARSING_CONTENT); @@ -557,6 +559,8 @@ public class HttpConnection implements Connection @Override public void content(Buffer ref) throws IOException { + if (_endp instanceof AsyncEndPoint) + ((AsyncEndPoint)_endp).scheduleIdle(); HttpExchange exchange = _exchange; if (exchange!=null) exchange.getEventListener().onResponseContent(ref); diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/AsyncEndPoint.java b/jetty-io/src/main/java/org/eclipse/jetty/io/AsyncEndPoint.java index 753b8b54b66..f7167b4d915 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/AsyncEndPoint.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/AsyncEndPoint.java @@ -45,4 +45,15 @@ public interface AsyncEndPoint extends EndPoint * it becomes writable. */ public void scheduleWrite(); + + /* ------------------------------------------------------------ */ + /** Schedule a call to the idle timeout + */ + public void scheduleIdle(); + + /* ------------------------------------------------------------ */ + /** Cancel a call to the idle timeout + */ + public void cancelIdle(); + } diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java index 87c97a84ed3..e479a8bc767 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/nio/SelectChannelEndPoint.java @@ -336,6 +336,8 @@ public class SelectChannelEndPoint extends ChannelEndPoint implements Runnable, finally { _writeBlocked=false; + if (_idleTask.isScheduled()) + scheduleIdle(); } } return true; diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java index 9cbc8fadea9..1764fc83635 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java @@ -981,6 +981,8 @@ public class HttpConnection implements Connection @Override public void headerComplete() throws IOException { + if (_endp instanceof AsyncEndPoint) + ((AsyncEndPoint)_endp).scheduleIdle(); _requests++; _generator.setVersion(_version); switch (_version) @@ -1032,6 +1034,8 @@ public class HttpConnection implements Connection @Override public void content(Buffer ref) throws IOException { + if (_endp instanceof AsyncEndPoint) + ((AsyncEndPoint)_endp).scheduleIdle(); if (_delayedHandling) { _delayedHandling=false; diff --git a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnection.java b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnection.java index e11a6976ab0..02c5fa35fbc 100644 --- a/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnection.java +++ b/jetty-websocket/src/main/java/org/eclipse/jetty/websocket/WebSocketConnection.java @@ -17,7 +17,7 @@ public class WebSocketConnection implements Connection, WebSocket.Outbound final WebSocketGenerator _generator; final long _timestamp; final WebSocket _websocket; - final int _maxIdleTimeMs=300000; + final int _maxIdleTimeMs; public WebSocketConnection(WebSocket websocket, EndPoint endpoint) { @@ -26,10 +26,15 @@ public class WebSocketConnection implements Connection, WebSocket.Outbound public WebSocketConnection(WebSocket websocket, EndPoint endpoint, WebSocketBuffers buffers, long timestamp, long maxIdleTime) { + // TODO - can we use the endpoint idle mechanism? + if (endpoint instanceof AsyncEndPoint) + ((AsyncEndPoint)endpoint).cancelIdle(); + _endp = endpoint; _timestamp = timestamp; _websocket = websocket; _generator = new WebSocketGenerator(buffers, _endp); + _maxIdleTimeMs=(int)maxIdleTime; _parser = new WebSocketParser(buffers, endpoint, new WebSocketParser.EventHandler() { public void onFrame(byte frame, String data)