## org.apache.coyote.http11
Class InternalInputBuffer

    java.lang.Object
      org.apache.coyote.http11.InternalInputBuffer

All Implemented Interfaces:
  InputBuffer

public class InternalInputBuffer
extends java.lang.Object
implements InputBuffer

Implementation of InputBuffer which provides HTTP request header parsing as well as transfer decoding.

Author:
  Remy Maucherat

Nested Class Summary
`protected class` `InternalInputBuffer.InputStreamInputBuffer` This class is an input buffer which will read its data from an input stream.

Field Summary
`protected InputFilter[]` `activeFilters` Active filters (in order).
`protected char[]` `ascbuf` Pointer to the US-ASCII header buffer.
`protected byte[]` `bodyBuffer` HTTP body buffer.
`protected byte[]` `buf` Pointer to the current read buffer.
`protected InputFilter[]` `filterLibrary` Filter library.
`protected char[]` `headerBuffer` US-ASCII header buffer.
`protected byte[]` `headerBuffer1` HTTP header buffer no 1.
`protected byte[]` `headerBuffer2` HTTP header buffer no 2.
`protected MimeHeaders` `headers` Headers of the associated request.
`protected java.io.InputStream` `inputStream` Underlying input stream.
`protected InputBuffer` `inputStreamInputBuffer` Underlying input buffer.
`protected int` `lastActiveFilter` Index of the last active filter.
`protected int` `lastValid` Last valid byte.
`protected boolean` `parsingHeader` State.
`protected int` `pos` Position in the buffer.
`protected Request` `request` Associated Coyote request.
`protected static StringManager` `sm` The string manager for this package.
`protected boolean` `swallowInput` Swallow input ? (in the case of an expectation)

Constructor Summary
`InternalInputBuffer(Request request)` Default constructor.
`InternalInputBuffer(Request request, int headerBufferSize)` Alternate constructor.

Method Summary
`void` `addActiveFilter(InputFilter filter)` Add an input filter to the filter library.
`void` `addFilter(InputFilter filter)` Add an input filter to the filter library.
`void` `clearFilters()` Clear filters.
`int` `doRead(ByteChunk chunk, Request req)` Read some bytes.
`void` `endRequest()` End request (consumes leftover bytes).
`protected boolean` `fill()` Fill the internal buffer using data from the undelying input stream.
`InputFilter[]` `getFilters()` Get filters.
`java.io.InputStream` `getInputStream()` Get the underlying socket input stream.
`void` `nextRequest()` End processing of current HTTP request.
`boolean` `parseHeader()` Parse an HTTP header.
`void` `parseHeaders()` Parse the HTTP headers.
`void` `parseRequestLine()` Read the request line.
`void` `recycle()` Recycle the input buffer.
`void` `setInputStream(java.io.InputStream inputStream)` Set the underlying socket input stream.
`void` `setSwallowInput(boolean swallowInput)` Set the swallow input flag.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### sm

    protected static StringManager sm

  The string manager for this package.

### request

    protected Request request

  Associated Coyote request.

### headers

    protected MimeHeaders headers

  Headers of the associated request.

### parsingHeader

    protected boolean parsingHeader

  State.

### swallowInput

    protected boolean swallowInput

  Swallow input ? (in the case of an expectation)

### buf

    protected byte[] buf

  Pointer to the current read buffer.

### ascbuf

    protected char[] ascbuf

  Pointer to the US-ASCII header buffer.

### lastValid

    protected int lastValid

  Last valid byte.

### pos

    protected int pos

  Position in the buffer.

### headerBuffer1

    protected byte[] headerBuffer1

  HTTP header buffer no 1.

### headerBuffer2

    protected byte[] headerBuffer2

  HTTP header buffer no 2.

### bodyBuffer

    protected byte[] bodyBuffer

  HTTP body buffer.

### headerBuffer

    protected char[] headerBuffer

  US-ASCII header buffer.

### inputStream

    protected java.io.InputStream inputStream

  Underlying input stream.

### inputStreamInputBuffer

    protected InputBuffer inputStreamInputBuffer

  Underlying input buffer.

### filterLibrary

    protected InputFilter[] filterLibrary

  Filter library. Note: Filter[0] is always the "chunked" filter.

### activeFilters

    protected InputFilter[] activeFilters

  Active filters (in order).

### lastActiveFilter

    protected int lastActiveFilter

  Index of the last active filter.

Constructor Detail

### InternalInputBuffer

    public InternalInputBuffer(Request request)

  Default constructor.

### InternalInputBuffer

    public InternalInputBuffer(Request request,
                               int headerBufferSize)

  Alternate constructor.

Method Detail

### setInputStream

    public void setInputStream(java.io.InputStream inputStream)

  Set the underlying socket input stream.

### getInputStream

    public java.io.InputStream getInputStream()

  Get the underlying socket input stream.

### addFilter

    public void addFilter(InputFilter filter)

  Add an input filter to the filter library.

### getFilters

    public InputFilter[] getFilters()

  Get filters.

### clearFilters

    public void clearFilters()

  Clear filters.

### addActiveFilter

    public void addActiveFilter(InputFilter filter)

  Add an input filter to the filter library.

### setSwallowInput

    public void setSwallowInput(boolean swallowInput)

  Set the swallow input flag.

### recycle

    public void recycle()

  Recycle the input buffer. This should be called when closing the connection.

### nextRequest

    public void nextRequest()
                     throws java.io.IOException

  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.

  Throws:
    `java.io.IOException`

### endRequest

    public void endRequest()
                    throws java.io.IOException

  End request (consumes leftover bytes).

  Throws:
    `java.io.IOException` - an undelying I/O error occured

### parseRequestLine

    public void parseRequestLine()
                          throws java.io.IOException

  Read the request line. This function is meant to be used during the HTTP request header parsing. Do NOT attempt to read the request body using it.

  Throws:
    `java.io.IOException` - If an exception occurs during the underlying socket read operations, or if the given buffer is not big enough to accomodate the whole line.

### parseHeaders

    public void parseHeaders()
                      throws java.io.IOException

  Parse the HTTP headers.

  Throws:
    `java.io.IOException`

### parseHeader

    public boolean parseHeader()
                        throws java.io.IOException

  Parse an HTTP header.

  Returns:
    false after reading a blank line (which indicates that the HTTP header parsing is done
  Throws:
    `java.io.IOException`

### doRead

    public int doRead(ByteChunk chunk,
                      Request req)
               throws java.io.IOException

  Read some bytes.

  Specified by:
    `doRead` in interface `InputBuffer`
  Throws:
    `java.io.IOException`

### fill

    protected boolean fill()
                    throws java.io.IOException

  Fill the internal buffer using data from the undelying input stream.

  Returns:
    false if at end of stream
  Throws:
    `java.io.IOException`

Copyright © 2000-2003 Apache Software Foundation. All Rights Reserved.