From: markt Date: Mon, 21 Jun 2010 11:25:08 +0000 (+0000) Subject: Reduce code duplication in connectors: Use AbstractInputBuffer with APR/native connector X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=efece8a5d8a667485a20d363c43ce5717dae1853;p=tomcat7.0 Reduce code duplication in connectors: Use AbstractInputBuffer with APR/native connector git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@956531 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/coyote/http11/InternalAprInputBuffer.java b/java/org/apache/coyote/http11/InternalAprInputBuffer.java index bf0e47cfd..536f5501f 100644 --- a/java/org/apache/coyote/http11/InternalAprInputBuffer.java +++ b/java/org/apache/coyote/http11/InternalAprInputBuffer.java @@ -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 Remy Maucherat */ -public class InternalAprInputBuffer implements InputBuffer { +public class InternalAprInputBuffer extends AbstractInputBuffer { // -------------------------------------------------------------- Constants @@ -75,69 +73,10 @@ public class InternalAprInputBuffer implements InputBuffer { } - // -------------------------------------------------------------- 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 implements InputBuffer { 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 implements InputBuffer { } - /** - * 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 implements InputBuffer { * 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 implements InputBuffer { * @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 implements InputBuffer { /** * Parse the HTTP headers. */ - public void parseHeaders() + @Override + public boolean parseHeaders() throws IOException { while (parseHeader()) { @@ -545,7 +330,7 @@ public class InternalAprInputBuffer implements InputBuffer { parsingHeader = false; end = pos; - + return true; } @@ -729,6 +514,7 @@ public class InternalAprInputBuffer implements InputBuffer { /** * Read some bytes. */ + @Override public int doRead(ByteChunk chunk, Request req) throws IOException { @@ -743,6 +529,13 @@ public class InternalAprInputBuffer implements InputBuffer { // ------------------------------------------------------ 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. *