public final class AwsChunkedEncodingInputStream extends SdkInputStream
Modifier and Type | Field and Description |
---|---|
private AWS4Signer |
aws4Signer |
private static java.lang.String |
CHUNK_SIGNATURE_HEADER |
private static java.lang.String |
CHUNK_STRING_TO_SIGN_PREFIX |
private static java.lang.String |
CRLF |
private ChunkContentIterator |
currentChunkIterator
Iterator on the current chunk that has been signed
|
private java.lang.String |
dateTime |
private DecodedStreamBuffer |
decodedStreamBuffer
Iterator on the buffer of the decoded stream,
Null if the wrapped stream is marksupported,
otherwise it will be initialized when this wrapper is marked.
|
private static int |
DEFAULT_BUFFER_SIZE |
private static int |
DEFAULT_CHUNK_SIZE |
protected static java.lang.String |
DEFAULT_ENCODING |
private static byte[] |
FINAL_CHUNK |
private java.lang.String |
headerSignature |
private javax.crypto.Mac |
hmacSha256 |
private java.io.InputStream |
is |
private boolean |
isAtStart |
private boolean |
isTerminating |
private java.lang.String |
keyPath |
private static org.apache.commons.logging.Log |
log |
private int |
maxBufferSize |
private java.lang.String |
priorChunkSignature |
private java.security.MessageDigest |
sha256 |
private static int |
SIGNATURE_LENGTH |
Constructor and Description |
---|
AwsChunkedEncodingInputStream(java.io.InputStream in,
byte[] kSigning,
java.lang.String datetime,
java.lang.String keyPath,
java.lang.String headerSignature,
AWS4Signer aws4Signer) |
AwsChunkedEncodingInputStream(java.io.InputStream in,
int maxBufferSize,
byte[] kSigning,
java.lang.String datetime,
java.lang.String keyPath,
java.lang.String headerSignature,
AWS4Signer aws4Signer)
A wrapper of InputStream that implements pseudo-chunked-encoding.
|
Modifier and Type | Method and Description |
---|---|
private static long |
calculateSignedChunkLength(long chunkDataSize) |
static long |
calculateStreamContentLength(long originalLength) |
private byte[] |
createSignedChunk(byte[] chunkData) |
protected java.io.InputStream |
getWrappedInputStream()
Returns the underlying input stream, if any, from the subclass; or null
if there is no underlying input stream.
|
void |
mark(int readlimit)
The readlimit parameter is ignored.
|
boolean |
markSupported() |
int |
read() |
int |
read(byte[] b,
int off,
int len) |
void |
reset()
Reset the stream, either by resetting the wrapped stream or using the
buffer created by this class.
|
private boolean |
setUpNextChunk()
Read in the next chunk of data, and create the necessary chunk extensions.
|
long |
skip(long n) |
abort, abortIfNeeded, isMetricActivated, release
protected static final java.lang.String DEFAULT_ENCODING
private static final int DEFAULT_CHUNK_SIZE
private static final int DEFAULT_BUFFER_SIZE
private static final java.lang.String CRLF
private static final java.lang.String CHUNK_STRING_TO_SIGN_PREFIX
private static final java.lang.String CHUNK_SIGNATURE_HEADER
private static final int SIGNATURE_LENGTH
private static final byte[] FINAL_CHUNK
private java.io.InputStream is
private final int maxBufferSize
private final java.lang.String dateTime
private final java.lang.String keyPath
private final java.lang.String headerSignature
private java.lang.String priorChunkSignature
private final AWS4Signer aws4Signer
private final java.security.MessageDigest sha256
private final javax.crypto.Mac hmacSha256
private ChunkContentIterator currentChunkIterator
private DecodedStreamBuffer decodedStreamBuffer
private boolean isAtStart
private boolean isTerminating
private static final org.apache.commons.logging.Log log
public AwsChunkedEncodingInputStream(java.io.InputStream in, byte[] kSigning, java.lang.String datetime, java.lang.String keyPath, java.lang.String headerSignature, AWS4Signer aws4Signer)
public AwsChunkedEncodingInputStream(java.io.InputStream in, int maxBufferSize, byte[] kSigning, java.lang.String datetime, java.lang.String keyPath, java.lang.String headerSignature, AWS4Signer aws4Signer)
in
- The original InputStream.maxBufferSize
- Maximum number of bytes buffered by this class.kSigning
- Signing key.datetime
- Datetime, as used in SigV4.keyPath
- Keypath/Scope, as used in SigV4.headerSignature
- The signature of the signed headers. This will be used for
calculating the signature of the first chunk.aws4Signer
- The AWS4Signer used for hashing and signing.public int read() throws java.io.IOException
read
in class java.io.InputStream
java.io.IOException
public int read(byte[] b, int off, int len) throws java.io.IOException
read
in class java.io.InputStream
java.io.IOException
public long skip(long n) throws java.io.IOException
skip
in class java.io.InputStream
java.io.IOException
public boolean markSupported()
markSupported
in class java.io.InputStream
InputStream.markSupported()
public void mark(int readlimit)
mark
in class java.io.InputStream
public void reset() throws java.io.IOException
reset
in class java.io.InputStream
java.io.IOException
public static long calculateStreamContentLength(long originalLength)
private static long calculateSignedChunkLength(long chunkDataSize)
private boolean setUpNextChunk() throws java.io.IOException
java.io.IOException
private byte[] createSignedChunk(byte[] chunkData)
protected java.io.InputStream getWrappedInputStream()
SdkInputStream
getWrappedInputStream
in class SdkInputStream