You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2005/11/19 18:52:09 UTC
svn commit: r345662 -
/tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java
Author: costin
Date: Sat Nov 19 09:52:07 2005
New Revision: 345662
URL: http://svn.apache.org/viewcvs?rev=345662&view=rev
Log:
Remove duplicated methods.
Modified:
tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java
Modified: tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java
URL: http://svn.apache.org/viewcvs/tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java?rev=345662&r1=345661&r2=345662&view=diff
==============================================================================
--- tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java (original)
+++ tomcat/sandbox/java/org/apache/coyote/http11/InternalAprInputBuffer.java Sat Nov 19 09:52:07 2005
@@ -37,7 +37,7 @@
*
* @author <a href="mailto:remm@apache.org">Remy Maucherat</a>
*/
-public class InternalAprInputBuffer implements InputBuffer {
+public class InternalAprInputBuffer extends InternalInputBuffer {
// -------------------------------------------------------------- Constants
@@ -51,28 +51,12 @@
*/
public InternalAprInputBuffer(Request request, int headerBufferSize,
long readTimeout) {
+ super(request, headerBufferSize);
- this.request = request;
- headers = request.getMimeHeaders();
-
- headerBuffer1 = new byte[headerBufferSize];
- headerBuffer2 = new byte[headerBufferSize];
- bodyBuffer = new byte[headerBufferSize];
- buf = headerBuffer1;
bbuf = ByteBuffer.allocateDirect(headerBufferSize);
- headerBuffer = new char[headerBufferSize];
- ascbuf = headerBuffer;
-
inputStreamInputBuffer = new SocketInputBuffer();
- filterLibrary = new InputFilter[0];
- activeFilters = new InputFilter[0];
- lastActiveFilter = -1;
-
- parsingHeader = true;
- swallowInput = true;
-
this.readTimeout = readTimeout * 1000;
}
@@ -80,91 +64,9 @@
// -------------------------------------------------------------- Variables
-
- /**
- * The string manager for this package.
- */
- protected static 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;
-
-
- /**
- * Pointer to the US-ASCII header buffer.
- */
- protected char[] ascbuf;
-
-
- /**
- * Last valid byte.
- */
- protected int lastValid;
-
-
- /**
- * Position in the buffer.
- */
- protected int pos;
-
-
- /**
- * HTTP header buffer no 1.
- */
- protected byte[] headerBuffer1;
-
-
- /**
- * HTTP header buffer no 2.
- */
- protected byte[] headerBuffer2;
-
-
- /**
- * HTTP body buffer.
- */
- protected byte[] bodyBuffer;
-
-
- /**
- * US-ASCII header buffer.
- */
- protected char[] headerBuffer;
-
-
/**
* Direct byte buffer used to perform actual reading.
+ * Used instead of super.inputStream
*/
protected ByteBuffer bbuf;
@@ -176,31 +78,6 @@
/**
- * 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;
-
-
- /**
* The socket timeout used when reading the first block of the request
* header.
*/
@@ -227,75 +104,6 @@
}
- /**
- * 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
@@ -304,75 +112,12 @@
* connection.
*/
public void recycle() {
+ super.recycle();
// Recycle Request object
request.recycle();
socket = 0;
- buf = headerBuffer1;
- 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()
- throws IOException {
-
- // Recycle Request object
- request.recycle();
-
- // Determine the header buffer used for next request
- byte[] newHeaderBuf = null;
- if (buf == headerBuffer1) {
- newHeaderBuf = headerBuffer2;
- } else {
- newHeaderBuf = headerBuffer1;
- }
-
- // Copy leftover bytes from buf to newHeaderBuf
- System.arraycopy(buf, pos, newHeaderBuf, 0, lastValid - pos);
-
- // Swap buffers
- buf = newHeaderBuf;
-
- // 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 undelying I/O error occured
- */
- public void endRequest()
- throws IOException {
-
- if (swallowInput && (lastActiveFilter != -1)) {
- int extraBytes = (int) activeFilters[lastActiveFilter].end();
- pos = pos - extraBytes;
- }
-
}
@@ -565,198 +310,6 @@
}
-
- /**
- * Parse the HTTP headers.
- */
- public void parseHeaders()
- throws IOException {
-
- while (parseHeader()) {
- }
-
- parsingHeader = false;
-
- }
-
-
- /**
- * Parse an HTTP header.
- *
- * @return false after reading a blank line (which indicates that the
- * HTTP header parsing is done
- */
- public boolean parseHeader()
- throws IOException {
-
- //
- // Check for blank line
- //
-
- byte chr = 0;
- while (true) {
-
- // Read new bytes if needed
- if (pos >= lastValid) {
- if (!fill())
- throw new EOFException(sm.getString("iib.eof.error"));
- }
-
- chr = buf[pos];
-
- if ((chr == Constants.CR) || (chr == Constants.LF)) {
- if (chr == Constants.LF) {
- pos++;
- return false;
- }
- } else {
- break;
- }
-
- pos++;
-
- }
-
- // Mark the current buffer position
- int start = pos;
-
- //
- // Reading the header name
- // Header name is always US-ASCII
- //
-
- boolean colon = false;
- MessageBytes headerValue = null;
-
- while (!colon) {
-
- // Read new bytes if needed
- if (pos >= lastValid) {
- if (!fill())
- throw new EOFException(sm.getString("iib.eof.error"));
- }
-
- if (buf[pos] == Constants.COLON) {
- colon = true;
- headerValue = headers.addValue(ascbuf, start, pos - start);
- }
- chr = buf[pos];
- if ((chr >= Constants.A) && (chr <= Constants.Z)) {
- buf[pos] = (byte) (chr - Constants.LC_OFFSET);
- }
-
- ascbuf[pos] = (char) buf[pos];
-
- pos++;
-
- }
-
- // Mark the current buffer position
- start = pos;
- int realPos = pos;
-
- //
- // Reading the header value (which can be spanned over multiple lines)
- //
-
- boolean eol = false;
- boolean validLine = true;
-
- while (validLine) {
-
- boolean space = true;
-
- // Skipping spaces
- while (space) {
-
- // Read new bytes if needed
- if (pos >= lastValid) {
- if (!fill())
- throw new EOFException(sm.getString("iib.eof.error"));
- }
-
- if ((buf[pos] == Constants.SP) || (buf[pos] == Constants.HT)) {
- pos++;
- } else {
- space = false;
- }
-
- }
-
- int lastSignificantChar = realPos;
-
- // Reading bytes until the end of the line
- while (!eol) {
-
- // Read new bytes if needed
- if (pos >= lastValid) {
- if (!fill())
- throw new EOFException(sm.getString("iib.eof.error"));
- }
-
- if (buf[pos] == Constants.CR) {
- } else if (buf[pos] == Constants.LF) {
- eol = true;
- } else if (buf[pos] == Constants.SP) {
- buf[realPos] = buf[pos];
- realPos++;
- } else {
- buf[realPos] = buf[pos];
- realPos++;
- lastSignificantChar = realPos;
- }
-
- pos++;
-
- }
-
- realPos = lastSignificantChar;
-
- // Checking the first character of the new line. If the character
- // is a LWS, then it's a multiline header
-
- // Read new bytes if needed
- if (pos >= lastValid) {
- if (!fill())
- throw new EOFException(sm.getString("iib.eof.error"));
- }
-
- chr = buf[pos];
- if ((chr != Constants.SP) && (chr != Constants.HT)) {
- validLine = false;
- } else {
- eol = false;
- // Copying one extra space in the buffer (since there must
- // be at least one space inserted between the lines)
- buf[realPos] = chr;
- realPos++;
- }
-
- }
-
- // Set the header value
- headerValue.setBytes(buf, start, realPos - start);
-
- return true;
-
- }
-
-
- // ---------------------------------------------------- InputBuffer Methods
-
-
- /**
- * Read some bytes.
- */
- public int doRead(ByteChunk chunk, Request req)
- throws IOException {
-
- if (lastActiveFilter == -1)
- return inputStreamInputBuffer.doRead(chunk, req);
- else
- return activeFilters[lastActiveFilter].doRead(chunk,req);
-
- }
// ------------------------------------------------------ Protected Methods
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org