in source/s3_endpoint.c [41:118]
static void s_s3_endpoint_on_host_resolver_address_resolved(
struct aws_host_resolver *resolver,
const struct aws_string *host_name,
int err_code,
const struct aws_array_list *host_addresses,
void *user_data);
static struct aws_http_connection_manager *s_s3_endpoint_create_http_connection_manager(
struct aws_s3_endpoint *endpoint,
const struct aws_string *host_name,
struct aws_client_bootstrap *client_bootstrap,
const struct aws_tls_connection_options *tls_connection_options,
uint32_t max_connections);
static void s_s3_endpoint_http_connection_manager_shutdown_callback(void *user_data);
static void s_s3_endpoint_ref_count_zero(void *user_data);
struct aws_s3_endpoint *aws_s3_endpoint_new(
struct aws_allocator *allocator,
const struct aws_s3_endpoint_options *options) {
AWS_PRECONDITION(allocator);
AWS_PRECONDITION(options);
AWS_PRECONDITION(options->host_name);
struct aws_s3_endpoint *endpoint = aws_mem_calloc(allocator, 1, sizeof(struct aws_s3_endpoint));
aws_ref_count_init(&endpoint->ref_count, endpoint, s_s3_endpoint_ref_count_zero);
endpoint->allocator = allocator;
endpoint->host_name = options->host_name;
struct aws_host_resolution_config host_resolver_config;
AWS_ZERO_STRUCT(host_resolver_config);
host_resolver_config.impl = aws_default_dns_resolve;
host_resolver_config.max_ttl = options->dns_host_address_ttl_seconds;
host_resolver_config.impl_data = NULL;
if (aws_host_resolver_resolve_host(
options->client_bootstrap->host_resolver,
endpoint->host_name,
s_s3_endpoint_on_host_resolver_address_resolved,
&host_resolver_config,
NULL)) {
AWS_LOGF_ERROR(
AWS_LS_S3_ENDPOINT,
"id=%p: Error trying to resolve host for endpoint %s",
(void *)endpoint,
(const char *)endpoint->host_name->bytes);
goto error_cleanup;
}
endpoint->http_connection_manager = s_s3_endpoint_create_http_connection_manager(
endpoint,
options->host_name,
options->client_bootstrap,
options->tls_connection_options,
options->max_connections);
if (endpoint->http_connection_manager == NULL) {
goto error_cleanup;
}
endpoint->ref_count_zero_callback = options->ref_count_zero_callback;
endpoint->shutdown_callback = options->shutdown_callback;
endpoint->user_data = options->user_data;
return endpoint;
error_cleanup:
aws_string_destroy(options->host_name);
aws_mem_release(allocator, endpoint);
return NULL;
}