mirror of https://github.com/grpc/grpc.git
commit
79441baed9
70 changed files with 5474 additions and 208 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,49 @@ |
||||
# c-ares cmake file for gRPC |
||||
# |
||||
# This is currently very experimental, and unsupported. |
||||
# |
||||
# Copyright 2016, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
string(TOLOWER ${CMAKE_SYSTEM_NAME} cares_system_name) |
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../third_party/cares) |
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../third_party/cares/cares) |
||||
|
||||
if(${cares_system_name} MATCHES windows) |
||||
add_definitions(-DCARES_STATICLIB=1) |
||||
add_definitions(-DWIN32_LEAN_AND_MEAN=1) |
||||
else() |
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../third_party/cares/config_${cares_system_name}) |
||||
add_definitions(-DHAVE_CONFIG_H=1) |
||||
add_definitions(-D_GNU_SOURCE=1) |
||||
endif() |
||||
|
||||
file(GLOB lib_sources ../../third_party/cares/cares/*.c) |
||||
add_library(cares ${lib_sources}) |
@ -0,0 +1,149 @@ |
||||
#!/usr/bin/env python2.7 |
||||
|
||||
# Copyright 2015, Google Inc. |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are |
||||
# met: |
||||
# |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above |
||||
# copyright notice, this list of conditions and the following disclaimer |
||||
# in the documentation and/or other materials provided with the |
||||
# distribution. |
||||
# * Neither the name of Google Inc. nor the names of its |
||||
# contributors may be used to endorse or promote products derived from |
||||
# this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
import re |
||||
import os |
||||
import sys |
||||
import yaml |
||||
|
||||
os.chdir(os.path.dirname(sys.argv[0])+'/../..') |
||||
|
||||
out = {} |
||||
|
||||
try: |
||||
def gen_ares_build(x): |
||||
subprocess.call("third_party/cares/cares/buildconf", shell=True) |
||||
subprocess.call("third_party/cares/cares/configure", shell=True) |
||||
|
||||
def config_platform(x): |
||||
if 'linux' in sys.platform: |
||||
return 'src/cares/cares/config_linux/ares_config.h' |
||||
if 'darwin' in sys.platform: |
||||
return 'src/cares/cares/config_darwin/ares_config.h' |
||||
if not os.path.isfile('third_party/cares/cares/ares_config.h'): |
||||
gen_ares_build(x) |
||||
return 'third_party/cares/cares/ares_config.h' |
||||
|
||||
def ares_build(x): |
||||
if os.path.isfile('src/cares/cares/ares_build.h'): |
||||
return 'src/cares/cares/ares_build.h' |
||||
if not os.path.isfile('third_party/cares/cares/ares_build.h'): |
||||
gen_ares_build(x) |
||||
return 'third_party/cares/cares/ares_build.h' |
||||
|
||||
out['libs'] = [{ |
||||
'name': 'ares', |
||||
'defaults': 'ares', |
||||
'build': 'private', |
||||
'language': 'c', |
||||
'secure': 'no', |
||||
'src': [ |
||||
"third_party/cares/cares/ares__close_sockets.c", |
||||
"third_party/cares/cares/ares__get_hostent.c", |
||||
"third_party/cares/cares/ares__read_line.c", |
||||
"third_party/cares/cares/ares__timeval.c", |
||||
"third_party/cares/cares/ares_cancel.c", |
||||
"third_party/cares/cares/ares_create_query.c", |
||||
"third_party/cares/cares/ares_data.c", |
||||
"third_party/cares/cares/ares_destroy.c", |
||||
"third_party/cares/cares/ares_expand_name.c", |
||||
"third_party/cares/cares/ares_expand_string.c", |
||||
"third_party/cares/cares/ares_fds.c", |
||||
"third_party/cares/cares/ares_free_hostent.c", |
||||
"third_party/cares/cares/ares_free_string.c", |
||||
"third_party/cares/cares/ares_getenv.c", |
||||
"third_party/cares/cares/ares_gethostbyaddr.c", |
||||
"third_party/cares/cares/ares_gethostbyname.c", |
||||
"third_party/cares/cares/ares_getnameinfo.c", |
||||
"third_party/cares/cares/ares_getopt.c", |
||||
"third_party/cares/cares/ares_getsock.c", |
||||
"third_party/cares/cares/ares_init.c", |
||||
"third_party/cares/cares/ares_library_init.c", |
||||
"third_party/cares/cares/ares_llist.c", |
||||
"third_party/cares/cares/ares_mkquery.c", |
||||
"third_party/cares/cares/ares_nowarn.c", |
||||
"third_party/cares/cares/ares_options.c", |
||||
"third_party/cares/cares/ares_parse_a_reply.c", |
||||
"third_party/cares/cares/ares_parse_aaaa_reply.c", |
||||
"third_party/cares/cares/ares_parse_mx_reply.c", |
||||
"third_party/cares/cares/ares_parse_naptr_reply.c", |
||||
"third_party/cares/cares/ares_parse_ns_reply.c", |
||||
"third_party/cares/cares/ares_parse_ptr_reply.c", |
||||
"third_party/cares/cares/ares_parse_soa_reply.c", |
||||
"third_party/cares/cares/ares_parse_srv_reply.c", |
||||
"third_party/cares/cares/ares_parse_txt_reply.c", |
||||
"third_party/cares/cares/ares_platform.c", |
||||
"third_party/cares/cares/ares_process.c", |
||||
"third_party/cares/cares/ares_query.c", |
||||
"third_party/cares/cares/ares_search.c", |
||||
"third_party/cares/cares/ares_send.c", |
||||
"third_party/cares/cares/ares_strcasecmp.c", |
||||
"third_party/cares/cares/ares_strdup.c", |
||||
"third_party/cares/cares/ares_strerror.c", |
||||
"third_party/cares/cares/ares_timeout.c", |
||||
"third_party/cares/cares/ares_version.c", |
||||
"third_party/cares/cares/ares_writev.c", |
||||
"third_party/cares/cares/bitncmp.c", |
||||
"third_party/cares/cares/inet_net_pton.c", |
||||
"third_party/cares/cares/inet_ntop.c", |
||||
"third_party/cares/cares/windows_port.c", |
||||
], |
||||
'headers': [ |
||||
"third_party/cares/cares/ares.h", |
||||
"third_party/cares/cares/ares_data.h", |
||||
"third_party/cares/cares/ares_dns.h", |
||||
"third_party/cares/cares/ares_getenv.h", |
||||
"third_party/cares/cares/ares_getopt.h", |
||||
"third_party/cares/cares/ares_inet_net_pton.h", |
||||
"third_party/cares/cares/ares_iphlpapi.h", |
||||
"third_party/cares/cares/ares_ipv6.h", |
||||
"third_party/cares/cares/ares_library_init.h", |
||||
"third_party/cares/cares/ares_llist.h", |
||||
"third_party/cares/cares/ares_nowarn.h", |
||||
"third_party/cares/cares/ares_platform.h", |
||||
"third_party/cares/cares/ares_private.h", |
||||
"third_party/cares/cares/ares_rules.h", |
||||
"third_party/cares/cares/ares_setup.h", |
||||
"third_party/cares/cares/ares_strcasecmp.h", |
||||
"third_party/cares/cares/ares_strdup.h", |
||||
"third_party/cares/cares/ares_version.h", |
||||
"third_party/cares/cares/bitncmp.h", |
||||
"third_party/cares/cares/config-win32.h", |
||||
"third_party/cares/cares/setup_once.h", |
||||
"third_party/cares/ares_build.h", |
||||
"third_party/cares/config_linux/ares_config.h", |
||||
"third_party/cares/config_darwin/ares_config.h" |
||||
], |
||||
}] |
||||
except: |
||||
pass |
||||
|
||||
print yaml.dump(out) |
@ -0,0 +1,350 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2015, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
#if GRPC_ARES == 1 && !defined(GRPC_UV) |
||||
|
||||
#include <string.h> |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/host_port.h> |
||||
#include <grpc/support/string_util.h> |
||||
|
||||
#include "src/core/ext/client_channel/http_connect_handshaker.h" |
||||
#include "src/core/ext/client_channel/lb_policy_registry.h" |
||||
#include "src/core/ext/client_channel/resolver_registry.h" |
||||
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h" |
||||
#include "src/core/lib/channel/channel_args.h" |
||||
#include "src/core/lib/iomgr/combiner.h" |
||||
#include "src/core/lib/iomgr/resolve_address.h" |
||||
#include "src/core/lib/iomgr/timer.h" |
||||
#include "src/core/lib/support/backoff.h" |
||||
#include "src/core/lib/support/env.h" |
||||
#include "src/core/lib/support/string.h" |
||||
|
||||
#define GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS 1 |
||||
#define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1 |
||||
#define GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER 1.6 |
||||
#define GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS 120 |
||||
#define GRPC_DNS_RECONNECT_JITTER 0.2 |
||||
|
||||
typedef struct { |
||||
/** base class: must be first */ |
||||
grpc_resolver base; |
||||
/** name to resolve (usually the same as target_name) */ |
||||
char *name_to_resolve; |
||||
/** default port to use */ |
||||
char *default_port; |
||||
/** channel args. */ |
||||
grpc_channel_args *channel_args; |
||||
/** pollset_set to drive the name resolution process */ |
||||
grpc_pollset_set *interested_parties; |
||||
|
||||
/** Closures used by the combiner */ |
||||
grpc_closure dns_ares_on_retry_timer_locked; |
||||
grpc_closure dns_ares_on_resolved_locked; |
||||
|
||||
/** Combiner guarding the rest of the state */ |
||||
grpc_combiner *combiner; |
||||
/** are we currently resolving? */ |
||||
bool resolving; |
||||
/** which version of the result have we published? */ |
||||
int published_version; |
||||
/** which version of the result is current? */ |
||||
int resolved_version; |
||||
/** pending next completion, or NULL */ |
||||
grpc_closure *next_completion; |
||||
/** target result address for next completion */ |
||||
grpc_channel_args **target_result; |
||||
/** current (fully resolved) result */ |
||||
grpc_channel_args *resolved_result; |
||||
/** retry timer */ |
||||
bool have_retry_timer; |
||||
grpc_timer retry_timer; |
||||
/** retry backoff state */ |
||||
gpr_backoff backoff_state; |
||||
|
||||
/** currently resolving addresses */ |
||||
grpc_resolved_addresses *addresses; |
||||
} ares_dns_resolver; |
||||
|
||||
static void dns_ares_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *r); |
||||
|
||||
static void dns_ares_start_resolving_locked(grpc_exec_ctx *exec_ctx, |
||||
ares_dns_resolver *r); |
||||
static void dns_ares_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, |
||||
ares_dns_resolver *r); |
||||
|
||||
static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_resolver *r); |
||||
static void dns_ares_channel_saw_error_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_resolver *r); |
||||
static void dns_ares_next_locked(grpc_exec_ctx *exec_ctx, grpc_resolver *r, |
||||
grpc_channel_args **target_result, |
||||
grpc_closure *on_complete); |
||||
|
||||
static const grpc_resolver_vtable dns_ares_resolver_vtable = { |
||||
dns_ares_destroy, dns_ares_shutdown_locked, |
||||
dns_ares_channel_saw_error_locked, dns_ares_next_locked}; |
||||
|
||||
static void dns_ares_shutdown_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_resolver *resolver) { |
||||
ares_dns_resolver *r = (ares_dns_resolver *)resolver; |
||||
if (r->have_retry_timer) { |
||||
grpc_timer_cancel(exec_ctx, &r->retry_timer); |
||||
} |
||||
if (r->next_completion != NULL) { |
||||
*r->target_result = NULL; |
||||
grpc_closure_sched( |
||||
exec_ctx, r->next_completion, |
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resolver Shutdown")); |
||||
r->next_completion = NULL; |
||||
} |
||||
} |
||||
|
||||
static void dns_ares_channel_saw_error_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_resolver *resolver) { |
||||
ares_dns_resolver *r = (ares_dns_resolver *)resolver; |
||||
if (!r->resolving) { |
||||
gpr_backoff_reset(&r->backoff_state); |
||||
dns_ares_start_resolving_locked(exec_ctx, r); |
||||
} |
||||
} |
||||
|
||||
static void dns_ares_on_retry_timer_locked(grpc_exec_ctx *exec_ctx, void *arg, |
||||
grpc_error *error) { |
||||
ares_dns_resolver *r = arg; |
||||
r->have_retry_timer = false; |
||||
if (error == GRPC_ERROR_NONE) { |
||||
if (!r->resolving) { |
||||
dns_ares_start_resolving_locked(exec_ctx, r); |
||||
} |
||||
} |
||||
GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "retry-timer"); |
||||
} |
||||
|
||||
static void dns_ares_on_resolved_locked(grpc_exec_ctx *exec_ctx, void *arg, |
||||
grpc_error *error) { |
||||
ares_dns_resolver *r = arg; |
||||
grpc_channel_args *result = NULL; |
||||
GPR_ASSERT(r->resolving); |
||||
r->resolving = false; |
||||
if (r->addresses != NULL) { |
||||
grpc_lb_addresses *addresses = grpc_lb_addresses_create( |
||||
r->addresses->naddrs, NULL /* user_data_vtable */); |
||||
for (size_t i = 0; i < r->addresses->naddrs; ++i) { |
||||
grpc_lb_addresses_set_address( |
||||
addresses, i, &r->addresses->addrs[i].addr, |
||||
r->addresses->addrs[i].len, false /* is_balancer */, |
||||
NULL /* balancer_name */, NULL /* user_data */); |
||||
} |
||||
grpc_arg new_arg = grpc_lb_addresses_create_channel_arg(addresses); |
||||
result = grpc_channel_args_copy_and_add(r->channel_args, &new_arg, 1); |
||||
grpc_resolved_addresses_destroy(r->addresses); |
||||
grpc_lb_addresses_destroy(exec_ctx, addresses); |
||||
} else { |
||||
gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC); |
||||
gpr_timespec next_try = gpr_backoff_step(&r->backoff_state, now); |
||||
gpr_timespec timeout = gpr_time_sub(next_try, now); |
||||
gpr_log(GPR_INFO, "dns resolution failed (will retry): %s", |
||||
grpc_error_string(error)); |
||||
GPR_ASSERT(!r->have_retry_timer); |
||||
r->have_retry_timer = true; |
||||
GRPC_RESOLVER_REF(&r->base, "retry-timer"); |
||||
if (gpr_time_cmp(timeout, gpr_time_0(timeout.clock_type)) > 0) { |
||||
gpr_log(GPR_DEBUG, "retrying in %" PRId64 ".%09d seconds", timeout.tv_sec, |
||||
timeout.tv_nsec); |
||||
} else { |
||||
gpr_log(GPR_DEBUG, "retrying immediately"); |
||||
} |
||||
grpc_timer_init(exec_ctx, &r->retry_timer, next_try, |
||||
&r->dns_ares_on_retry_timer_locked, now); |
||||
} |
||||
if (r->resolved_result != NULL) { |
||||
grpc_channel_args_destroy(exec_ctx, r->resolved_result); |
||||
} |
||||
r->resolved_result = result; |
||||
r->resolved_version++; |
||||
dns_ares_maybe_finish_next_locked(exec_ctx, r); |
||||
GRPC_RESOLVER_UNREF(exec_ctx, &r->base, "dns-resolving"); |
||||
} |
||||
|
||||
static void dns_ares_next_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_resolver *resolver, |
||||
grpc_channel_args **target_result, |
||||
grpc_closure *on_complete) { |
||||
gpr_log(GPR_DEBUG, "dns_ares_next is called."); |
||||
ares_dns_resolver *r = (ares_dns_resolver *)resolver; |
||||
GPR_ASSERT(!r->next_completion); |
||||
r->next_completion = on_complete; |
||||
r->target_result = target_result; |
||||
if (r->resolved_version == 0 && !r->resolving) { |
||||
gpr_backoff_reset(&r->backoff_state); |
||||
dns_ares_start_resolving_locked(exec_ctx, r); |
||||
} else { |
||||
dns_ares_maybe_finish_next_locked(exec_ctx, r); |
||||
} |
||||
} |
||||
|
||||
static void dns_ares_start_resolving_locked(grpc_exec_ctx *exec_ctx, |
||||
ares_dns_resolver *r) { |
||||
GRPC_RESOLVER_REF(&r->base, "dns-resolving"); |
||||
GPR_ASSERT(!r->resolving); |
||||
r->resolving = true; |
||||
r->addresses = NULL; |
||||
grpc_resolve_address(exec_ctx, r->name_to_resolve, r->default_port, |
||||
r->interested_parties, &r->dns_ares_on_resolved_locked, |
||||
&r->addresses); |
||||
} |
||||
|
||||
static void dns_ares_maybe_finish_next_locked(grpc_exec_ctx *exec_ctx, |
||||
ares_dns_resolver *r) { |
||||
if (r->next_completion != NULL && |
||||
r->resolved_version != r->published_version) { |
||||
*r->target_result = r->resolved_result == NULL |
||||
? NULL |
||||
: grpc_channel_args_copy(r->resolved_result); |
||||
grpc_closure_sched(exec_ctx, r->next_completion, GRPC_ERROR_NONE); |
||||
r->next_completion = NULL; |
||||
r->published_version = r->resolved_version; |
||||
} |
||||
} |
||||
|
||||
static void dns_ares_destroy(grpc_exec_ctx *exec_ctx, grpc_resolver *gr) { |
||||
gpr_log(GPR_DEBUG, "dns_ares_destroy"); |
||||
ares_dns_resolver *r = (ares_dns_resolver *)gr; |
||||
if (r->resolved_result != NULL) { |
||||
grpc_channel_args_destroy(exec_ctx, r->resolved_result); |
||||
} |
||||
grpc_pollset_set_destroy(exec_ctx, r->interested_parties); |
||||
gpr_free(r->name_to_resolve); |
||||
gpr_free(r->default_port); |
||||
grpc_channel_args_destroy(exec_ctx, r->channel_args); |
||||
gpr_free(r); |
||||
} |
||||
|
||||
static grpc_resolver *dns_ares_create(grpc_exec_ctx *exec_ctx, |
||||
grpc_resolver_args *args, |
||||
const char *default_port) { |
||||
// Get name from args.
|
||||
const char *path = args->uri->path; |
||||
if (0 != strcmp(args->uri->authority, "")) { |
||||
gpr_log(GPR_ERROR, "authority based dns uri's not supported"); |
||||
return NULL; |
||||
} |
||||
if (path[0] == '/') ++path; |
||||
// Create resolver.
|
||||
ares_dns_resolver *r = gpr_zalloc(sizeof(ares_dns_resolver)); |
||||
grpc_resolver_init(&r->base, &dns_ares_resolver_vtable, args->combiner); |
||||
r->name_to_resolve = gpr_strdup(path); |
||||
r->default_port = gpr_strdup(default_port); |
||||
r->channel_args = grpc_channel_args_copy(args->args); |
||||
r->interested_parties = grpc_pollset_set_create(); |
||||
if (args->pollset_set != NULL) { |
||||
grpc_pollset_set_add_pollset_set(exec_ctx, r->interested_parties, |
||||
args->pollset_set); |
||||
} |
||||
gpr_backoff_init(&r->backoff_state, GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS, |
||||
GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER, |
||||
GRPC_DNS_RECONNECT_JITTER, |
||||
GRPC_DNS_MIN_CONNECT_TIMEOUT_SECONDS * 1000, |
||||
GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS * 1000); |
||||
grpc_closure_init(&r->dns_ares_on_retry_timer_locked, |
||||
dns_ares_on_retry_timer_locked, r, |
||||
grpc_combiner_scheduler(r->base.combiner, false)); |
||||
grpc_closure_init(&r->dns_ares_on_resolved_locked, |
||||
dns_ares_on_resolved_locked, r, |
||||
grpc_combiner_scheduler(r->base.combiner, false)); |
||||
return &r->base; |
||||
} |
||||
|
||||
/*
|
||||
* FACTORY |
||||
*/ |
||||
|
||||
static void dns_ares_factory_ref(grpc_resolver_factory *factory) {} |
||||
|
||||
static void dns_ares_factory_unref(grpc_resolver_factory *factory) {} |
||||
|
||||
static grpc_resolver *dns_factory_create_resolver( |
||||
grpc_exec_ctx *exec_ctx, grpc_resolver_factory *factory, |
||||
grpc_resolver_args *args) { |
||||
return dns_ares_create(exec_ctx, args, "https"); |
||||
} |
||||
|
||||
static char *dns_ares_factory_get_default_host_name( |
||||
grpc_resolver_factory *factory, grpc_uri *uri) { |
||||
const char *path = uri->path; |
||||
if (path[0] == '/') ++path; |
||||
return gpr_strdup(path); |
||||
} |
||||
|
||||
static const grpc_resolver_factory_vtable dns_ares_factory_vtable = { |
||||
dns_ares_factory_ref, dns_ares_factory_unref, dns_factory_create_resolver, |
||||
dns_ares_factory_get_default_host_name, "dns"}; |
||||
static grpc_resolver_factory dns_resolver_factory = {&dns_ares_factory_vtable}; |
||||
|
||||
static grpc_resolver_factory *dns_ares_resolver_factory_create() { |
||||
return &dns_resolver_factory; |
||||
} |
||||
|
||||
void grpc_resolver_dns_ares_init(void) { |
||||
char *resolver = gpr_getenv("GRPC_DNS_RESOLVER"); |
||||
/* TODO(zyc): Turn on c-ares based resolver by default after the address
|
||||
sorter and the CNAME support are added. */ |
||||
if (resolver != NULL && gpr_stricmp(resolver, "ares") == 0) { |
||||
grpc_error *error = grpc_ares_init(); |
||||
if (error != GRPC_ERROR_NONE) { |
||||
GRPC_LOG_IF_ERROR("ares_library_init() failed", error); |
||||
return; |
||||
} |
||||
grpc_resolve_address = grpc_resolve_address_ares; |
||||
grpc_register_resolver_type(dns_ares_resolver_factory_create()); |
||||
} |
||||
gpr_free(resolver); |
||||
} |
||||
|
||||
void grpc_resolver_dns_ares_shutdown(void) { |
||||
char *resolver = gpr_getenv("GRPC_DNS_RESOLVER"); |
||||
if (resolver != NULL && gpr_stricmp(resolver, "ares") == 0) { |
||||
grpc_ares_cleanup(); |
||||
} |
||||
gpr_free(resolver); |
||||
} |
||||
|
||||
#else /* GRPC_ARES == 1 && !defined(GRPC_UV) */ |
||||
|
||||
void grpc_resolver_dns_ares_init(void) {} |
||||
|
||||
void grpc_resolver_dns_ares_shutdown(void) {} |
||||
|
||||
#endif /* GRPC_ARES == 1 && !defined(GRPC_UV) */ |
@ -0,0 +1,65 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_EV_DRIVER_H |
||||
#define GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_EV_DRIVER_H |
||||
|
||||
#include <ares.h> |
||||
|
||||
#include "src/core/lib/iomgr/exec_ctx.h" |
||||
#include "src/core/lib/iomgr/pollset_set.h" |
||||
|
||||
typedef struct grpc_ares_ev_driver grpc_ares_ev_driver; |
||||
|
||||
/* Start \a ev_driver. It will keep working until all IO on its ares_channel is
|
||||
done, or grpc_ares_ev_driver_destroy() is called. It may notify the callbacks |
||||
bound to its ares_channel when necessary. */ |
||||
void grpc_ares_ev_driver_start(grpc_exec_ctx *exec_ctx, |
||||
grpc_ares_ev_driver *ev_driver); |
||||
|
||||
/* Returns the ares_channel owned by \a ev_driver. To bind a c-ares query to
|
||||
\a ev_driver, use the ares_channel owned by \a ev_driver as the arg of the |
||||
query. */ |
||||
ares_channel *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver); |
||||
|
||||
/* Creates a new grpc_ares_ev_driver. Returns GRPC_ERROR_NONE if \a ev_driver is
|
||||
created successfully. */ |
||||
grpc_error *grpc_ares_ev_driver_create(grpc_ares_ev_driver **ev_driver, |
||||
grpc_pollset_set *pollset_set); |
||||
|
||||
/* Destroys \a ev_driver asynchronously. Pending lookups made on \a ev_driver
|
||||
will be cancelled and their on_done callbacks will be invoked with a status |
||||
of ARES_ECANCELLED. */ |
||||
void grpc_ares_ev_driver_destroy(grpc_ares_ev_driver *ev_driver); |
||||
|
||||
#endif /* GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_EV_DRIVER_H */ |
@ -0,0 +1,319 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
#include <grpc/support/port_platform.h> |
||||
#include "src/core/lib/iomgr/port.h" |
||||
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET) |
||||
|
||||
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h" |
||||
|
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/string_util.h> |
||||
#include <grpc/support/time.h> |
||||
#include <grpc/support/useful.h> |
||||
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h" |
||||
#include "src/core/lib/iomgr/ev_posix.h" |
||||
#include "src/core/lib/iomgr/iomgr_internal.h" |
||||
#include "src/core/lib/iomgr/sockaddr_utils.h" |
||||
#include "src/core/lib/support/string.h" |
||||
|
||||
typedef struct fd_node { |
||||
/** the owner of this fd node */ |
||||
grpc_ares_ev_driver *ev_driver; |
||||
/** the grpc_fd owned by this fd node */ |
||||
grpc_fd *grpc_fd; |
||||
/** a closure wrapping on_readable_cb, which should be invoked when the
|
||||
grpc_fd in this node becomes readable. */ |
||||
grpc_closure read_closure; |
||||
/** a closure wrapping on_writable_cb, which should be invoked when the
|
||||
grpc_fd in this node becomes writable. */ |
||||
grpc_closure write_closure; |
||||
/** next fd node in the list */ |
||||
struct fd_node *next; |
||||
|
||||
/** mutex guarding the rest of the state */ |
||||
gpr_mu mu; |
||||
/** if the readable closure has been registered */ |
||||
bool readable_registered; |
||||
/** if the writable closure has been registered */ |
||||
bool writable_registered; |
||||
} fd_node; |
||||
|
||||
struct grpc_ares_ev_driver { |
||||
/** the ares_channel owned by this event driver */ |
||||
ares_channel channel; |
||||
/** pollset set for driving the IO events of the channel */ |
||||
grpc_pollset_set *pollset_set; |
||||
/** refcount of the event driver */ |
||||
gpr_refcount refs; |
||||
|
||||
/** mutex guarding the rest of the state */ |
||||
gpr_mu mu; |
||||
/** a list of grpc_fd that this event driver is currently using. */ |
||||
fd_node *fds; |
||||
/** is this event driver currently working? */ |
||||
bool working; |
||||
/** is this event driver being shut down */ |
||||
bool shutting_down; |
||||
}; |
||||
|
||||
static void grpc_ares_notify_on_event_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_ares_ev_driver *ev_driver); |
||||
|
||||
static grpc_ares_ev_driver *grpc_ares_ev_driver_ref( |
||||
grpc_ares_ev_driver *ev_driver) { |
||||
gpr_log(GPR_DEBUG, "Ref ev_driver %" PRIuPTR, (uintptr_t)ev_driver); |
||||
gpr_ref(&ev_driver->refs); |
||||
return ev_driver; |
||||
} |
||||
|
||||
static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver *ev_driver) { |
||||
gpr_log(GPR_DEBUG, "Unref ev_driver %" PRIuPTR, (uintptr_t)ev_driver); |
||||
if (gpr_unref(&ev_driver->refs)) { |
||||
gpr_log(GPR_DEBUG, "destroy ev_driver %" PRIuPTR, (uintptr_t)ev_driver); |
||||
GPR_ASSERT(ev_driver->fds == NULL); |
||||
gpr_mu_destroy(&ev_driver->mu); |
||||
ares_destroy(ev_driver->channel); |
||||
gpr_free(ev_driver); |
||||
} |
||||
} |
||||
|
||||
static void fd_node_destroy(grpc_exec_ctx *exec_ctx, fd_node *fdn) { |
||||
gpr_log(GPR_DEBUG, "delete fd: %d", grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
GPR_ASSERT(!fdn->readable_registered); |
||||
GPR_ASSERT(!fdn->writable_registered); |
||||
gpr_mu_destroy(&fdn->mu); |
||||
grpc_pollset_set_del_fd(exec_ctx, fdn->ev_driver->pollset_set, fdn->grpc_fd); |
||||
grpc_fd_shutdown(exec_ctx, fdn->grpc_fd, |
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING("fd node destroyed")); |
||||
grpc_fd_orphan(exec_ctx, fdn->grpc_fd, NULL, NULL, "c-ares query finished"); |
||||
gpr_free(fdn); |
||||
} |
||||
|
||||
grpc_error *grpc_ares_ev_driver_create(grpc_ares_ev_driver **ev_driver, |
||||
grpc_pollset_set *pollset_set) { |
||||
*ev_driver = gpr_malloc(sizeof(grpc_ares_ev_driver)); |
||||
int status = ares_init(&(*ev_driver)->channel); |
||||
gpr_log(GPR_DEBUG, "grpc_ares_ev_driver_create"); |
||||
if (status != ARES_SUCCESS) { |
||||
char *err_msg; |
||||
gpr_asprintf(&err_msg, "Failed to init ares channel. C-ares error: %s", |
||||
ares_strerror(status)); |
||||
grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(err_msg); |
||||
gpr_free(err_msg); |
||||
gpr_free(*ev_driver); |
||||
return err; |
||||
} |
||||
gpr_mu_init(&(*ev_driver)->mu); |
||||
gpr_ref_init(&(*ev_driver)->refs, 1); |
||||
(*ev_driver)->pollset_set = pollset_set; |
||||
(*ev_driver)->fds = NULL; |
||||
(*ev_driver)->working = false; |
||||
(*ev_driver)->shutting_down = false; |
||||
return GRPC_ERROR_NONE; |
||||
} |
||||
|
||||
void grpc_ares_ev_driver_destroy(grpc_ares_ev_driver *ev_driver) { |
||||
// It's not safe to shut down remaining fds here directly, becauses
|
||||
// ares_host_callback does not provide an exec_ctx. We mark the event driver
|
||||
// as being shut down. If the event driver is working,
|
||||
// grpc_ares_notify_on_event_locked will shut down the fds; if it's not
|
||||
// working, there are no fds to shut down.
|
||||
gpr_mu_lock(&ev_driver->mu); |
||||
ev_driver->shutting_down = true; |
||||
gpr_mu_unlock(&ev_driver->mu); |
||||
grpc_ares_ev_driver_unref(ev_driver); |
||||
} |
||||
|
||||
// Search fd in the fd_node list head. This is an O(n) search, the max possible
|
||||
// value of n is ARES_GETSOCK_MAXNUM (16). n is typically 1 - 2 in our tests.
|
||||
static fd_node *pop_fd_node(fd_node **head, int fd) { |
||||
fd_node dummy_head; |
||||
dummy_head.next = *head; |
||||
fd_node *node = &dummy_head; |
||||
while (node->next != NULL) { |
||||
if (grpc_fd_wrapped_fd(node->next->grpc_fd) == fd) { |
||||
fd_node *ret = node->next; |
||||
node->next = node->next->next; |
||||
*head = dummy_head.next; |
||||
return ret; |
||||
} |
||||
node = node->next; |
||||
} |
||||
return NULL; |
||||
} |
||||
|
||||
static void on_readable_cb(grpc_exec_ctx *exec_ctx, void *arg, |
||||
grpc_error *error) { |
||||
fd_node *fdn = arg; |
||||
grpc_ares_ev_driver *ev_driver = fdn->ev_driver; |
||||
gpr_mu_lock(&fdn->mu); |
||||
fdn->readable_registered = false; |
||||
gpr_mu_unlock(&fdn->mu); |
||||
|
||||
gpr_log(GPR_DEBUG, "readable on %d", grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
if (error == GRPC_ERROR_NONE) { |
||||
ares_process_fd(ev_driver->channel, grpc_fd_wrapped_fd(fdn->grpc_fd), |
||||
ARES_SOCKET_BAD); |
||||
} else { |
||||
// If error is not GRPC_ERROR_NONE, it means the fd has been shutdown or
|
||||
// timed out. The pending lookups made on this ev_driver will be cancelled
|
||||
// by the following ares_cancel() and the on_done callbacks will be invoked
|
||||
// with a status of ARES_ECANCELLED. The remaining file descriptors in this
|
||||
// ev_driver will be cleaned up in the follwing
|
||||
// grpc_ares_notify_on_event_locked().
|
||||
ares_cancel(ev_driver->channel); |
||||
} |
||||
gpr_mu_lock(&ev_driver->mu); |
||||
grpc_ares_notify_on_event_locked(exec_ctx, ev_driver); |
||||
gpr_mu_unlock(&ev_driver->mu); |
||||
grpc_ares_ev_driver_unref(ev_driver); |
||||
} |
||||
|
||||
static void on_writable_cb(grpc_exec_ctx *exec_ctx, void *arg, |
||||
grpc_error *error) { |
||||
fd_node *fdn = arg; |
||||
grpc_ares_ev_driver *ev_driver = fdn->ev_driver; |
||||
gpr_mu_lock(&fdn->mu); |
||||
fdn->writable_registered = false; |
||||
gpr_mu_unlock(&fdn->mu); |
||||
|
||||
gpr_log(GPR_DEBUG, "writable on %d", grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
if (error == GRPC_ERROR_NONE) { |
||||
ares_process_fd(ev_driver->channel, ARES_SOCKET_BAD, |
||||
grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
} else { |
||||
// If error is not GRPC_ERROR_NONE, it means the fd has been shutdown or
|
||||
// timed out. The pending lookups made on this ev_driver will be cancelled
|
||||
// by the following ares_cancel() and the on_done callbacks will be invoked
|
||||
// with a status of ARES_ECANCELLED. The remaining file descriptors in this
|
||||
// ev_driver will be cleaned up in the follwing
|
||||
// grpc_ares_notify_on_event_locked().
|
||||
ares_cancel(ev_driver->channel); |
||||
} |
||||
gpr_mu_lock(&ev_driver->mu); |
||||
grpc_ares_notify_on_event_locked(exec_ctx, ev_driver); |
||||
gpr_mu_unlock(&ev_driver->mu); |
||||
grpc_ares_ev_driver_unref(ev_driver); |
||||
} |
||||
|
||||
ares_channel *grpc_ares_ev_driver_get_channel(grpc_ares_ev_driver *ev_driver) { |
||||
return &ev_driver->channel; |
||||
} |
||||
|
||||
// Get the file descriptors used by the ev_driver's ares channel, register
|
||||
// driver_closure with these filedescriptors.
|
||||
static void grpc_ares_notify_on_event_locked(grpc_exec_ctx *exec_ctx, |
||||
grpc_ares_ev_driver *ev_driver) { |
||||
fd_node *new_list = NULL; |
||||
if (!ev_driver->shutting_down) { |
||||
ares_socket_t socks[ARES_GETSOCK_MAXNUM]; |
||||
int socks_bitmask = |
||||
ares_getsock(ev_driver->channel, socks, ARES_GETSOCK_MAXNUM); |
||||
for (size_t i = 0; i < ARES_GETSOCK_MAXNUM; i++) { |
||||
if (ARES_GETSOCK_READABLE(socks_bitmask, i) || |
||||
ARES_GETSOCK_WRITABLE(socks_bitmask, i)) { |
||||
fd_node *fdn = pop_fd_node(&ev_driver->fds, socks[i]); |
||||
// Create a new fd_node if sock[i] is not in the fd_node list.
|
||||
if (fdn == NULL) { |
||||
char *fd_name; |
||||
gpr_asprintf(&fd_name, "ares_ev_driver-%" PRIuPTR, i); |
||||
fdn = gpr_malloc(sizeof(fd_node)); |
||||
gpr_log(GPR_DEBUG, "new fd: %d", socks[i]); |
||||
fdn->grpc_fd = grpc_fd_create(socks[i], fd_name); |
||||
fdn->ev_driver = ev_driver; |
||||
fdn->readable_registered = false; |
||||
fdn->writable_registered = false; |
||||
gpr_mu_init(&fdn->mu); |
||||
grpc_closure_init(&fdn->read_closure, on_readable_cb, fdn, |
||||
grpc_schedule_on_exec_ctx); |
||||
grpc_closure_init(&fdn->write_closure, on_writable_cb, fdn, |
||||
grpc_schedule_on_exec_ctx); |
||||
grpc_pollset_set_add_fd(exec_ctx, ev_driver->pollset_set, |
||||
fdn->grpc_fd); |
||||
gpr_free(fd_name); |
||||
} |
||||
fdn->next = new_list; |
||||
new_list = fdn; |
||||
gpr_mu_lock(&fdn->mu); |
||||
// Register read_closure if the socket is readable and read_closure has
|
||||
// not been registered with this socket.
|
||||
if (ARES_GETSOCK_READABLE(socks_bitmask, i) && |
||||
!fdn->readable_registered) { |
||||
grpc_ares_ev_driver_ref(ev_driver); |
||||
gpr_log(GPR_DEBUG, "notify read on: %d", |
||||
grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
grpc_fd_notify_on_read(exec_ctx, fdn->grpc_fd, &fdn->read_closure); |
||||
fdn->readable_registered = true; |
||||
} |
||||
// Register write_closure if the socket is writable and write_closure
|
||||
// has not been registered with this socket.
|
||||
if (ARES_GETSOCK_WRITABLE(socks_bitmask, i) && |
||||
!fdn->writable_registered) { |
||||
gpr_log(GPR_DEBUG, "notify write on: %d", |
||||
grpc_fd_wrapped_fd(fdn->grpc_fd)); |
||||
grpc_ares_ev_driver_ref(ev_driver); |
||||
grpc_fd_notify_on_write(exec_ctx, fdn->grpc_fd, &fdn->write_closure); |
||||
fdn->writable_registered = true; |
||||
} |
||||
gpr_mu_unlock(&fdn->mu); |
||||
} |
||||
} |
||||
} |
||||
// Any remaining fds in ev_driver->fds were not returned by ares_getsock() and
|
||||
// are therefore no longer in use, so they can be shut down and removed from
|
||||
// the list.
|
||||
while (ev_driver->fds != NULL) { |
||||
fd_node *cur = ev_driver->fds; |
||||
ev_driver->fds = ev_driver->fds->next; |
||||
fd_node_destroy(exec_ctx, cur); |
||||
} |
||||
ev_driver->fds = new_list; |
||||
// If the ev driver has no working fd, all the tasks are done.
|
||||
if (new_list == NULL) { |
||||
ev_driver->working = false; |
||||
gpr_log(GPR_DEBUG, "ev driver stop working"); |
||||
} |
||||
} |
||||
|
||||
void grpc_ares_ev_driver_start(grpc_exec_ctx *exec_ctx, |
||||
grpc_ares_ev_driver *ev_driver) { |
||||
gpr_mu_lock(&ev_driver->mu); |
||||
if (!ev_driver->working) { |
||||
ev_driver->working = true; |
||||
grpc_ares_notify_on_event_locked(exec_ctx, ev_driver); |
||||
} |
||||
gpr_mu_unlock(&ev_driver->mu); |
||||
} |
||||
|
||||
#endif /* GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET) */ |
@ -0,0 +1,289 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
#if GRPC_ARES == 1 && !defined(GRPC_UV) |
||||
|
||||
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_wrapper.h" |
||||
#include "src/core/lib/iomgr/sockaddr.h" |
||||
#include "src/core/lib/iomgr/socket_utils_posix.h" |
||||
|
||||
#include <string.h> |
||||
#include <sys/types.h> |
||||
|
||||
#include <ares.h> |
||||
#include <grpc/support/alloc.h> |
||||
#include <grpc/support/host_port.h> |
||||
#include <grpc/support/log.h> |
||||
#include <grpc/support/string_util.h> |
||||
#include <grpc/support/time.h> |
||||
#include <grpc/support/useful.h> |
||||
#include "src/core/ext/resolver/dns/c_ares/grpc_ares_ev_driver.h" |
||||
#include "src/core/lib/iomgr/executor.h" |
||||
#include "src/core/lib/iomgr/iomgr_internal.h" |
||||
#include "src/core/lib/iomgr/sockaddr_utils.h" |
||||
#include "src/core/lib/support/string.h" |
||||
|
||||
static gpr_once g_basic_init = GPR_ONCE_INIT; |
||||
static gpr_mu g_init_mu; |
||||
|
||||
typedef struct grpc_ares_request { |
||||
/** following members are set in grpc_resolve_address_ares_impl */ |
||||
/** host to resolve, parsed from the name to resolve */ |
||||
char *host; |
||||
/** port to fill in sockaddr_in, parsed from the name to resolve */ |
||||
char *port; |
||||
/** default port to use */ |
||||
char *default_port; |
||||
/** closure to call when the request completes */ |
||||
grpc_closure *on_done; |
||||
/** the pointer to receive the resolved addresses */ |
||||
grpc_resolved_addresses **addrs_out; |
||||
/** the evernt driver used by this request */ |
||||
grpc_ares_ev_driver *ev_driver; |
||||
/** number of ongoing queries */ |
||||
gpr_refcount pending_queries; |
||||
|
||||
/** mutex guarding the rest of the state */ |
||||
gpr_mu mu; |
||||
/** is there at least one successful query, set in on_done_cb */ |
||||
bool success; |
||||
/** the errors explaining the request failure, set in on_done_cb */ |
||||
grpc_error *error; |
||||
} grpc_ares_request; |
||||
|
||||
static void do_basic_init(void) { gpr_mu_init(&g_init_mu); } |
||||
|
||||
static uint16_t strhtons(const char *port) { |
||||
if (strcmp(port, "http") == 0) { |
||||
return htons(80); |
||||
} else if (strcmp(port, "https") == 0) { |
||||
return htons(443); |
||||
} |
||||
return htons((unsigned short)atoi(port)); |
||||
} |
||||
|
||||
static void grpc_ares_request_unref(grpc_exec_ctx *exec_ctx, |
||||
grpc_ares_request *r) { |
||||
/* If there are no pending queries, invoke on_done callback and destroy the
|
||||
request */ |
||||
if (gpr_unref(&r->pending_queries)) { |
||||
/* TODO(zyc): Sort results with RFC6724 before invoking on_done. */ |
||||
if (exec_ctx == NULL) { |
||||
/* A new exec_ctx is created here, as the c-ares interface does not
|
||||
provide one in ares_host_callback. It's safe to schedule on_done with |
||||
the newly created exec_ctx, since the caller has been warned not to |
||||
acquire locks in on_done. ares_dns_resolver is using combiner to |
||||
protect resources needed by on_done. */ |
||||
grpc_exec_ctx new_exec_ctx = GRPC_EXEC_CTX_INIT; |
||||
grpc_closure_sched(&new_exec_ctx, r->on_done, r->error); |
||||
grpc_exec_ctx_finish(&new_exec_ctx); |
||||
} else { |
||||
grpc_closure_sched(exec_ctx, r->on_done, r->error); |
||||
} |
||||
gpr_mu_destroy(&r->mu); |
||||
grpc_ares_ev_driver_destroy(r->ev_driver); |
||||
gpr_free(r->host); |
||||
gpr_free(r->port); |
||||
gpr_free(r->default_port); |
||||
gpr_free(r); |
||||
} |
||||
} |
||||
|
||||
static void on_done_cb(void *arg, int status, int timeouts, |
||||
struct hostent *hostent) { |
||||
grpc_ares_request *r = (grpc_ares_request *)arg; |
||||
gpr_mu_lock(&r->mu); |
||||
if (status == ARES_SUCCESS) { |
||||
GRPC_ERROR_UNREF(r->error); |
||||
r->error = GRPC_ERROR_NONE; |
||||
r->success = true; |
||||
grpc_resolved_addresses **addresses = r->addrs_out; |
||||
if (*addresses == NULL) { |
||||
*addresses = gpr_malloc(sizeof(grpc_resolved_addresses)); |
||||
(*addresses)->naddrs = 0; |
||||
(*addresses)->addrs = NULL; |
||||
} |
||||
size_t prev_naddr = (*addresses)->naddrs; |
||||
size_t i; |
||||
for (i = 0; hostent->h_addr_list[i] != NULL; i++) { |
||||
} |
||||
(*addresses)->naddrs += i; |
||||
(*addresses)->addrs = |
||||
gpr_realloc((*addresses)->addrs, |
||||
sizeof(grpc_resolved_address) * (*addresses)->naddrs); |
||||
for (i = prev_naddr; i < (*addresses)->naddrs; i++) { |
||||
memset(&(*addresses)->addrs[i], 0, sizeof(grpc_resolved_address)); |
||||
if (hostent->h_addrtype == AF_INET6) { |
||||
(*addresses)->addrs[i].len = sizeof(struct sockaddr_in6); |
||||
struct sockaddr_in6 *addr = |
||||
(struct sockaddr_in6 *)&(*addresses)->addrs[i].addr; |
||||
addr->sin6_family = (sa_family_t)hostent->h_addrtype; |
||||
addr->sin6_port = strhtons(r->port); |
||||
|
||||
char output[INET6_ADDRSTRLEN]; |
||||
memcpy(&addr->sin6_addr, hostent->h_addr_list[i - prev_naddr], |
||||
sizeof(struct in6_addr)); |
||||
ares_inet_ntop(AF_INET6, &addr->sin6_addr, output, INET6_ADDRSTRLEN); |
||||
gpr_log(GPR_DEBUG, |
||||
"c-ares resolver gets a AF_INET6 result: \n" |
||||
" addr: %s\n port: %s\n sin6_scope_id: %d\n", |
||||
output, r->port, addr->sin6_scope_id); |
||||
} else { |
||||
(*addresses)->addrs[i].len = sizeof(struct sockaddr_in); |
||||
struct sockaddr_in *addr = |
||||
(struct sockaddr_in *)&(*addresses)->addrs[i].addr; |
||||
memcpy(&addr->sin_addr, hostent->h_addr_list[i - prev_naddr], |
||||
sizeof(struct in_addr)); |
||||
addr->sin_family = (sa_family_t)hostent->h_addrtype; |
||||
addr->sin_port = strhtons(r->port); |
||||
|
||||
char output[INET_ADDRSTRLEN]; |
||||
ares_inet_ntop(AF_INET, &addr->sin_addr, output, INET_ADDRSTRLEN); |
||||
gpr_log(GPR_DEBUG, |
||||
"c-ares resolver gets a AF_INET result: \n" |
||||
" addr: %s\n port: %s\n", |
||||
output, r->port); |
||||
} |
||||
} |
||||
} else if (!r->success) { |
||||
char *error_msg; |
||||
gpr_asprintf(&error_msg, "C-ares status is not ARES_SUCCESS: %s", |
||||
ares_strerror(status)); |
||||
grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg); |
||||
gpr_free(error_msg); |
||||
if (r->error == GRPC_ERROR_NONE) { |
||||
r->error = error; |
||||
} else { |
||||
r->error = grpc_error_add_child(error, r->error); |
||||
} |
||||
} |
||||
gpr_mu_unlock(&r->mu); |
||||
grpc_ares_request_unref(NULL, r); |
||||
} |
||||
|
||||
void grpc_resolve_address_ares_impl(grpc_exec_ctx *exec_ctx, const char *name, |
||||
const char *default_port, |
||||
grpc_pollset_set *interested_parties, |
||||
grpc_closure *on_done, |
||||
grpc_resolved_addresses **addrs) { |
||||
/* TODO(zyc): Enable tracing after #9603 is checked in */ |
||||
/* if (grpc_dns_trace) {
|
||||
gpr_log(GPR_DEBUG, "resolve_address (blocking): name=%s, default_port=%s", |
||||
name, default_port); |
||||
} */ |
||||
|
||||
/* parse name, splitting it into host and port parts */ |
||||
char *host; |
||||
char *port; |
||||
gpr_split_host_port(name, &host, &port); |
||||
if (host == NULL) { |
||||
grpc_error *err = grpc_error_set_str( |
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"), |
||||
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name)); |
||||
grpc_closure_sched(exec_ctx, on_done, err); |
||||
goto error_cleanup; |
||||
} else if (port == NULL) { |
||||
if (default_port == NULL) { |
||||
grpc_error *err = grpc_error_set_str( |
||||
GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"), |
||||
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name)); |
||||
grpc_closure_sched(exec_ctx, on_done, err); |
||||
goto error_cleanup; |
||||
} |
||||
port = gpr_strdup(default_port); |
||||
} |
||||
|
||||
grpc_ares_ev_driver *ev_driver; |
||||
grpc_error *err = grpc_ares_ev_driver_create(&ev_driver, interested_parties); |
||||
if (err != GRPC_ERROR_NONE) { |
||||
GRPC_LOG_IF_ERROR("grpc_ares_ev_driver_create() failed", err); |
||||
goto error_cleanup; |
||||
} |
||||
|
||||
grpc_ares_request *r = gpr_malloc(sizeof(grpc_ares_request)); |
||||
gpr_mu_init(&r->mu); |
||||
r->ev_driver = ev_driver; |
||||
r->on_done = on_done; |
||||
r->addrs_out = addrs; |
||||
r->default_port = gpr_strdup(default_port); |
||||
r->port = port; |
||||
r->host = host; |
||||
r->success = false; |
||||
r->error = GRPC_ERROR_NONE; |
||||
ares_channel *channel = grpc_ares_ev_driver_get_channel(r->ev_driver); |
||||
gpr_ref_init(&r->pending_queries, 2); |
||||
if (grpc_ipv6_loopback_available()) { |
||||
gpr_ref(&r->pending_queries); |
||||
ares_gethostbyname(*channel, r->host, AF_INET6, on_done_cb, r); |
||||
} |
||||
ares_gethostbyname(*channel, r->host, AF_INET, on_done_cb, r); |
||||
/* TODO(zyc): Handle CNAME records here. */ |
||||
grpc_ares_ev_driver_start(exec_ctx, r->ev_driver); |
||||
grpc_ares_request_unref(exec_ctx, r); |
||||
return; |
||||
|
||||
error_cleanup: |
||||
gpr_free(host); |
||||
gpr_free(port); |
||||
} |
||||
|
||||
void (*grpc_resolve_address_ares)( |
||||
grpc_exec_ctx *exec_ctx, const char *name, const char *default_port, |
||||
grpc_pollset_set *interested_parties, grpc_closure *on_done, |
||||
grpc_resolved_addresses **addrs) = grpc_resolve_address_ares_impl; |
||||
|
||||
grpc_error *grpc_ares_init(void) { |
||||
gpr_once_init(&g_basic_init, do_basic_init); |
||||
gpr_mu_lock(&g_init_mu); |
||||
int status = ares_library_init(ARES_LIB_INIT_ALL); |
||||
gpr_mu_unlock(&g_init_mu); |
||||
|
||||
if (status != ARES_SUCCESS) { |
||||
char *error_msg; |
||||
gpr_asprintf(&error_msg, "ares_library_init failed: %s", |
||||
ares_strerror(status)); |
||||
grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg); |
||||
gpr_free(error_msg); |
||||
return error; |
||||
} |
||||
return GRPC_ERROR_NONE; |
||||
} |
||||
|
||||
void grpc_ares_cleanup(void) { |
||||
gpr_mu_lock(&g_init_mu); |
||||
ares_library_cleanup(); |
||||
gpr_mu_unlock(&g_init_mu); |
||||
} |
||||
|
||||
#endif /* GRPC_ARES == 1 && !defined(GRPC_UV) */ |
@ -0,0 +1,63 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#ifndef GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H |
||||
#define GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H |
||||
|
||||
#include "src/core/lib/iomgr/exec_ctx.h" |
||||
#include "src/core/lib/iomgr/iomgr.h" |
||||
#include "src/core/lib/iomgr/polling_entity.h" |
||||
#include "src/core/lib/iomgr/resolve_address.h" |
||||
|
||||
/* Asynchronously resolve addr. Use \a default_port if a port isn't designated
|
||||
in addr, otherwise use the port in addr. grpc_ares_init() must be called at |
||||
least once before this function. \a on_done may be called directly in this |
||||
function without being scheduled with \a exec_ctx, it must not try to acquire |
||||
locks that are being held by the caller. */ |
||||
extern void (*grpc_resolve_address_ares)(grpc_exec_ctx *exec_ctx, |
||||
const char *addr, |
||||
const char *default_port, |
||||
grpc_pollset_set *interested_parties, |
||||
grpc_closure *on_done, |
||||
grpc_resolved_addresses **addresses); |
||||
|
||||
/* Initialize gRPC ares wrapper. Must be called at least once before
|
||||
grpc_resolve_address_ares(). */ |
||||
grpc_error *grpc_ares_init(void); |
||||
|
||||
/* Uninitialized gRPC ares wrapper. If there was more than one previous call to
|
||||
grpc_ares_init(), this function uninitializes the gRPC ares wrapper only if |
||||
it has been called the same number of times as grpc_ares_init(). */ |
||||
void grpc_ares_cleanup(void); |
||||
|
||||
#endif /* GRPC_CORE_EXT_RESOLVER_DNS_C_ARES_GRPC_ARES_WRAPPER_H */ |
@ -0,0 +1,43 @@ |
||||
/*
|
||||
* |
||||
* Copyright 2016, Google Inc. |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* * Redistributions in binary form must reproduce the above |
||||
* copyright notice, this list of conditions and the following disclaimer |
||||
* in the documentation and/or other materials provided with the |
||||
* distribution. |
||||
* * Neither the name of Google Inc. nor the names of its |
||||
* contributors may be used to endorse or promote products derived from |
||||
* this software without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
#include <ares.h> |
||||
|
||||
int main(void) { |
||||
ares_channel channelptr; |
||||
|
||||
ares_init(&channelptr); |
||||
ares_destroy(channelptr); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,254 @@ |
||||
#ifndef __CARES_BUILD_H |
||||
#define __CARES_BUILD_H |
||||
|
||||
|
||||
/* Copyright (C) 2009 - 2013 by Daniel Stenberg et al
|
||||
* |
||||
* Permission to use, copy, modify, and distribute this software and its |
||||
* documentation for any purpose and without fee is hereby granted, provided |
||||
* that the above copyright notice appear in all copies and that both that |
||||
* copyright notice and this permission notice appear in supporting |
||||
* documentation, and that the name of M.I.T. not be used in advertising or |
||||
* publicity pertaining to distribution of the software without specific, |
||||
* written prior permission. M.I.T. makes no representations about the |
||||
* suitability of this software for any purpose. It is provided "as is" |
||||
* without express or implied warranty. |
||||
*/ |
||||
|
||||
/* ================================================================ */ |
||||
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */ |
||||
/* ================================================================ */ |
||||
|
||||
/*
|
||||
* NOTE 1: |
||||
* ------- |
||||
* |
||||
* See file ares_build.h.in, run configure, and forget that this file |
||||
* exists it is only used for non-configure systems. |
||||
* But you can keep reading if you want ;-) |
||||
* |
||||
*/ |
||||
|
||||
/* ================================================================ */ |
||||
/* NOTES FOR NON-CONFIGURE SYSTEMS */ |
||||
/* ================================================================ */ |
||||
|
||||
/*
|
||||
* NOTE 1: |
||||
* ------- |
||||
* |
||||
* Nothing in this file is intended to be modified or adjusted by the |
||||
* c-ares library user nor by the c-ares library builder. |
||||
* |
||||
* If you think that something actually needs to be changed, adjusted |
||||
* or fixed in this file, then, report it on the c-ares development |
||||
* mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/
|
||||
* |
||||
* Try to keep one section per platform, compiler and architecture, |
||||
* otherwise, if an existing section is reused for a different one and |
||||
* later on the original is adjusted, probably the piggybacking one can |
||||
* be adversely changed. |
||||
* |
||||
* In order to differentiate between platforms/compilers/architectures |
||||
* use only compiler built in predefined preprocessor symbols. |
||||
* |
||||
* This header file shall only export symbols which are 'cares' or 'CARES' |
||||
* prefixed, otherwise public name space would be polluted. |
||||
* |
||||
* NOTE 2: |
||||
* ------- |
||||
* |
||||
* Right now you might be staring at file ares_build.h.dist or ares_build.h, |
||||
* this is due to the following reason: file ares_build.h.dist is renamed |
||||
* to ares_build.h when the c-ares source code distribution archive file is |
||||
* created. |
||||
* |
||||
* File ares_build.h.dist is not included in the distribution archive. |
||||
* File ares_build.h is not present in the git tree. |
||||
* |
||||
* The distributed ares_build.h file is only intended to be used on systems |
||||
* which can not run the also distributed configure script. |
||||
* |
||||
* On systems capable of running the configure script, the configure process |
||||
* will overwrite the distributed ares_build.h file with one that is suitable |
||||
* and specific to the library being configured and built, which is generated |
||||
* from the ares_build.h.in template file. |
||||
* |
||||
* If you check out from git on a non-configure platform, you must run the |
||||
* appropriate buildconf* script to set up ares_build.h and other local files. |
||||
* |
||||
*/ |
||||
|
||||
/* ================================================================ */ |
||||
/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */ |
||||
/* ================================================================ */ |
||||
|
||||
#ifdef CARES_SIZEOF_LONG |
||||
# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h" |
||||
Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined |
||||
#endif |
||||
|
||||
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T |
||||
# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" |
||||
Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined |
||||
#endif |
||||
|
||||
#ifdef CARES_SIZEOF_ARES_SOCKLEN_T |
||||
# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" |
||||
Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined |
||||
#endif |
||||
|
||||
/* ================================================================ */ |
||||
/* EXTERNAL INTERFACE SETTINGS FOR NON-CONFIGURE SYSTEMS ONLY */ |
||||
/* ================================================================ */ |
||||
|
||||
#if defined(__DJGPP__) || defined(__GO32__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__SALFORDC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__BORLANDC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__TURBOC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__WATCOMC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__POCC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__LCC__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__SYMBIAN32__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__MWERKS__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(_WIN32_WCE) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__MINGW32__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__VMS) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
#elif defined(__OS400__) |
||||
# if defined(__ILEC400__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
# define CARES_PULL_SYS_TYPES_H 1 |
||||
# define CARES_PULL_SYS_SOCKET_H 1 |
||||
# endif |
||||
|
||||
#elif defined(__MVS__) |
||||
# if defined(__IBMC__) || defined(__IBMCPP__) |
||||
# if defined(_ILP32) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# elif defined(_LP64) |
||||
# define CARES_SIZEOF_LONG 8 |
||||
# endif |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
# define CARES_PULL_SYS_TYPES_H 1 |
||||
# define CARES_PULL_SYS_SOCKET_H 1 |
||||
# endif |
||||
|
||||
#elif defined(__370__) |
||||
# if defined(__IBMC__) || defined(__IBMCPP__) |
||||
# if defined(_ILP32) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# elif defined(_LP64) |
||||
# define CARES_SIZEOF_LONG 8 |
||||
# endif |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
# define CARES_PULL_SYS_TYPES_H 1 |
||||
# define CARES_PULL_SYS_SOCKET_H 1 |
||||
# endif |
||||
|
||||
#elif defined(TPF) |
||||
# define CARES_SIZEOF_LONG 8 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
/* ===================================== */ |
||||
/* KEEP MSVC THE PENULTIMATE ENTRY */ |
||||
/* ===================================== */ |
||||
|
||||
#elif defined(_MSC_VER) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T int |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
|
||||
/* ===================================== */ |
||||
/* KEEP GENERIC GCC THE LAST ENTRY */ |
||||
/* ===================================== */ |
||||
|
||||
#elif defined(__GNUC__) |
||||
# if defined(__LP64__) || \ |
||||
defined(__x86_64__) || defined(__ppc64__) |
||||
# define CARES_SIZEOF_LONG 8 |
||||
# elif defined(__ILP32__) || \ |
||||
defined(__i386__) || defined(__ppc__) || defined(__arm__) |
||||
# define CARES_SIZEOF_LONG 4 |
||||
# endif |
||||
# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t |
||||
# define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
||||
# define CARES_PULL_SYS_TYPES_H 1 |
||||
# define CARES_PULL_SYS_SOCKET_H 1 |
||||
|
||||
#else |
||||
# error "Unknown non-configure build target!" |
||||
Error Compilation_aborted_Unknown_non_configure_build_target |
||||
#endif |
||||
|
||||
/* CARES_PULL_SYS_TYPES_H is defined above when inclusion of header file */ |
||||
/* sys/types.h is required here to properly make type definitions below. */ |
||||
#ifdef CARES_PULL_SYS_TYPES_H |
||||
# include <sys/types.h> |
||||
#endif |
||||
|
||||
/* CARES_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ |
||||
/* sys/socket.h is required here to properly make type definitions below. */ |
||||
#ifdef CARES_PULL_SYS_SOCKET_H |
||||
# include <sys/socket.h> |
||||
#endif |
||||
|
||||
/* Data type definition of ares_socklen_t. */ |
||||
|
||||
#ifdef CARES_TYPEOF_ARES_SOCKLEN_T |
||||
typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t; |
||||
#endif |
||||
|
||||
#endif /* __CARES_BUILD_H */ |
@ -0,0 +1 @@ |
||||
Subproject commit 7691f773af79bf75a62d1863fd0f13ebf9dc51b1 |
@ -0,0 +1,94 @@ |
||||
cc_library( |
||||
name = "ares", |
||||
srcs = [ |
||||
"cares/ares__close_sockets.c", |
||||
"cares/ares__get_hostent.c", |
||||
"cares/ares__read_line.c", |
||||
"cares/ares__timeval.c", |
||||
"cares/ares_cancel.c", |
||||
"cares/ares_create_query.c", |
||||
"cares/ares_data.c", |
||||
"cares/ares_destroy.c", |
||||
"cares/ares_expand_name.c", |
||||
"cares/ares_expand_string.c", |
||||
"cares/ares_fds.c", |
||||
"cares/ares_free_hostent.c", |
||||
"cares/ares_free_string.c", |
||||
"cares/ares_getenv.c", |
||||
"cares/ares_gethostbyaddr.c", |
||||
"cares/ares_gethostbyname.c", |
||||
"cares/ares_getnameinfo.c", |
||||
"cares/ares_getopt.c", |
||||
"cares/ares_getsock.c", |
||||
"cares/ares_init.c", |
||||
"cares/ares_library_init.c", |
||||
"cares/ares_llist.c", |
||||
"cares/ares_mkquery.c", |
||||
"cares/ares_nowarn.c", |
||||
"cares/ares_options.c", |
||||
"cares/ares_parse_a_reply.c", |
||||
"cares/ares_parse_aaaa_reply.c", |
||||
"cares/ares_parse_mx_reply.c", |
||||
"cares/ares_parse_naptr_reply.c", |
||||
"cares/ares_parse_ns_reply.c", |
||||
"cares/ares_parse_ptr_reply.c", |
||||
"cares/ares_parse_soa_reply.c", |
||||
"cares/ares_parse_srv_reply.c", |
||||
"cares/ares_parse_txt_reply.c", |
||||
"cares/ares_platform.c", |
||||
"cares/ares_process.c", |
||||
"cares/ares_query.c", |
||||
"cares/ares_search.c", |
||||
"cares/ares_send.c", |
||||
"cares/ares_strcasecmp.c", |
||||
"cares/ares_strdup.c", |
||||
"cares/ares_strerror.c", |
||||
"cares/ares_timeout.c", |
||||
"cares/ares_version.c", |
||||
"cares/ares_writev.c", |
||||
"cares/bitncmp.c", |
||||
"cares/inet_net_pton.c", |
||||
"cares/inet_ntop.c", |
||||
"cares/windows_port.c", |
||||
], |
||||
hdrs = [ |
||||
"ares_build.h", |
||||
"config_linux/ares_config.h", |
||||
"cares/ares.h", |
||||
"cares/ares_data.h", |
||||
"cares/ares_dns.h", |
||||
"cares/ares_getenv.h", |
||||
"cares/ares_getopt.h", |
||||
"cares/ares_inet_net_pton.h", |
||||
"cares/ares_iphlpapi.h", |
||||
"cares/ares_ipv6.h", |
||||
"cares/ares_library_init.h", |
||||
"cares/ares_llist.h", |
||||
"cares/ares_nowarn.h", |
||||
"cares/ares_platform.h", |
||||
"cares/ares_private.h", |
||||
"cares/ares_rules.h", |
||||
"cares/ares_setup.h", |
||||
"cares/ares_strcasecmp.h", |
||||
"cares/ares_strdup.h", |
||||
"cares/ares_version.h", |
||||
"cares/bitncmp.h", |
||||
"cares/config-win32.h", |
||||
"cares/setup_once.h", |
||||
], |
||||
includes = [ |
||||
".", |
||||
"config_linux", |
||||
"cares", |
||||
], |
||||
linkstatic = 1, |
||||
visibility = [ |
||||
"//visibility:public", |
||||
], |
||||
copts = [ |
||||
"-D_GNU_SOURCE", |
||||
"-D_HAS_EXCEPTIONS=0", |
||||
"-DNOMINMAX", |
||||
"-DHAVE_CONFIG_H", |
||||
], |
||||
) |
@ -0,0 +1,523 @@ |
||||
/* ares_config.h. Generated from ares_config.h.in by configure. */ |
||||
/* ares_config.h.in. Generated from configure.ac by autoheader. */ |
||||
|
||||
/* Define if building universal (internal helper macro) */ |
||||
/* #undef AC_APPLE_UNIVERSAL_BUILD */ |
||||
|
||||
/* define this if ares is built for a big endian system */ |
||||
/* #undef ARES_BIG_ENDIAN */ |
||||
|
||||
/* when building as static part of libcurl */ |
||||
/* #undef BUILDING_LIBCURL */ |
||||
|
||||
/* Defined for build that exposes internal static functions for testing. */ |
||||
/* #undef CARES_EXPOSE_STATICS */ |
||||
|
||||
/* Defined for build with symbol hiding. */ |
||||
#define CARES_SYMBOL_HIDING 1 |
||||
|
||||
/* Definition to make a library symbol externally visible. */ |
||||
#define CARES_SYMBOL_SCOPE_EXTERN __attribute__ ((__visibility__ ("default"))) |
||||
|
||||
/* Use resolver library to configure cares */ |
||||
/* #undef CARES_USE_LIBRESOLV */ |
||||
|
||||
/* if a /etc/inet dir is being used */ |
||||
/* #undef ETC_INET */ |
||||
|
||||
/* Define to the type of arg 2 for gethostname. */ |
||||
#define GETHOSTNAME_TYPE_ARG2 size_t |
||||
|
||||
/* Define to the type qualifier of arg 1 for getnameinfo. */ |
||||
#define GETNAMEINFO_QUAL_ARG1 const |
||||
|
||||
/* Define to the type of arg 1 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG1 struct sockaddr * |
||||
|
||||
/* Define to the type of arg 2 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG2 socklen_t |
||||
|
||||
/* Define to the type of args 4 and 6 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG46 socklen_t |
||||
|
||||
/* Define to the type of arg 7 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG7 int |
||||
|
||||
/* Specifies the number of arguments to getservbyport_r */ |
||||
/* #undef GETSERVBYPORT_R_ARGS */ |
||||
|
||||
/* Specifies the size of the buffer to pass to getservbyport_r */ |
||||
/* #undef GETSERVBYPORT_R_BUFSIZE */ |
||||
|
||||
/* Define to 1 if you have AF_INET6. */ |
||||
#define HAVE_AF_INET6 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */ |
||||
#define HAVE_ARPA_INET_H 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/nameser_compat.h> header file. */ |
||||
#define HAVE_ARPA_NAMESER_COMPAT_H 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/nameser.h> header file. */ |
||||
#define HAVE_ARPA_NAMESER_H 1 |
||||
|
||||
/* Define to 1 if you have the <assert.h> header file. */ |
||||
#define HAVE_ASSERT_H 1 |
||||
|
||||
/* Define to 1 if you have the `bitncmp' function. */ |
||||
/* #undef HAVE_BITNCMP */ |
||||
|
||||
/* Define to 1 if bool is an available type. */ |
||||
#define HAVE_BOOL_T 1 |
||||
|
||||
/* Define to 1 if you have the clock_gettime function and monotonic timer. */ |
||||
/* #undef HAVE_CLOCK_GETTIME_MONOTONIC */ |
||||
|
||||
/* Define to 1 if you have the closesocket function. */ |
||||
/* #undef HAVE_CLOSESOCKET */ |
||||
|
||||
/* Define to 1 if you have the CloseSocket camel case function. */ |
||||
/* #undef HAVE_CLOSESOCKET_CAMEL */ |
||||
|
||||
/* Define to 1 if you have the connect function. */ |
||||
#define HAVE_CONNECT 1 |
||||
|
||||
/* define if the compiler supports basic C++11 syntax */ |
||||
#define HAVE_CXX11 1 |
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */ |
||||
#define HAVE_DLFCN_H 1 |
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */ |
||||
#define HAVE_ERRNO_H 1 |
||||
|
||||
/* Define to 1 if you have the fcntl function. */ |
||||
#define HAVE_FCNTL 1 |
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 1 |
||||
|
||||
/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ |
||||
#define HAVE_FCNTL_O_NONBLOCK 1 |
||||
|
||||
/* Define to 1 if you have the freeaddrinfo function. */ |
||||
#define HAVE_FREEADDRINFO 1 |
||||
|
||||
/* Define to 1 if you have a working getaddrinfo function. */ |
||||
#define HAVE_GETADDRINFO 1 |
||||
|
||||
/* Define to 1 if the getaddrinfo function is threadsafe. */ |
||||
#define HAVE_GETADDRINFO_THREADSAFE 1 |
||||
|
||||
/* Define to 1 if you have the getenv function. */ |
||||
#define HAVE_GETENV 1 |
||||
|
||||
/* Define to 1 if you have the gethostbyaddr function. */ |
||||
#define HAVE_GETHOSTBYADDR 1 |
||||
|
||||
/* Define to 1 if you have the gethostbyname function. */ |
||||
#define HAVE_GETHOSTBYNAME 1 |
||||
|
||||
/* Define to 1 if you have the gethostname function. */ |
||||
#define HAVE_GETHOSTNAME 1 |
||||
|
||||
/* Define to 1 if you have the getnameinfo function. */ |
||||
#define HAVE_GETNAMEINFO 1 |
||||
|
||||
/* Define to 1 if you have the getservbyport_r function. */ |
||||
/* #undef HAVE_GETSERVBYPORT_R */ |
||||
|
||||
/* Define to 1 if you have the `gettimeofday' function. */ |
||||
#define HAVE_GETTIMEOFDAY 1 |
||||
|
||||
/* Define to 1 if you have the `if_indextoname' function. */ |
||||
#define HAVE_IF_INDEXTONAME 1 |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_net_pton function. */ |
||||
#define HAVE_INET_NET_PTON 1 |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ |
||||
#define HAVE_INET_NTOP 1 |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_pton function. */ |
||||
#define HAVE_INET_PTON 1 |
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */ |
||||
#define HAVE_INTTYPES_H 1 |
||||
|
||||
/* Define to 1 if you have the ioctl function. */ |
||||
#define HAVE_IOCTL 1 |
||||
|
||||
/* Define to 1 if you have the ioctlsocket function. */ |
||||
/* #undef HAVE_IOCTLSOCKET */ |
||||
|
||||
/* Define to 1 if you have the IoctlSocket camel case function. */ |
||||
/* #undef HAVE_IOCTLSOCKET_CAMEL */ |
||||
|
||||
/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
|
||||
*/ |
||||
/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */ |
||||
|
||||
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ |
||||
/* #undef HAVE_IOCTLSOCKET_FIONBIO */ |
||||
|
||||
/* Define to 1 if you have a working ioctl FIONBIO function. */ |
||||
#define HAVE_IOCTL_FIONBIO 1 |
||||
|
||||
/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ |
||||
#define HAVE_IOCTL_SIOCGIFADDR 1 |
||||
|
||||
/* Define to 1 if you have the `resolve' library (-lresolve). */ |
||||
/* #undef HAVE_LIBRESOLVE */ |
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */ |
||||
#define HAVE_LIMITS_H 1 |
||||
|
||||
/* if your compiler supports LL */ |
||||
#define HAVE_LL 1 |
||||
|
||||
/* Define to 1 if the compiler supports the 'long long' data type. */ |
||||
#define HAVE_LONGLONG 1 |
||||
|
||||
/* Define to 1 if you have the malloc.h header file. */ |
||||
/* #undef HAVE_MALLOC_H */ |
||||
|
||||
/* Define to 1 if you have the memory.h header file. */ |
||||
#define HAVE_MEMORY_H 1 |
||||
|
||||
/* Define to 1 if you have the MSG_NOSIGNAL flag. */ |
||||
/* #undef HAVE_MSG_NOSIGNAL */ |
||||
|
||||
/* Define to 1 if you have the <netdb.h> header file. */ |
||||
#define HAVE_NETDB_H 1 |
||||
|
||||
/* Define to 1 if you have the <netinet/in.h> header file. */ |
||||
#define HAVE_NETINET_IN_H 1 |
||||
|
||||
/* Define to 1 if you have the <netinet/tcp.h> header file. */ |
||||
#define HAVE_NETINET_TCP_H 1 |
||||
|
||||
/* Define to 1 if you have the <net/if.h> header file. */ |
||||
#define HAVE_NET_IF_H 1 |
||||
|
||||
/* Define to 1 if you have PF_INET6. */ |
||||
#define HAVE_PF_INET6 1 |
||||
|
||||
/* Define to 1 if you have the recv function. */ |
||||
#define HAVE_RECV 1 |
||||
|
||||
/* Define to 1 if you have the recvfrom function. */ |
||||
#define HAVE_RECVFROM 1 |
||||
|
||||
/* Define to 1 if you have the send function. */ |
||||
#define HAVE_SEND 1 |
||||
|
||||
/* Define to 1 if you have the setsockopt function. */ |
||||
#define HAVE_SETSOCKOPT 1 |
||||
|
||||
/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ |
||||
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */ |
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */ |
||||
#define HAVE_SIGNAL_H 1 |
||||
|
||||
/* Define to 1 if sig_atomic_t is an available typedef. */ |
||||
#define HAVE_SIG_ATOMIC_T 1 |
||||
|
||||
/* Define to 1 if sig_atomic_t is already defined as volatile. */ |
||||
/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */ |
||||
|
||||
/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */ |
||||
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 |
||||
|
||||
/* Define to 1 if you have the socket function. */ |
||||
#define HAVE_SOCKET 1 |
||||
|
||||
/* Define to 1 if you have the <socket.h> header file. */ |
||||
/* #undef HAVE_SOCKET_H */ |
||||
|
||||
/* Define to 1 if you have the <stdbool.h> header file. */ |
||||
#define HAVE_STDBOOL_H 1 |
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */ |
||||
#define HAVE_STDINT_H 1 |
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */ |
||||
#define HAVE_STDLIB_H 1 |
||||
|
||||
/* Define to 1 if you have the strcasecmp function. */ |
||||
#define HAVE_STRCASECMP 1 |
||||
|
||||
/* Define to 1 if you have the strcmpi function. */ |
||||
/* #undef HAVE_STRCMPI */ |
||||
|
||||
/* Define to 1 if you have the strdup function. */ |
||||
#define HAVE_STRDUP 1 |
||||
|
||||
/* Define to 1 if you have the stricmp function. */ |
||||
/* #undef HAVE_STRICMP */ |
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */ |
||||
#define HAVE_STRINGS_H 1 |
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */ |
||||
#define HAVE_STRING_H 1 |
||||
|
||||
/* Define to 1 if you have the strncasecmp function. */ |
||||
#define HAVE_STRNCASECMP 1 |
||||
|
||||
/* Define to 1 if you have the strncmpi function. */ |
||||
/* #undef HAVE_STRNCMPI */ |
||||
|
||||
/* Define to 1 if you have the strnicmp function. */ |
||||
/* #undef HAVE_STRNICMP */ |
||||
|
||||
/* Define to 1 if you have the <stropts.h> header file. */ |
||||
/* #undef HAVE_STROPTS_H */ |
||||
|
||||
/* Define to 1 if you have struct addrinfo. */ |
||||
#define HAVE_STRUCT_ADDRINFO 1 |
||||
|
||||
/* Define to 1 if you have struct in6_addr. */ |
||||
#define HAVE_STRUCT_IN6_ADDR 1 |
||||
|
||||
/* Define to 1 if you have struct sockaddr_in6. */ |
||||
#define HAVE_STRUCT_SOCKADDR_IN6 1 |
||||
|
||||
/* if struct sockaddr_storage is defined */ |
||||
#define HAVE_STRUCT_SOCKADDR_STORAGE 1 |
||||
|
||||
/* Define to 1 if you have the timeval struct. */ |
||||
#define HAVE_STRUCT_TIMEVAL 1 |
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */ |
||||
#define HAVE_SYS_IOCTL_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */ |
||||
#define HAVE_SYS_PARAM_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */ |
||||
#define HAVE_SYS_SELECT_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */ |
||||
#define HAVE_SYS_SOCKET_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */ |
||||
#define HAVE_SYS_STAT_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */ |
||||
#define HAVE_SYS_TIME_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */ |
||||
#define HAVE_SYS_TYPES_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/uio.h> header file. */ |
||||
#define HAVE_SYS_UIO_H 1 |
||||
|
||||
/* Define to 1 if you have the <time.h> header file. */ |
||||
#define HAVE_TIME_H 1 |
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 1 |
||||
|
||||
/* Define to 1 if you have the windows.h header file. */ |
||||
/* #undef HAVE_WINDOWS_H */ |
||||
|
||||
/* Define to 1 if you have the winsock2.h header file. */ |
||||
/* #undef HAVE_WINSOCK2_H */ |
||||
|
||||
/* Define to 1 if you have the winsock.h header file. */ |
||||
/* #undef HAVE_WINSOCK_H */ |
||||
|
||||
/* Define to 1 if you have the writev function. */ |
||||
#define HAVE_WRITEV 1 |
||||
|
||||
/* Define to 1 if you have the ws2tcpip.h header file. */ |
||||
/* #undef HAVE_WS2TCPIP_H */ |
||||
|
||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */ |
||||
#define LT_OBJDIR ".libs/" |
||||
|
||||
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ |
||||
/* #undef NEED_MALLOC_H */ |
||||
|
||||
/* Define to 1 if you need the memory.h header file even with stdlib.h */ |
||||
/* #undef NEED_MEMORY_H */ |
||||
|
||||
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ |
||||
/* #undef NEED_REENTRANT */ |
||||
|
||||
/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ |
||||
/* #undef NEED_THREAD_SAFE */ |
||||
|
||||
/* cpu-machine-OS */ |
||||
#define OS "i386-apple-darwin9.8.0" |
||||
|
||||
/* Name of package */ |
||||
#define PACKAGE "c-ares" |
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */ |
||||
#define PACKAGE_BUGREPORT "c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares"
|
||||
|
||||
/* Define to the full name of this package. */ |
||||
#define PACKAGE_NAME "c-ares" |
||||
|
||||
/* Define to the full name and version of this package. */ |
||||
#define PACKAGE_STRING "c-ares -" |
||||
|
||||
/* Define to the one symbol short name of this package. */ |
||||
#define PACKAGE_TARNAME "c-ares" |
||||
|
||||
/* Define to the home page for this package. */ |
||||
#define PACKAGE_URL "" |
||||
|
||||
/* Define to the version of this package. */ |
||||
#define PACKAGE_VERSION "-" |
||||
|
||||
/* a suitable file/device to read random data from */ |
||||
#define RANDOM_FILE "/dev/urandom" |
||||
|
||||
/* Define to the type qualifier pointed by arg 5 for recvfrom. */ |
||||
#define RECVFROM_QUAL_ARG5 |
||||
|
||||
/* Define to the type of arg 1 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG1 int |
||||
|
||||
/* Define to the type pointed by arg 2 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG2 void |
||||
|
||||
/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ |
||||
#define RECVFROM_TYPE_ARG2_IS_VOID 1 |
||||
|
||||
/* Define to the type of arg 3 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG4 int |
||||
|
||||
/* Define to the type pointed by arg 5 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG5 struct sockaddr |
||||
|
||||
/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ |
||||
/* #undef RECVFROM_TYPE_ARG5_IS_VOID */ |
||||
|
||||
/* Define to the type pointed by arg 6 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG6 socklen_t |
||||
|
||||
/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ |
||||
/* #undef RECVFROM_TYPE_ARG6_IS_VOID */ |
||||
|
||||
/* Define to the function return type for recvfrom. */ |
||||
#define RECVFROM_TYPE_RETV ssize_t |
||||
|
||||
/* Define to the type of arg 1 for recv. */ |
||||
#define RECV_TYPE_ARG1 int |
||||
|
||||
/* Define to the type of arg 2 for recv. */ |
||||
#define RECV_TYPE_ARG2 void * |
||||
|
||||
/* Define to the type of arg 3 for recv. */ |
||||
#define RECV_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for recv. */ |
||||
#define RECV_TYPE_ARG4 int |
||||
|
||||
/* Define to the function return type for recv. */ |
||||
#define RECV_TYPE_RETV ssize_t |
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */ |
||||
#define RETSIGTYPE void |
||||
|
||||
/* Define to the type qualifier of arg 2 for send. */ |
||||
#define SEND_QUAL_ARG2 const |
||||
|
||||
/* Define to the type of arg 1 for send. */ |
||||
#define SEND_TYPE_ARG1 int |
||||
|
||||
/* Define to the type of arg 2 for send. */ |
||||
#define SEND_TYPE_ARG2 void * |
||||
|
||||
/* Define to the type of arg 3 for send. */ |
||||
#define SEND_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for send. */ |
||||
#define SEND_TYPE_ARG4 int |
||||
|
||||
/* Define to the function return type for send. */ |
||||
#define SEND_TYPE_RETV ssize_t |
||||
|
||||
/* The size of `int', as computed by sizeof. */ |
||||
#define SIZEOF_INT 4 |
||||
|
||||
/* The size of `long', as computed by sizeof. */ |
||||
#define SIZEOF_LONG 4 |
||||
|
||||
/* The size of `short', as computed by sizeof. */ |
||||
#define SIZEOF_SHORT 2 |
||||
|
||||
/* The size of `size_t', as computed by sizeof. */ |
||||
#define SIZEOF_SIZE_T 4 |
||||
|
||||
/* The size of `struct in6_addr', as computed by sizeof. */ |
||||
#define SIZEOF_STRUCT_IN6_ADDR 16 |
||||
|
||||
/* The size of `struct in_addr', as computed by sizeof. */ |
||||
#define SIZEOF_STRUCT_IN_ADDR 4 |
||||
|
||||
/* The size of `time_t', as computed by sizeof. */ |
||||
#define SIZEOF_TIME_T 4 |
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ |
||||
#define TIME_WITH_SYS_TIME 1 |
||||
|
||||
/* Define to disable non-blocking sockets. */ |
||||
/* #undef USE_BLOCKING_SOCKETS */ |
||||
|
||||
/* Version number of package */ |
||||
#define VERSION "-" |
||||
|
||||
/* Define to avoid automatic inclusion of winsock.h */ |
||||
/* #undef WIN32_LEAN_AND_MEAN */ |
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */ |
||||
#if defined AC_APPLE_UNIVERSAL_BUILD |
||||
# if defined __BIG_ENDIAN__ |
||||
# define WORDS_BIGENDIAN 1 |
||||
# endif |
||||
#else |
||||
# ifndef WORDS_BIGENDIAN |
||||
/* # undef WORDS_BIGENDIAN */ |
||||
# endif |
||||
#endif |
||||
|
||||
/* Define to 1 if OS is AIX. */ |
||||
#ifndef _ALL_SOURCE |
||||
/* # undef _ALL_SOURCE */ |
||||
#endif |
||||
|
||||
/* Enable large inode numbers on Mac OS X 10.5. */ |
||||
#ifndef _DARWIN_USE_64_BIT_INODE |
||||
# define _DARWIN_USE_64_BIT_INODE 1 |
||||
#endif |
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */ |
||||
/* #undef _FILE_OFFSET_BITS */ |
||||
|
||||
/* Define for large files, on AIX-style hosts. */ |
||||
/* #undef _LARGE_FILES */ |
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */ |
||||
/* #undef const */ |
||||
|
||||
/* Type to use in place of in_addr_t when system does not provide it. */ |
||||
/* #undef in_addr_t */ |
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */ |
||||
/* #undef size_t */ |
||||
|
||||
/* the signed version of size_t */ |
||||
/* #undef ssize_t */ |
@ -0,0 +1,524 @@ |
||||
/* ares_config.h. Generated from ares_config.h.in by configure. */ |
||||
/* ares_config.h.in. Generated from configure.ac by autoheader. */ |
||||
|
||||
/* Define if building universal (internal helper macro) */ |
||||
/* #undef AC_APPLE_UNIVERSAL_BUILD */ |
||||
|
||||
/* define this if ares is built for a big endian system */ |
||||
/* #undef ARES_BIG_ENDIAN */ |
||||
|
||||
/* when building as static part of libcurl */ |
||||
/* #undef BUILDING_LIBCURL */ |
||||
|
||||
/* Defined for build that exposes internal static functions for testing. */ |
||||
/* #undef CARES_EXPOSE_STATICS */ |
||||
|
||||
/* Defined for build with symbol hiding. */ |
||||
#define CARES_SYMBOL_HIDING 1 |
||||
|
||||
/* Definition to make a library symbol externally visible. */ |
||||
#define CARES_SYMBOL_SCOPE_EXTERN __attribute__ ((__visibility__ ("default"))) |
||||
|
||||
/* Use resolver library to configure cares */ |
||||
/* #undef CARES_USE_LIBRESOLV */ |
||||
|
||||
/* if a /etc/inet dir is being used */ |
||||
/* #undef ETC_INET */ |
||||
|
||||
/* Define to the type of arg 2 for gethostname. */ |
||||
#define GETHOSTNAME_TYPE_ARG2 size_t |
||||
|
||||
/* Define to the type qualifier of arg 1 for getnameinfo. */ |
||||
#define GETNAMEINFO_QUAL_ARG1 const |
||||
|
||||
/* Define to the type of arg 1 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG1 struct sockaddr * |
||||
|
||||
/* Define to the type of arg 2 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG2 socklen_t |
||||
|
||||
/* Define to the type of args 4 and 6 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG46 socklen_t |
||||
|
||||
/* Define to the type of arg 7 for getnameinfo. */ |
||||
#define GETNAMEINFO_TYPE_ARG7 int |
||||
|
||||
/* Specifies the number of arguments to getservbyport_r */ |
||||
#define GETSERVBYPORT_R_ARGS 6 |
||||
|
||||
/* Specifies the size of the buffer to pass to getservbyport_r */ |
||||
#define GETSERVBYPORT_R_BUFSIZE 4096 |
||||
|
||||
/* Define to 1 if you have AF_INET6. */ |
||||
#define HAVE_AF_INET6 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */ |
||||
#define HAVE_ARPA_INET_H 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/nameser_compat.h> header file. */ |
||||
#define HAVE_ARPA_NAMESER_COMPAT_H 1 |
||||
|
||||
/* Define to 1 if you have the <arpa/nameser.h> header file. */ |
||||
#define HAVE_ARPA_NAMESER_H 1 |
||||
|
||||
/* Define to 1 if you have the <assert.h> header file. */ |
||||
#define HAVE_ASSERT_H 1 |
||||
|
||||
/* Define to 1 if you have the `bitncmp' function. */ |
||||
/* #undef HAVE_BITNCMP */ |
||||
|
||||
/* Define to 1 if bool is an available type. */ |
||||
#define HAVE_BOOL_T 1 |
||||
|
||||
/* Define to 1 if you have the clock_gettime function and monotonic timer. */ |
||||
#define HAVE_CLOCK_GETTIME_MONOTONIC 1 |
||||
|
||||
/* Define to 1 if you have the closesocket function. */ |
||||
/* #undef HAVE_CLOSESOCKET */ |
||||
|
||||
/* Define to 1 if you have the CloseSocket camel case function. */ |
||||
/* #undef HAVE_CLOSESOCKET_CAMEL */ |
||||
|
||||
/* Define to 1 if you have the connect function. */ |
||||
#define HAVE_CONNECT 1 |
||||
|
||||
/* define if the compiler supports basic C++11 syntax */ |
||||
#define HAVE_CXX11 1 |
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */ |
||||
#define HAVE_DLFCN_H 1 |
||||
|
||||
/* Define to 1 if you have the <errno.h> header file. */ |
||||
#define HAVE_ERRNO_H 1 |
||||
|
||||
/* Define to 1 if you have the fcntl function. */ |
||||
#define HAVE_FCNTL 1 |
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */ |
||||
#define HAVE_FCNTL_H 1 |
||||
|
||||
/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ |
||||
#define HAVE_FCNTL_O_NONBLOCK 1 |
||||
|
||||
/* Define to 1 if you have the freeaddrinfo function. */ |
||||
#define HAVE_FREEADDRINFO 1 |
||||
|
||||
/* Define to 1 if you have a working getaddrinfo function. */ |
||||
#define HAVE_GETADDRINFO 1 |
||||
|
||||
/* Define to 1 if the getaddrinfo function is threadsafe. */ |
||||
#define HAVE_GETADDRINFO_THREADSAFE 1 |
||||
|
||||
/* Define to 1 if you have the getenv function. */ |
||||
#define HAVE_GETENV 1 |
||||
|
||||
/* Define to 1 if you have the gethostbyaddr function. */ |
||||
#define HAVE_GETHOSTBYADDR 1 |
||||
|
||||
/* Define to 1 if you have the gethostbyname function. */ |
||||
#define HAVE_GETHOSTBYNAME 1 |
||||
|
||||
/* Define to 1 if you have the gethostname function. */ |
||||
#define HAVE_GETHOSTNAME 1 |
||||
|
||||
/* Define to 1 if you have the getnameinfo function. */ |
||||
#define HAVE_GETNAMEINFO 1 |
||||
|
||||
/* Define to 1 if you have the getservbyport_r function. */ |
||||
#define HAVE_GETSERVBYPORT_R 1 |
||||
|
||||
/* Define to 1 if you have the `gettimeofday' function. */ |
||||
#define HAVE_GETTIMEOFDAY 1 |
||||
|
||||
/* Define to 1 if you have the `if_indextoname' function. */ |
||||
#define HAVE_IF_INDEXTONAME 1 |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_net_pton function. */ |
||||
/* #undef HAVE_INET_NET_PTON */ |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ |
||||
#define HAVE_INET_NTOP 1 |
||||
|
||||
/* Define to 1 if you have a IPv6 capable working inet_pton function. */ |
||||
#define HAVE_INET_PTON 1 |
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */ |
||||
#define HAVE_INTTYPES_H 1 |
||||
|
||||
/* Define to 1 if you have the ioctl function. */ |
||||
#define HAVE_IOCTL 1 |
||||
|
||||
/* Define to 1 if you have the ioctlsocket function. */ |
||||
/* #undef HAVE_IOCTLSOCKET */ |
||||
|
||||
/* Define to 1 if you have the IoctlSocket camel case function. */ |
||||
/* #undef HAVE_IOCTLSOCKET_CAMEL */ |
||||
|
||||
/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
|
||||
*/ |
||||
/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */ |
||||
|
||||
/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ |
||||
/* #undef HAVE_IOCTLSOCKET_FIONBIO */ |
||||
|
||||
/* Define to 1 if you have a working ioctl FIONBIO function. */ |
||||
#define HAVE_IOCTL_FIONBIO 1 |
||||
|
||||
/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ |
||||
#define HAVE_IOCTL_SIOCGIFADDR 1 |
||||
|
||||
/* Define to 1 if you have the `resolve' library (-lresolve). */ |
||||
/* #undef HAVE_LIBRESOLVE */ |
||||
|
||||
/* Define to 1 if you have the <limits.h> header file. */ |
||||
#define HAVE_LIMITS_H 1 |
||||
|
||||
/* if your compiler supports LL */ |
||||
#define HAVE_LL 1 |
||||
|
||||
/* Define to 1 if the compiler supports the 'long long' data type. */ |
||||
#define HAVE_LONGLONG 1 |
||||
|
||||
/* Define to 1 if you have the malloc.h header file. */ |
||||
#define HAVE_MALLOC_H 1 |
||||
|
||||
/* Define to 1 if you have the memory.h header file. */ |
||||
#define HAVE_MEMORY_H 1 |
||||
|
||||
/* Define to 1 if you have the MSG_NOSIGNAL flag. */ |
||||
#define HAVE_MSG_NOSIGNAL 1 |
||||
|
||||
/* Define to 1 if you have the <netdb.h> header file. */ |
||||
#define HAVE_NETDB_H 1 |
||||
|
||||
/* Define to 1 if you have the <netinet/in.h> header file. */ |
||||
#define HAVE_NETINET_IN_H 1 |
||||
|
||||
/* Define to 1 if you have the <netinet/tcp.h> header file. */ |
||||
#define HAVE_NETINET_TCP_H 1 |
||||
|
||||
/* Define to 1 if you have the <net/if.h> header file. */ |
||||
#define HAVE_NET_IF_H 1 |
||||
|
||||
/* Define to 1 if you have PF_INET6. */ |
||||
#define HAVE_PF_INET6 1 |
||||
|
||||
/* Define to 1 if you have the recv function. */ |
||||
#define HAVE_RECV 1 |
||||
|
||||
/* Define to 1 if you have the recvfrom function. */ |
||||
#define HAVE_RECVFROM 1 |
||||
|
||||
/* Define to 1 if you have the send function. */ |
||||
#define HAVE_SEND 1 |
||||
|
||||
/* Define to 1 if you have the setsockopt function. */ |
||||
#define HAVE_SETSOCKOPT 1 |
||||
|
||||
/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ |
||||
/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */ |
||||
|
||||
/* Define to 1 if you have the <signal.h> header file. */ |
||||
#define HAVE_SIGNAL_H 1 |
||||
|
||||
/* Define to 1 if sig_atomic_t is an available typedef. */ |
||||
#define HAVE_SIG_ATOMIC_T 1 |
||||
|
||||
/* Define to 1 if sig_atomic_t is already defined as volatile. */ |
||||
/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */ |
||||
|
||||
/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */ |
||||
#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 |
||||
|
||||
/* Define to 1 if you have the socket function. */ |
||||
#define HAVE_SOCKET 1 |
||||
|
||||
/* Define to 1 if you have the <socket.h> header file. */ |
||||
/* #undef HAVE_SOCKET_H */ |
||||
|
||||
/* Define to 1 if you have the <stdbool.h> header file. */ |
||||
#define HAVE_STDBOOL_H 1 |
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */ |
||||
#define HAVE_STDINT_H 1 |
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */ |
||||
#define HAVE_STDLIB_H 1 |
||||
|
||||
/* Define to 1 if you have the strcasecmp function. */ |
||||
#define HAVE_STRCASECMP 1 |
||||
|
||||
/* Define to 1 if you have the strcmpi function. */ |
||||
/* #undef HAVE_STRCMPI */ |
||||
|
||||
/* Define to 1 if you have the strdup function. */ |
||||
#define HAVE_STRDUP 1 |
||||
|
||||
/* Define to 1 if you have the stricmp function. */ |
||||
/* #undef HAVE_STRICMP */ |
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */ |
||||
#define HAVE_STRINGS_H 1 |
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */ |
||||
#define HAVE_STRING_H 1 |
||||
|
||||
/* Define to 1 if you have the strncasecmp function. */ |
||||
#define HAVE_STRNCASECMP 1 |
||||
|
||||
/* Define to 1 if you have the strncmpi function. */ |
||||
/* #undef HAVE_STRNCMPI */ |
||||
|
||||
/* Define to 1 if you have the strnicmp function. */ |
||||
/* #undef HAVE_STRNICMP */ |
||||
|
||||
/* Define to 1 if you have the <stropts.h> header file. */ |
||||
#define HAVE_STROPTS_H 1 |
||||
|
||||
/* Define to 1 if you have struct addrinfo. */ |
||||
#define HAVE_STRUCT_ADDRINFO 1 |
||||
|
||||
/* Define to 1 if you have struct in6_addr. */ |
||||
#define HAVE_STRUCT_IN6_ADDR 1 |
||||
|
||||
/* Define to 1 if you have struct sockaddr_in6. */ |
||||
#define HAVE_STRUCT_SOCKADDR_IN6 1 |
||||
|
||||
/* if struct sockaddr_storage is defined */ |
||||
#define HAVE_STRUCT_SOCKADDR_STORAGE 1 |
||||
|
||||
/* Define to 1 if you have the timeval struct. */ |
||||
#define HAVE_STRUCT_TIMEVAL 1 |
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */ |
||||
#define HAVE_SYS_IOCTL_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/param.h> header file. */ |
||||
#define HAVE_SYS_PARAM_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */ |
||||
#define HAVE_SYS_SELECT_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/socket.h> header file. */ |
||||
#define HAVE_SYS_SOCKET_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */ |
||||
#define HAVE_SYS_STAT_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */ |
||||
#define HAVE_SYS_TIME_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */ |
||||
#define HAVE_SYS_TYPES_H 1 |
||||
|
||||
/* Define to 1 if you have the <sys/uio.h> header file. */ |
||||
#define HAVE_SYS_UIO_H 1 |
||||
|
||||
/* Define to 1 if you have the <time.h> header file. */ |
||||
#define HAVE_TIME_H 1 |
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */ |
||||
#define HAVE_UNISTD_H 1 |
||||
|
||||
/* Define to 1 if you have the windows.h header file. */ |
||||
/* #undef HAVE_WINDOWS_H */ |
||||
|
||||
/* Define to 1 if you have the winsock2.h header file. */ |
||||
/* #undef HAVE_WINSOCK2_H */ |
||||
|
||||
/* Define to 1 if you have the winsock.h header file. */ |
||||
/* #undef HAVE_WINSOCK_H */ |
||||
|
||||
/* Define to 1 if you have the writev function. */ |
||||
#define HAVE_WRITEV 1 |
||||
|
||||
/* Define to 1 if you have the ws2tcpip.h header file. */ |
||||
/* #undef HAVE_WS2TCPIP_H */ |
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/ |
||||
#define LT_OBJDIR ".libs/" |
||||
|
||||
/* Define to 1 if you need the malloc.h header file even with stdlib.h */ |
||||
/* #undef NEED_MALLOC_H */ |
||||
|
||||
/* Define to 1 if you need the memory.h header file even with stdlib.h */ |
||||
/* #undef NEED_MEMORY_H */ |
||||
|
||||
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ |
||||
/* #undef NEED_REENTRANT */ |
||||
|
||||
/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ |
||||
/* #undef NEED_THREAD_SAFE */ |
||||
|
||||
/* cpu-machine-OS */ |
||||
#define OS "i386-unknown-linux-gnu" |
||||
|
||||
/* Name of package */ |
||||
#define PACKAGE "c-ares" |
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */ |
||||
#define PACKAGE_BUGREPORT "c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares"
|
||||
|
||||
/* Define to the full name of this package. */ |
||||
#define PACKAGE_NAME "c-ares" |
||||
|
||||
/* Define to the full name and version of this package. */ |
||||
#define PACKAGE_STRING "c-ares -" |
||||
|
||||
/* Define to the one symbol short name of this package. */ |
||||
#define PACKAGE_TARNAME "c-ares" |
||||
|
||||
/* Define to the home page for this package. */ |
||||
#define PACKAGE_URL "" |
||||
|
||||
/* Define to the version of this package. */ |
||||
#define PACKAGE_VERSION "-" |
||||
|
||||
/* a suitable file/device to read random data from */ |
||||
#define RANDOM_FILE "/dev/urandom" |
||||
|
||||
/* Define to the type qualifier pointed by arg 5 for recvfrom. */ |
||||
#define RECVFROM_QUAL_ARG5 |
||||
|
||||
/* Define to the type of arg 1 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG1 int |
||||
|
||||
/* Define to the type pointed by arg 2 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG2 void |
||||
|
||||
/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ |
||||
#define RECVFROM_TYPE_ARG2_IS_VOID 1 |
||||
|
||||
/* Define to the type of arg 3 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG4 int |
||||
|
||||
/* Define to the type pointed by arg 5 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG5 struct sockaddr |
||||
|
||||
/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ |
||||
/* #undef RECVFROM_TYPE_ARG5_IS_VOID */ |
||||
|
||||
/* Define to the type pointed by arg 6 for recvfrom. */ |
||||
#define RECVFROM_TYPE_ARG6 socklen_t |
||||
|
||||
/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ |
||||
/* #undef RECVFROM_TYPE_ARG6_IS_VOID */ |
||||
|
||||
/* Define to the function return type for recvfrom. */ |
||||
#define RECVFROM_TYPE_RETV ssize_t |
||||
|
||||
/* Define to the type of arg 1 for recv. */ |
||||
#define RECV_TYPE_ARG1 int |
||||
|
||||
/* Define to the type of arg 2 for recv. */ |
||||
#define RECV_TYPE_ARG2 void * |
||||
|
||||
/* Define to the type of arg 3 for recv. */ |
||||
#define RECV_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for recv. */ |
||||
#define RECV_TYPE_ARG4 int |
||||
|
||||
/* Define to the function return type for recv. */ |
||||
#define RECV_TYPE_RETV ssize_t |
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */ |
||||
#define RETSIGTYPE void |
||||
|
||||
/* Define to the type qualifier of arg 2 for send. */ |
||||
#define SEND_QUAL_ARG2 const |
||||
|
||||
/* Define to the type of arg 1 for send. */ |
||||
#define SEND_TYPE_ARG1 int |
||||
|
||||
/* Define to the type of arg 2 for send. */ |
||||
#define SEND_TYPE_ARG2 void * |
||||
|
||||
/* Define to the type of arg 3 for send. */ |
||||
#define SEND_TYPE_ARG3 size_t |
||||
|
||||
/* Define to the type of arg 4 for send. */ |
||||
#define SEND_TYPE_ARG4 int |
||||
|
||||
/* Define to the function return type for send. */ |
||||
#define SEND_TYPE_RETV ssize_t |
||||
|
||||
/* The size of `int', as computed by sizeof. */ |
||||
#define SIZEOF_INT 4 |
||||
|
||||
/* The size of `long', as computed by sizeof. */ |
||||
#define SIZEOF_LONG 4 |
||||
|
||||
/* The size of `short', as computed by sizeof. */ |
||||
#define SIZEOF_SHORT 2 |
||||
|
||||
/* The size of `size_t', as computed by sizeof. */ |
||||
#define SIZEOF_SIZE_T 4 |
||||
|
||||
/* The size of `struct in6_addr', as computed by sizeof. */ |
||||
#define SIZEOF_STRUCT_IN6_ADDR 16 |
||||
|
||||
/* The size of `struct in_addr', as computed by sizeof. */ |
||||
#define SIZEOF_STRUCT_IN_ADDR 4 |
||||
|
||||
/* The size of `time_t', as computed by sizeof. */ |
||||
#define SIZEOF_TIME_T 4 |
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */ |
||||
#define STDC_HEADERS 1 |
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ |
||||
#define TIME_WITH_SYS_TIME 1 |
||||
|
||||
/* Define to disable non-blocking sockets. */ |
||||
/* #undef USE_BLOCKING_SOCKETS */ |
||||
|
||||
/* Version number of package */ |
||||
#define VERSION "-" |
||||
|
||||
/* Define to avoid automatic inclusion of winsock.h */ |
||||
/* #undef WIN32_LEAN_AND_MEAN */ |
||||
|
||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
||||
significant byte first (like Motorola and SPARC, unlike Intel). */ |
||||
#if defined AC_APPLE_UNIVERSAL_BUILD |
||||
# if defined __BIG_ENDIAN__ |
||||
# define WORDS_BIGENDIAN 1 |
||||
# endif |
||||
#else |
||||
# ifndef WORDS_BIGENDIAN |
||||
/* # undef WORDS_BIGENDIAN */ |
||||
# endif |
||||
#endif |
||||
|
||||
/* Define to 1 if OS is AIX. */ |
||||
#ifndef _ALL_SOURCE |
||||
/* # undef _ALL_SOURCE */ |
||||
#endif |
||||
|
||||
/* Enable large inode numbers on Mac OS X 10.5. */ |
||||
#ifndef _DARWIN_USE_64_BIT_INODE |
||||
# define _DARWIN_USE_64_BIT_INODE 1 |
||||
#endif |
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */ |
||||
/* #undef _FILE_OFFSET_BITS */ |
||||
|
||||
/* Define for large files, on AIX-style hosts. */ |
||||
/* #undef _LARGE_FILES */ |
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */ |
||||
/* #undef const */ |
||||
|
||||
/* Type to use in place of in_addr_t when system does not provide it. */ |
||||
/* #undef in_addr_t */ |
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */ |
||||
/* #undef size_t */ |
||||
|
||||
/* the signed version of size_t */ |
||||
/* #undef ssize_t */ |
@ -0,0 +1,284 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup Label="ProjectConfigurations"> |
||||
<ProjectConfiguration Include="Debug|Win32"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Debug|x64"> |
||||
<Configuration>Debug</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|Win32"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>Win32</Platform> |
||||
</ProjectConfiguration> |
||||
<ProjectConfiguration Include="Release|x64"> |
||||
<Configuration>Release</Configuration> |
||||
<Platform>x64</Platform> |
||||
</ProjectConfiguration> |
||||
</ItemGroup> |
||||
<PropertyGroup Label="Globals"> |
||||
<ProjectGuid>{1769D06D-F18C-B4C2-B019-31D7F83F3C9A}</ProjectGuid> |
||||
<IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> |
||||
<IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration"> |
||||
<PlatformToolset>v100</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration"> |
||||
<PlatformToolset>v110</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration"> |
||||
<PlatformToolset>v120</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration"> |
||||
<PlatformToolset>v140</PlatformToolset> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration"> |
||||
<ConfigurationType>StaticLibrary</ConfigurationType> |
||||
<UseDebugLibraries>true</UseDebugLibraries> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration"> |
||||
<ConfigurationType>StaticLibrary</ConfigurationType> |
||||
<UseDebugLibraries>false</UseDebugLibraries> |
||||
<WholeProgramOptimization>true</WholeProgramOptimization> |
||||
<CharacterSet>Unicode</CharacterSet> |
||||
</PropertyGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> |
||||
<ImportGroup Label="ExtensionSettings"> |
||||
</ImportGroup> |
||||
<ImportGroup Label="PropertySheets"> |
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\global.props" /> |
||||
<Import Project="$(SolutionDir)\..\vsprojects\winsock.props" /> |
||||
</ImportGroup> |
||||
<PropertyGroup Label="UserMacros" /> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Debug'"> |
||||
<TargetName>ares</TargetName> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition="'$(Configuration)'=='Release'"> |
||||
<TargetName>ares</TargetName> |
||||
</PropertyGroup> |
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>Disabled</Optimization> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Windows</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>Disabled</Optimization> |
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Windows</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>MaxSpeed</Optimization> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Windows</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> |
||||
<ClCompile> |
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader> |
||||
<WarningLevel>Level3</WarningLevel> |
||||
<Optimization>MaxSpeed</Optimization> |
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> |
||||
<FunctionLevelLinking>true</FunctionLevelLinking> |
||||
<IntrinsicFunctions>true</IntrinsicFunctions> |
||||
<SDLCheck>true</SDLCheck> |
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary> |
||||
<TreatWarningAsError>true</TreatWarningAsError> |
||||
<DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat> |
||||
<MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild> |
||||
</ClCompile> |
||||
<Link> |
||||
<SubSystem>Windows</SubSystem> |
||||
<GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation> |
||||
<GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation> |
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding> |
||||
<OptimizeReferences>true</OptimizeReferences> |
||||
</Link> |
||||
</ItemDefinitionGroup> |
||||
|
||||
<ItemGroup> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_data.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_dns.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_getenv.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_getopt.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_inet_net_pton.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_iphlpapi.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_ipv6.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_library_init.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_llist.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_nowarn.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_platform.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_private.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_rules.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_setup.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_strcasecmp.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_strdup.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_version.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\bitncmp.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\config-win32.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\setup_once.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\ares_build.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\config_linux\ares_config.h" /> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\config_darwin\ares_config.h" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__close_sockets.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__get_hostent.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__read_line.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__timeval.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_cancel.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_create_query.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_data.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_destroy.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_expand_name.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_expand_string.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_fds.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_free_hostent.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_free_string.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getenv.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_gethostbyaddr.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_gethostbyname.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getnameinfo.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getopt.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getsock.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_init.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_library_init.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_llist.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_mkquery.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_nowarn.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_options.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_a_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_aaaa_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_mx_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_naptr_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_ns_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_ptr_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_soa_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_srv_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_txt_reply.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_platform.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_process.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_query.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_search.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_send.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strcasecmp.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strdup.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strerror.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_timeout.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_version.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_writev.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\bitncmp.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\inet_net_pton.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\inet_ntop.c"> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\windows_port.c"> |
||||
</ClCompile> |
||||
</ItemGroup> |
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> |
||||
<ImportGroup Label="ExtensionTargets"> |
||||
</ImportGroup> |
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> |
||||
<PropertyGroup> |
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> |
||||
</PropertyGroup> |
||||
</Target> |
||||
</Project> |
||||
|
@ -0,0 +1,245 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<ItemGroup> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__close_sockets.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__get_hostent.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__read_line.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares__timeval.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_cancel.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_create_query.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_data.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_destroy.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_expand_name.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_expand_string.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_fds.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_free_hostent.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_free_string.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getenv.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_gethostbyaddr.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_gethostbyname.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getnameinfo.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getopt.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_getsock.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_init.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_library_init.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_llist.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_mkquery.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_nowarn.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_options.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_a_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_aaaa_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_mx_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_naptr_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_ns_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_ptr_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_soa_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_srv_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_parse_txt_reply.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_platform.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_process.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_query.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_search.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_send.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strcasecmp.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strdup.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_strerror.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_timeout.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_version.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\ares_writev.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\bitncmp.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\inet_net_pton.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\inet_ntop.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
<ClCompile Include="$(SolutionDir)\..\third_party\cares\cares\windows_port.c"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClCompile> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_data.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_dns.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_getenv.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_getopt.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_inet_net_pton.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_iphlpapi.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_ipv6.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_library_init.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_llist.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_nowarn.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_platform.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_private.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_rules.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_setup.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_strcasecmp.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_strdup.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\ares_version.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\bitncmp.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\config-win32.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\cares\setup_once.h"> |
||||
<Filter>third_party\cares\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\ares_build.h"> |
||||
<Filter>third_party\cares</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\config_linux\ares_config.h"> |
||||
<Filter>third_party\cares\config_linux</Filter> |
||||
</ClInclude> |
||||
<ClInclude Include="$(SolutionDir)\..\third_party\cares\config_darwin\ares_config.h"> |
||||
<Filter>third_party\cares\config_darwin</Filter> |
||||
</ClInclude> |
||||
</ItemGroup> |
||||
|
||||
<ItemGroup> |
||||
<Filter Include="third_party"> |
||||
<UniqueIdentifier>{6463a17d-379b-4a21-51a9-c729ed28c9c1}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="third_party\cares"> |
||||
<UniqueIdentifier>{f5276ab6-c78a-eea3-7ce9-54d2081b3d6a}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="third_party\cares\cares"> |
||||
<UniqueIdentifier>{390f10a8-7730-6295-681d-6fbd990ad488}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="third_party\cares\config_darwin"> |
||||
<UniqueIdentifier>{02918eea-69d3-f65c-08aa-6c6c3dd50c7a}</UniqueIdentifier> |
||||
</Filter> |
||||
<Filter Include="third_party\cares\config_linux"> |
||||
<UniqueIdentifier>{8b1c2965-c2f3-d13b-2c35-9e2c298acda5}</UniqueIdentifier> |
||||
</Filter> |
||||
</ItemGroup> |
||||
</Project> |
||||
|
Loading…
Reference in new issue