crc_check.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package s3
  2. import (
  3. "fmt"
  4. "github.com/ks3sdklib/aws-sdk-go/aws"
  5. "github.com/ks3sdklib/aws-sdk-go/internal/apierr"
  6. "hash"
  7. "strconv"
  8. )
  9. func CheckUploadCrc64(r *aws.Request) {
  10. clientCrc := r.Crc64.Sum64()
  11. serverCrc := uint64(0)
  12. if r.HTTPResponse.Header.Get("X-Amz-Checksum-Crc64ecma") != "" {
  13. serverCrc, _ = strconv.ParseUint(r.HTTPResponse.Header.Get("X-Amz-Checksum-Crc64ecma"), 10, 64)
  14. }
  15. r.Config.LogInfo("client crc:%d, server crc:%d", clientCrc, serverCrc)
  16. if serverCrc != 0 && clientCrc != serverCrc {
  17. r.Error = apierr.New("CRCCheckError", fmt.Sprintf("client crc and server crc do not match, request id:[%s]", r.HTTPResponse.Header.Get("X-Kss-Request-Id")), nil)
  18. r.Config.LogError("%s", r.Error.Error())
  19. }
  20. }
  21. func CheckDownloadCrc64(s3 *S3, res *GetObjectOutput, crc hash.Hash64) error {
  22. var err error
  23. clientCrc := crc.Sum64()
  24. serverCrc := uint64(0)
  25. if res.Metadata["X-Amz-Checksum-Crc64ecma"] != nil {
  26. serverCrc, _ = strconv.ParseUint(*res.Metadata["X-Amz-Checksum-Crc64ecma"], 10, 64)
  27. }
  28. s3.Config.LogInfo("client crc:%d, server crc:%d", clientCrc, serverCrc)
  29. if serverCrc != 0 && clientCrc != serverCrc {
  30. err = apierr.New("CRCCheckError", fmt.Sprintf("client crc and server crc do not match, request id:[%s]", *res.Metadata["X-Kss-Request-Id"]), nil)
  31. s3.Config.LogError("%s", err.Error())
  32. }
  33. return err
  34. }