in source/credentials_provider_sts.c [505:605]
static void s_start_make_request(
struct aws_credentials_provider *provider,
struct sts_creds_provider_user_data *provider_user_data) {
provider_user_data->message = aws_http_message_new_request(provider->allocator);
if (!provider_user_data->message) {
goto error;
}
if (aws_http_message_add_header(provider_user_data->message, s_host_header)) {
goto error;
}
if (aws_http_message_add_header(provider_user_data->message, s_content_type_header)) {
goto error;
}
if (aws_http_message_add_header(provider_user_data->message, s_api_version_header)) {
goto error;
}
if (aws_byte_buf_init(&provider_user_data->payload_body, provider->allocator, 256)) {
goto error;
}
if (s_write_body_to_buffer(provider, &provider_user_data->payload_body)) {
goto error;
}
char content_length[21];
AWS_ZERO_ARRAY(content_length);
snprintf(content_length, sizeof(content_length), "%" PRIu64, (uint64_t)provider_user_data->payload_body.len);
struct aws_http_header content_len_header = {
.name = s_content_length,
.value = aws_byte_cursor_from_c_str(content_length),
};
if (aws_http_message_add_header(provider_user_data->message, content_len_header)) {
goto error;
}
struct aws_byte_cursor payload_cur = aws_byte_cursor_from_buf(&provider_user_data->payload_body);
provider_user_data->input_stream =
aws_input_stream_new_from_cursor(provider_user_data->provider->allocator, &payload_cur);
if (!provider_user_data->input_stream) {
goto error;
}
aws_http_message_set_body_stream(provider_user_data->message, provider_user_data->input_stream);
if (aws_http_message_set_request_method(provider_user_data->message, aws_http_method_post)) {
goto error;
}
if (aws_http_message_set_request_path(provider_user_data->message, s_path)) {
goto error;
}
provider_user_data->signable = aws_signable_new_http_request(provider->allocator, provider_user_data->message);
if (!provider_user_data->signable) {
goto error;
}
struct aws_credentials_provider_sts_impl *impl = provider->impl;
provider_user_data->signing_config.algorithm = AWS_SIGNING_ALGORITHM_V4;
provider_user_data->signing_config.signature_type = AWS_ST_HTTP_REQUEST_HEADERS;
provider_user_data->signing_config.signed_body_header = AWS_SBHT_NONE;
provider_user_data->signing_config.config_type = AWS_SIGNING_CONFIG_AWS;
provider_user_data->signing_config.credentials_provider = impl->provider;
aws_date_time_init_now(&provider_user_data->signing_config.date);
provider_user_data->signing_config.region = s_signing_region;
provider_user_data->signing_config.service = s_service_name;
provider_user_data->signing_config.flags.use_double_uri_encode = false;
if (aws_sign_request_aws(
provider->allocator,
provider_user_data->signable,
(struct aws_signing_config_base *)&provider_user_data->signing_config,
s_on_signing_complete,
provider_user_data)) {
goto error;
}
return;
error:
AWS_LOGF_ERROR(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p): error occurred while creating an http request for signing: %s",
(void *)provider_user_data->provider,
aws_error_debug_str(aws_last_error()));
if (provider_user_data) {
s_clean_up_user_data(provider_user_data);
} else {
provider_user_data->callback(NULL, provider_user_data->error_code, provider_user_data->user_data);
}
}