in source/auth/Sigv4Signing.cpp [226:264]
bool Sigv4HttpRequestSigner::SignRequest(
const std::shared_ptr<Aws::Crt::Http::HttpRequest> &request,
const ISigningConfig &config,
const OnHttpRequestSigningComplete &completionCallback)
{
if (config.GetType() != SigningConfigType::Aws)
{
aws_raise_error(AWS_ERROR_INVALID_ARGUMENT);
return false;
}
auto awsSigningConfig = static_cast<const AwsSigningConfig *>(&config);
if (!awsSigningConfig->GetCredentialsProvider() && !awsSigningConfig->GetCredentials())
{
aws_raise_error(AWS_ERROR_INVALID_ARGUMENT);
return false;
}
auto signerCallbackData = Crt::New<HttpSignerCallbackData>(m_allocator);
if (!signerCallbackData)
{
return false;
}
signerCallbackData->Alloc = m_allocator;
signerCallbackData->OnRequestSigningComplete = completionCallback;
signerCallbackData->Request = request;
signerCallbackData->Signable = ScopedResource<struct aws_signable>(
aws_signable_new_http_request(m_allocator, request->GetUnderlyingMessage()), aws_signable_destroy);
return aws_sign_request_aws(
m_allocator,
signerCallbackData->Signable.get(),
(aws_signing_config_base *)awsSigningConfig->GetUnderlyingHandle(),
s_http_signing_complete_fn,
signerCallbackData) == AWS_OP_SUCCESS;
}