in src/AlibabaCloud.OSS.V2/Client.ObjectBasic.cs [530:565]
private void AddCrcCheckerNoRetry(ref Models.RequestModel request, ref OperationInput input)
{
if (!_clientImpl.Options.FeatureFlags.HasFlag(FeatureFlagsType.EnableCrc64CheckUpload))
{
return;
}
ulong crcInit = 0;
if (request is Models.AppendObjectRequest req)
{
// ignore crc check
if (req.InitHashCrc64 == null)
{
return;
}
crcInit = Convert.ToUInt64(req.InitHashCrc64);
}
var tracker = new WriteOnlyHashStream(new HashCrc64(BitConverter.GetBytes(crcInit)));
Action<ResponseMessage> handler = x =>
{
if (x.Headers.TryGetValue("x-oss-hash-crc64ecma", out var scrc))
{
var val = tracker.Hash.Final();
var ccrc = Convert.ToString(BitConverter.ToUInt64(val, 0), CultureInfo.InvariantCulture);
if (!string.Equals(ccrc, scrc))
{
x.Headers.TryGetValue("x-oss-request-id", out var requestId);
throw new NoRetryableInconsistentException(ccrc, scrc, requestId ?? "");
}
}
};
input.AddStreamTracker(tracker);
input.AddResponseHandler(handler);
}