Author: markt Date: Tue Sep 6 15:45:08 2011 New Revision: 1165721 URL: http://svn.apache.org/viewvc?rev=1165721&view=rev Log: Connector alignment - request line reading
Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Modified: tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1165721&r1=1165720&r2=1165721&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue Sep 6 15:45:08 2011 @@ -823,6 +823,14 @@ public abstract class AbstractHttp11Proc /** + * Defines how a connector handles an incomplete request line read. + * + * @returns <code>true</code> if the processor should break out of the + * processing loop, otherwise <code>false</code>. + */ + protected abstract boolean handleIncompleteRequestLineRead(); + + /** * After reading the request headers, we have to setup the request filters. */ protected void prepareRequest() { Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1165721&r1=1165720&r2=1165721&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Tue Sep 6 15:45:08 2011 @@ -204,16 +204,7 @@ public class Http11AprProcessor extends setRequestLineReadTimeout(); if (!inputBuffer.parseRequestLine(keptAlive)) { - // This means that no data is available right now - // (long keepalive), so that the processor should be recycled - // and the method should return true - openSocket = true; - if (endpoint.isPaused()) { - // 503 - Service unavailable - response.setStatus(503); - adapter.log(request, response, 0); - error = true; - } else { + if (handleIncompleteRequestLineRead()) { break; } } @@ -389,9 +380,26 @@ public class Http11AprProcessor extends @Override + protected boolean handleIncompleteRequestLineRead() { + // This means that no data is available right now + // (long keepalive), so that the processor should be recycled + // and the method should return true + openSocket = true; + if (endpoint.isPaused()) { + // 503 - Service unavailable + response.setStatus(503); + adapter.log(request, response, 0); + error = true; + } else { + return true; + } + return false; + } + + + @Override protected void setCometTimeouts(SocketWrapper<Long> socketWrapper) { // NO-OP for APR/native - return; } Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1165721&r1=1165720&r2=1165721&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Sep 6 15:45:08 2011 @@ -231,27 +231,7 @@ public class Http11NioProcessor extends setRequestLineReadTimeout(); if (!inputBuffer.parseRequestLine(keptAlive)) { - // Haven't finished reading the request so keep the socket - // open - openSocket = true; - // Check to see if we have read any of the request line yet - if (inputBuffer.getParsingRequestLinePhase()<2) { - // No data read, OK to recycle the processor - // Continue to use keep alive timeout - if (keepAliveTimeout>0) { - socketWrapper.setTimeout(keepAliveTimeout); - } - } else { - // Started to read request line. Need to keep processor - // associated with socket - readComplete = false; - } - if (endpoint.isPaused()) { - // 503 - Service unavailable - response.setStatus(503); - adapter.log(request, response, 0); - error = true; - } else { + if (handleIncompleteRequestLineRead()) { break; } } @@ -431,6 +411,35 @@ public class Http11NioProcessor extends @Override + protected boolean handleIncompleteRequestLineRead() { + // Haven't finished reading the request so keep the socket + // open + openSocket = true; + // Check to see if we have read any of the request line yet + if (inputBuffer.getParsingRequestLinePhase()<2) { + // No data read, OK to recycle the processor + // Continue to use keep alive timeout + if (keepAliveTimeout>0) { + socket.setTimeout(keepAliveTimeout); + } + } else { + // Started to read request line. Need to keep processor + // associated with socket + readComplete = false; + } + if (endpoint.isPaused()) { + // 503 - Service unavailable + response.setStatus(503); + adapter.log(request, response, 0); + error = true; + } else { + return true; + } + return false; + } + + + @Override protected void setCometTimeouts(SocketWrapper<NioChannel> socketWrapper) { // Comet support SelectionKey key = socketWrapper.getSocket().getIOChannel().keyFor( Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1165721&r1=1165720&r2=1165721&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Tue Sep 6 15:45:08 2011 @@ -154,8 +154,6 @@ public class Http11Processor extends Abs keptAlive = socketWrapper.isKeptAlive(); } - int soTimeout = endpoint.getSoTimeout(); - if (disableKeepAlive()) { socketWrapper.setKeepAliveLeft(0); } @@ -167,7 +165,12 @@ public class Http11Processor extends Abs try { setRequestLineReadTimeout(); - inputBuffer.parseRequestLine(false); + if (!inputBuffer.parseRequestLine(false)) { + if (handleIncompleteRequestLineRead()) { + break; + } + } + if (endpoint.isPaused()) { // 503 - Service unavailable response.setStatus(503); @@ -177,7 +180,7 @@ public class Http11Processor extends Abs request.setStartTime(System.currentTimeMillis()); keptAlive = true; // Reset timeout for reading headers - socket.getSocket().setSoTimeout(soTimeout); + socket.getSocket().setSoTimeout(endpoint.getSoTimeout()); inputBuffer.parseHeaders(); if (!disableUploadTimeout) { socket.getSocket().setSoTimeout(connectionUploadTimeout); @@ -382,9 +385,15 @@ public class Http11Processor extends Abs @Override + protected boolean handleIncompleteRequestLineRead() { + // Not used with BIO since it uses blocking reads + return false; + } + + + @Override protected void setCometTimeouts(SocketWrapper<Socket> socketWrapper) { // NO-OP for BIO - return; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org