Author: markt Date: Mon Jun 21 11:25:08 2010 New Revision: 956531 URL: http://svn.apache.org/viewvc?rev=956531&view=rev Log: Reduce code duplication in connectors: Use AbstractInputBuffer with APR/native connector
Modified: tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.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=956531&r1=956530&r2=956531&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/InternalAprInputBuffer.java Mon Jun 21 11:25:08 2010 @@ -27,8 +27,6 @@ import org.apache.tomcat.jni.Socket; import org.apache.tomcat.jni.Status; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.buf.MessageBytes; -import org.apache.tomcat.util.http.MimeHeaders; -import org.apache.tomcat.util.res.StringManager; import org.apache.coyote.InputBuffer; import org.apache.coyote.Request; @@ -39,7 +37,7 @@ import org.apache.coyote.Request; * * @author <a href="mailto:r...@apache.org">Remy Maucherat</a> */ -public class InternalAprInputBuffer implements InputBuffer { +public class InternalAprInputBuffer extends AbstractInputBuffer { // -------------------------------------------------------------- Constants @@ -75,69 +73,10 @@ public class InternalAprInputBuffer impl } - // -------------------------------------------------------------- Variables - - - /** - * The string manager for this package. - */ - protected static final StringManager sm = - StringManager.getManager(Constants.Package); - - // ----------------------------------------------------- Instance Variables /** - * Associated Coyote request. - */ - protected Request request; - - - /** - * Headers of the associated request. - */ - protected MimeHeaders headers; - - - /** - * State. - */ - protected boolean parsingHeader; - - - /** - * Swallow input ? (in the case of an expectation) - */ - protected boolean swallowInput; - - - /** - * Pointer to the current read buffer. - */ - protected byte[] buf; - - - /** - * Last valid byte. - */ - protected int lastValid; - - - /** - * Position in the buffer. - */ - protected int pos; - - - /** - * Pos of the end of the header in the buffer, which is also the - * start of the body. - */ - protected int end; - - - /** * Direct byte buffer used to perform actual reading. */ protected ByteBuffer bbuf; @@ -149,31 +88,6 @@ public class InternalAprInputBuffer impl protected long socket; - /** - * Underlying input buffer. - */ - protected InputBuffer inputStreamInputBuffer; - - - /** - * Filter library. - * Note: Filter[0] is always the "chunked" filter. - */ - protected InputFilter[] filterLibrary; - - - /** - * Active filters (in order). - */ - protected InputFilter[] activeFilters; - - - /** - * Index of the last active filter. - */ - protected int lastActiveFilter; - - // ------------------------------------------------------------- Properties @@ -194,75 +108,6 @@ public class InternalAprInputBuffer impl } - /** - * Add an input filter to the filter library. - */ - public void addFilter(InputFilter filter) { - - InputFilter[] newFilterLibrary = - new InputFilter[filterLibrary.length + 1]; - for (int i = 0; i < filterLibrary.length; i++) { - newFilterLibrary[i] = filterLibrary[i]; - } - newFilterLibrary[filterLibrary.length] = filter; - filterLibrary = newFilterLibrary; - - activeFilters = new InputFilter[filterLibrary.length]; - - } - - - /** - * Get filters. - */ - public InputFilter[] getFilters() { - - return filterLibrary; - - } - - - /** - * Clear filters. - */ - public void clearFilters() { - - filterLibrary = new InputFilter[0]; - lastActiveFilter = -1; - - } - - - /** - * Add an input filter to the filter library. - */ - public void addActiveFilter(InputFilter filter) { - - if (lastActiveFilter == -1) { - filter.setBuffer(inputStreamInputBuffer); - } else { - for (int i = 0; i <= lastActiveFilter; i++) { - if (activeFilters[i] == filter) - return; - } - filter.setBuffer(activeFilters[lastActiveFilter]); - } - - activeFilters[++lastActiveFilter] = filter; - - filter.setRequest(request); - - } - - - /** - * Set the swallow input flag. - */ - public void setSwallowInput(boolean swallowInput) { - this.swallowInput = swallowInput; - } - - // --------------------------------------------------------- Public Methods @@ -270,72 +115,10 @@ public class InternalAprInputBuffer impl * Recycle the input buffer. This should be called when closing the * connection. */ + @Override public void recycle() { - - // Recycle Request object - request.recycle(); - socket = 0; - lastValid = 0; - pos = 0; - lastActiveFilter = -1; - parsingHeader = true; - swallowInput = true; - - } - - - /** - * End processing of current HTTP request. - * Note: All bytes of the current request should have been already - * consumed. This method only resets all the pointers so that we are ready - * to parse the next HTTP request. - */ - public void nextRequest() { - - // Recycle Request object - request.recycle(); - - // Copy leftover bytes to the beginning of the buffer - if (lastValid - pos > 0) { - int npos = 0; - int opos = pos; - while (lastValid - opos > opos - npos) { - System.arraycopy(buf, opos, buf, npos, opos - npos); - npos += pos; - opos += pos; - } - System.arraycopy(buf, opos, buf, npos, lastValid - opos); - } - - // Recycle filters - for (int i = 0; i <= lastActiveFilter; i++) { - activeFilters[i].recycle(); - } - - // Reset pointers - lastValid = lastValid - pos; - pos = 0; - lastActiveFilter = -1; - parsingHeader = true; - swallowInput = true; - - } - - - /** - * End request (consumes leftover bytes). - * - * @throws IOException an underlying I/O error occurred - */ - public void endRequest() - throws IOException { - - if (swallowInput && (lastActiveFilter != -1)) { - int extraBytes = (int) activeFilters[lastActiveFilter].end(); - pos = pos - extraBytes; - } - + super.recycle(); } @@ -350,6 +133,7 @@ public class InternalAprInputBuffer impl * @return true if data is properly fed; false if no data is available * immediately and thread should be freed */ + @Override public boolean parseRequestLine(boolean useAvailableData) throws IOException { @@ -537,7 +321,8 @@ public class InternalAprInputBuffer impl /** * Parse the HTTP headers. */ - public void parseHeaders() + @Override + public boolean parseHeaders() throws IOException { while (parseHeader()) { @@ -545,7 +330,7 @@ public class InternalAprInputBuffer impl parsingHeader = false; end = pos; - + return true; } @@ -729,6 +514,7 @@ public class InternalAprInputBuffer impl /** * Read some bytes. */ + @Override public int doRead(ByteChunk chunk, Request req) throws IOException { @@ -743,6 +529,13 @@ public class InternalAprInputBuffer impl // ------------------------------------------------------ Protected Methods + @Override + protected boolean fill(boolean block) throws IOException { + // Ignore the block parameter and just call fill + return fill(); + } + + /** * Fill the internal buffer using data from the underlying input stream. * --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org