private int DownloadNextChunk(IDocument remoteDocument, long offset, long remainingBytes, Transmission transmission, Stream outputstream, HashAlgorithm hashAlg)
{
lock (this.disposeLock) {
if (this.disposed)
{
transmission.Status = TransmissionStatus.ABORTED;
throw new ObjectDisposedException(transmission.Path);
}
IContentStream contentStream = remoteDocument.GetContentStream(remoteDocument.ContentStreamId, offset, remainingBytes);
transmission.Length = remoteDocument.ContentStreamLength;
transmission.Position = offset;
using (var remoteStream = contentStream.Stream)
using (var forwardstream = new ForwardReadingStream(remoteStream))
using (var offsetstream = new OffsetStream(forwardstream, offset))
using (var progress = transmission.CreateStream(offsetstream)) {
byte[] buffer = new byte[8 * 1024];
int result = 0;
int len;
while ((len = progress.Read(buffer, 0, buffer.Length)) > 0)
{
outputstream.Write(buffer, 0, len);
hashAlg.TransformBlock(buffer, 0, len, buffer, 0);
result += len;
outputstream.Flush();
}
return(result);
}
}
}