in source/credentials_provider_sts_web_identity.c [562:658]
static int s_make_sts_web_identity_http_query(
struct sts_web_identity_user_data *user_data,
struct aws_byte_cursor *body_cursor) {
AWS_FATAL_ASSERT(user_data->connection);
struct aws_http_stream *stream = NULL;
struct aws_input_stream *input_stream = NULL;
struct aws_http_message *request = aws_http_message_new_request(user_data->allocator);
if (request == NULL) {
return AWS_OP_ERR;
}
struct aws_credentials_provider_sts_web_identity_impl *impl = user_data->sts_web_identity_provider->impl;
char content_length[21];
AWS_ZERO_ARRAY(content_length);
snprintf(content_length, sizeof(content_length), "%" PRIu64, (uint64_t)body_cursor->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(request, content_len_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_content_type_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_host_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_api_version_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_accept_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_user_agent_header)) {
goto on_error;
}
if (aws_http_message_add_header(request, s_keep_alive_header)) {
goto on_error;
}
input_stream = aws_input_stream_new_from_cursor(user_data->allocator, body_cursor);
if (!input_stream) {
goto on_error;
}
aws_http_message_set_body_stream(request, input_stream);
if (aws_http_message_set_request_path(request, s_path)) {
goto on_error;
}
if (aws_http_message_set_request_method(request, aws_http_method_post)) {
goto on_error;
}
user_data->request = request;
struct aws_http_make_request_options request_options = {
.self_size = sizeof(request_options),
.on_response_headers = s_on_incoming_headers_fn,
.on_response_header_block_done = NULL,
.on_response_body = s_on_incoming_body_fn,
.on_complete = s_on_stream_complete_fn,
.user_data = user_data,
.request = request,
};
stream = impl->function_table->aws_http_connection_make_request(user_data->connection, &request_options);
if (!stream) {
goto on_error;
}
if (impl->function_table->aws_http_stream_activate(stream)) {
goto on_error;
}
return AWS_OP_SUCCESS;
on_error:
impl->function_table->aws_http_stream_release(stream);
aws_input_stream_destroy(input_stream);
aws_http_message_destroy(request);
user_data->request = NULL;
return AWS_OP_ERR;
}