Skip to content

Commit

Permalink
fix bug where we did not pass crt flex checksum configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
sbiscigl committed Aug 9, 2024
1 parent 6d758f3 commit a779186
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -6275,6 +6275,7 @@ namespace Aws
std::shared_ptr<Aws::Http::HttpRequest> request;
std::shared_ptr<Aws::Http::HttpResponse> response;
std::shared_ptr<Aws::Crt::Http::HttpRequest> crtHttpRequest;
std::shared_ptr<struct aws_s3_checksum_config> checksumConfig;
};

Aws::Client::XmlOutcome GenerateXmlOutcome(const std::shared_ptr<Http::HttpResponse>& response) const;
Expand Down
24 changes: 23 additions & 1 deletion generated/src/aws-cpp-sdk-s3-crt/source/S3CrtClient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -948,7 +948,6 @@ static void PutObjectRequestShutdownCallback(void *user_data)
// call user callback and release user_data
S3Crt::Model::PutObjectOutcome outcome(userData->s3CrtClient->GenerateXmlOutcome(userData->response));
userData->putResponseHandler(userData->s3CrtClient, *(reinterpret_cast<const PutObjectRequest*>(userData->originalRequest)), std::move(outcome), userData->asyncCallerContext);

Aws::Delete(userData);
}

Expand Down Expand Up @@ -1030,6 +1029,29 @@ void S3CrtClient::PutObjectAsync(const PutObjectRequest& request, const PutObjec
}
options.signing_config = &signing_config_override;

if (request.ChecksumAlgorithmHasBeenSet())
{
static std::pair<ChecksumAlgorithm, aws_s3_checksum_algorithm> crtChecksumMapping[]{
{ChecksumAlgorithm::CRC32, aws_s3_checksum_algorithm::AWS_SCA_CRC32},
{ChecksumAlgorithm::CRC32C, aws_s3_checksum_algorithm::AWS_SCA_CRC32C},
{ChecksumAlgorithm::SHA1, aws_s3_checksum_algorithm::AWS_SCA_SHA1},
{ChecksumAlgorithm::SHA256, aws_s3_checksum_algorithm::AWS_SCA_SHA256},
};

const auto checksumAlgorithm = request.GetChecksumAlgorithm();
const auto mapping = std::find_if(std::begin(crtChecksumMapping),
std::end(crtChecksumMapping),
[&checksumAlgorithm](const std::pair<ChecksumAlgorithm, aws_s3_checksum_algorithm>& mapping){ return mapping.first == checksumAlgorithm; });
if (mapping != std::end(crtChecksumMapping))
{
std::shared_ptr<struct aws_s3_checksum_config> checksum_config{Aws::New<struct aws_s3_checksum_config>(ALLOCATION_TAG)};
userData->checksumConfig = checksum_config;
checksum_config->checksum_algorithm = mapping->second;
checksum_config->location = AWS_SCL_TRAILER;
options.checksum_config = checksum_config.get();
}
}

std::shared_ptr<Aws::Crt::Http::HttpRequest> crtHttpRequest = userData->request->ToCrtHttpRequest();
options.message= crtHttpRequest->GetUnderlyingMessage();
userData->crtHttpRequest = crtHttpRequest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ namespace ${rootNamespace}
std::shared_ptr<Aws::Http::HttpRequest> request;
std::shared_ptr<Aws::Http::HttpResponse> response;
std::shared_ptr<Aws::Crt::Http::HttpRequest> crtHttpRequest;
std::shared_ptr<struct aws_s3_checksum_config> checksumConfig;
};

Aws::Client::XmlOutcome GenerateXmlOutcome(const std::shared_ptr<Http::HttpResponse>& response) const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,31 @@ void ${className}::${operation.name}Async(${constText}${operation.request.shape.
signing_config_override.service = Aws::Crt::ByteCursorFromCString(computeEndpointOutcome.GetResult().signerServiceName.c_str());
#end
options.signing_config = &signing_config_override;
#if($operation.name == "PutObject" || $operation.name == "CopyObject")

if (request.ChecksumAlgorithmHasBeenSet())
{
static std::pair<ChecksumAlgorithm, aws_s3_checksum_algorithm> crtChecksumMapping[]{
{ChecksumAlgorithm::CRC32, aws_s3_checksum_algorithm::AWS_SCA_CRC32},
{ChecksumAlgorithm::CRC32C, aws_s3_checksum_algorithm::AWS_SCA_CRC32C},
{ChecksumAlgorithm::SHA1, aws_s3_checksum_algorithm::AWS_SCA_SHA1},
{ChecksumAlgorithm::SHA256, aws_s3_checksum_algorithm::AWS_SCA_SHA256},
};

const auto checksumAlgorithm = request.GetChecksumAlgorithm();
const auto mapping = std::find_if(std::begin(crtChecksumMapping),
std::end(crtChecksumMapping),
[&checksumAlgorithm](const std::pair<ChecksumAlgorithm, aws_s3_checksum_algorithm>& mapping){ return mapping.first == checksumAlgorithm; });
if (mapping != std::end(crtChecksumMapping))
{
std::shared_ptr<struct aws_s3_checksum_config> checksum_config{Aws::New<struct aws_s3_checksum_config>(ALLOCATION_TAG)};
userData->checksumConfig = checksum_config;
checksum_config->checksum_algorithm = mapping->second;
checksum_config->location = AWS_SCL_TRAILER;
options.checksum_config = checksum_config.get();
}
}
#end

std::shared_ptr<Aws::Crt::Http::HttpRequest> crtHttpRequest = userData->request->ToCrtHttpRequest();
options.message= crtHttpRequest->GetUnderlyingMessage();
Expand Down

0 comments on commit a779186

Please sign in to comment.