Author: markt Date: Thu Jan 15 09:20:53 2015 New Revision: 1652000 URL: http://svn.apache.org/r1652000 Log: APR: - Simplify. - Correct test for exceeded the max header size. NIO - Use read method from SocketWrapper
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=1652000&r1=1651999&r2=1652000&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Thu Jan 15 09:20:53 2015 @@ -91,10 +91,8 @@ public class InternalAprInputBuffer exte @Override protected boolean fill(boolean block) throws IOException { - int nRead = 0; - if (parsingHeader) { - if (lastValid == buf.length) { + if (lastValid > headerBufferSize) { throw new IllegalArgumentException (sm.getString("iib.requestheadertoolarge.error")); } @@ -102,7 +100,7 @@ public class InternalAprInputBuffer exte lastValid = pos = end; } - nRead = wrapper.read(block, buf, pos, buf.length - pos); + int nRead = wrapper.read(block, buf, pos, buf.length - pos); if (nRead > 0) { lastValid = pos + nRead; return true; Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java?rev=1652000&r1=1651999&r2=1652000&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/InternalNioInputBuffer.java Thu Jan 15 09:20:53 2015 @@ -18,8 +18,6 @@ package org.apache.coyote.http11; import java.io.EOFException; import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.Selector; import org.apache.coyote.InputBuffer; import org.apache.coyote.Request; @@ -28,8 +26,6 @@ import org.apache.juli.logging.LogFactor import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.NioChannel; -import org.apache.tomcat.util.net.NioEndpoint; -import org.apache.tomcat.util.net.NioSelectorPool; import org.apache.tomcat.util.net.SocketWrapperBase; /** @@ -41,8 +37,8 @@ public class InternalNioInputBuffer exte private static final Log log = LogFactory.getLog(InternalNioInputBuffer.class); - // ----------------------------------------------------------- Constructors + // ----------------------------------------------------------- Constructors /** * Alternate constructor. @@ -52,15 +48,10 @@ public class InternalNioInputBuffer exte inputStreamInputBuffer = new SocketInputBuffer(); } - /** - * Underlying socket. - */ - private NioChannel socket; - /** - * Selector pool, for blocking reads and blocking writes - */ - private NioSelectorPool pool; + // ----------------------------------------------------- Instance Variables + + private SocketWrapperBase<NioChannel> wrapper; // --------------------------------------------------------- Public Methods @@ -71,8 +62,8 @@ public class InternalNioInputBuffer exte */ @Override public void recycle() { + wrapper = null; super.recycle(); - socket = null; } // ------------------------------------------------------ Protected Methods @@ -87,25 +78,18 @@ public class InternalNioInputBuffer exte protected void init(SocketWrapperBase<NioChannel> socketWrapper, AbstractEndpoint<NioChannel> endpoint) throws IOException { - socket = socketWrapper.getSocket(); - if (socket == null) { - // Socket has been closed in another thread - throw new IOException(sm.getString("iib.socketClosed")); - } - socketReadBufferSize = - socket.getBufHandler().getReadBuffer().capacity(); + wrapper = socketWrapper; - int bufLength = headerBufferSize + socketReadBufferSize; + int bufLength = Math.max(headerBufferSize, 8192); if (buf == null || buf.length < bufLength) { buf = new byte[bufLength]; } - - pool = ((NioEndpoint)endpoint).getSelectorPool(); } @Override protected boolean fill(boolean block) throws IOException, EOFException { + if (parsingHeader) { if (lastValid > headerBufferSize) { throw new IllegalArgumentException @@ -114,44 +98,14 @@ public class InternalNioInputBuffer exte } else { lastValid = pos = end; } - int nRead = 0; - ByteBuffer readBuffer = socket.getBufHandler().getReadBuffer(); - readBuffer.clear(); - if ( block ) { - Selector selector = null; - try { - selector = pool.get(); - } catch ( IOException x ) { - // Ignore - } - try { - NioEndpoint.NioSocketWrapper att = - (NioEndpoint.NioSocketWrapper) socket.getAttachment(); - if (att == null) { - throw new IOException("Key must be cancelled."); - } - nRead = pool.read(readBuffer, - socket, selector, - socket.getIOChannel().socket().getSoTimeout()); - } catch ( EOFException eof ) { - nRead = -1; - } finally { - if ( selector != null ) pool.put(selector); - } - } else { - nRead = socket.read(readBuffer); - } + + int nRead = wrapper.read(block, buf, pos, buf.length - pos); if (nRead > 0) { - readBuffer.flip(); - readBuffer.limit(nRead); - expand(nRead + pos); - readBuffer.get(buf, pos, nRead); lastValid = pos + nRead; - } else if (nRead == -1) { - //return false; - throw new EOFException(sm.getString("iib.eof.error")); + return true; } - return nRead > 0; + + return false; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org