/// <summary>
/// Calculates the given checksum for a marshalled request
/// </summary>
/// <param name="algorithm">Checksum algorithm to calculate</param>
/// <param name="request">Request whose content to calculate the checksum for</param>
/// <returns>Calculated checksum for the given request</returns>
private static string CalculateChecksumForRequest(HashAlgorithm algorithm, IRequest request)
{
if (request.ContentStream != null)
{
var seekableStream = WrapperStream.SearchWrappedStream(request.ContentStream, s => s.CanSeek);
if (seekableStream != null)
{
var position = seekableStream.Position;
var checksumBytes = algorithm.ComputeHash(seekableStream);
seekableStream.Seek(position, SeekOrigin.Begin);
return(Convert.ToBase64String(checksumBytes));
}
else
{
throw new ArgumentException("Request must have a seekable content stream to calculate checksum");
}
}
else if (request.Content != null)
{
var checksumBytes = algorithm.ComputeHash(request.Content);
return(Convert.ToBase64String(checksumBytes));
}
else // request doesn't have content
{
return(string.Empty);
}
}