Apache Tomcat 6.0.39

org.apache.coyote.http11.filters
Class ChunkedInputFilter

java.lang.Object
  extended by org.apache.coyote.http11.filters.ChunkedInputFilter
All Implemented Interfaces:
InputFilter, InputBuffer

public class ChunkedInputFilter
extends java.lang.Object
implements InputFilter

Chunked input filter. Parses chunked data according to http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1

Author:
Remy Maucherat, Filip Hanik

Field Summary
protected  byte[] buf
          Read bytes buffer.
protected  InputBuffer buffer
          Next buffer in the pipeline.
protected static ByteChunk ENCODING
           
protected static java.lang.String ENCODING_NAME
           
protected  boolean endChunk
          Flag set to true when the end chunk has been read.
protected  int lastValid
          Last valid byte in the buffer.
protected  boolean needCRLFParse
          Flag set to true if the next call to doRead() must parse a CRLF pair before doing anything else.
protected  int pos
          Position in the buffer.
protected  ByteChunk readChunk
          Byte chunk used to read bytes.
protected  int remaining
          Number of bytes remaining in the current chunk.
protected  ByteChunk trailingHeaders
          Byte chunk used to store trailing headers.
 
Constructor Summary
ChunkedInputFilter()
           
 
Method Summary
 int available()
          Amount of bytes still available in a buffer.
 int doRead(ByteChunk chunk, Request req)
          Read bytes.
 long end()
          End the current request.
 ByteChunk getEncodingName()
          Return the name of the associated encoding; Here, the value is "identity".
protected  boolean parseChunkHeader()
          Parse the header of a chunk.
protected  boolean parseCRLF()
          Deprecated. Use parseCRLF(boolean)
protected  void parseCRLF(boolean tolerant)
          Parse CRLF at end of chunk.
protected  boolean parseEndChunk()
          Parse end chunk data.
protected  int readBytes()
          Read bytes from the previous buffer.
 void recycle()
          Make the filter ready to process the next request.
 void setBuffer(InputBuffer buffer)
          Set the next buffer in the filter pipeline.
 void setRequest(Request request)
          Read the content length from the request.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

ENCODING_NAME

protected static final java.lang.String ENCODING_NAME
See Also:
Constant Field Values

ENCODING

protected static final ByteChunk ENCODING

buffer

protected InputBuffer buffer
Next buffer in the pipeline.


remaining

protected int remaining
Number of bytes remaining in the current chunk.


pos

protected int pos
Position in the buffer.


lastValid

protected int lastValid
Last valid byte in the buffer.


buf

protected byte[] buf
Read bytes buffer.


readChunk

protected ByteChunk readChunk
Byte chunk used to read bytes.


endChunk

protected boolean endChunk
Flag set to true when the end chunk has been read.


trailingHeaders

protected ByteChunk trailingHeaders
Byte chunk used to store trailing headers.


needCRLFParse

protected boolean needCRLFParse
Flag set to true if the next call to doRead() must parse a CRLF pair before doing anything else.

Constructor Detail

ChunkedInputFilter

public ChunkedInputFilter()
Method Detail

doRead

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

Specified by:
doRead in interface InputFilter
Specified by:
doRead in interface InputBuffer
Returns:
If the filter does request length control, this value is significant; it should be the number of bytes consumed from the buffer, up until the end of the current request body, or the buffer length, whichever is greater. If the filter does not do request body length control, the returned value should be -1.
Throws:
java.io.IOException

setRequest

public void setRequest(Request request)
Read the content length from the request.

Specified by:
setRequest in interface InputFilter

end

public long end()
         throws java.io.IOException
End the current request.

Specified by:
end in interface InputFilter
Returns:
0 is the expected return value. A positive value indicates that too many bytes were read. This method is allowed to use buffer.doRead to consume extra bytes. The result of this method can't be negative (if an error happens, an IOException should be thrown instead).
Throws:
java.io.IOException

available

public int available()
Amount of bytes still available in a buffer.

Specified by:
available in interface InputFilter

setBuffer

public void setBuffer(InputBuffer buffer)
Set the next buffer in the filter pipeline.

Specified by:
setBuffer in interface InputFilter

recycle

public void recycle()
Make the filter ready to process the next request.

Specified by:
recycle in interface InputFilter

getEncodingName

public ByteChunk getEncodingName()
Return the name of the associated encoding; Here, the value is "identity".

Specified by:
getEncodingName in interface InputFilter

readBytes

protected int readBytes()
                 throws java.io.IOException
Read bytes from the previous buffer.

Throws:
java.io.IOException

parseChunkHeader

protected boolean parseChunkHeader()
                            throws java.io.IOException
Parse the header of a chunk. A chunk header can look like A10CRLF F23;chunk-extension to be ignoredCRLF The letters before CRLF but after the trailer mark, must be valid hex digits, we should not parse F23IAMGONNAMESSTHISUP34CRLF as a valid header according to spec

Throws:
java.io.IOException

parseCRLF

@Deprecated
protected boolean parseCRLF()
                     throws java.io.IOException
Deprecated. Use parseCRLF(boolean)

Parse CRLF at end of chunk.

Throws:
java.io.IOException

parseCRLF

protected void parseCRLF(boolean tolerant)
                  throws java.io.IOException
Parse CRLF at end of chunk.

Parameters:
tolerant - Should tolerant parsing (LF and CRLF) be used? This is recommended (RFC2616, section 19.3) for message headers.
Throws:
java.io.IOException

parseEndChunk

protected boolean parseEndChunk()
                         throws java.io.IOException
Parse end chunk data.

Throws:
java.io.IOException

Apache Tomcat 6.0.39

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