deps: upgrade c-ares to 1.10.0
This commit is contained in:
parent
458c8bb9f8
commit
9498fd15c7
5
deps/cares/.gitignore
vendored
5
deps/cares/.gitignore
vendored
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
/cares.Makefile
|
/cares.Makefile
|
||||||
/cares.target.mk
|
/cares.target.mk
|
||||||
/Makefile
|
|
||||||
|
|
||||||
/*.opensdf
|
/*.opensdf
|
||||||
/*.sdf
|
/*.sdf
|
||||||
@ -13,3 +12,7 @@
|
|||||||
/*.vcxproj
|
/*.vcxproj
|
||||||
/*.vcxproj.filters
|
/*.vcxproj.filters
|
||||||
/*.vcxproj.user
|
/*.vcxproj.user
|
||||||
|
|
||||||
|
*.so
|
||||||
|
*.[oa]
|
||||||
|
.buildstamp
|
||||||
|
53
deps/cares/Makefile
vendored
Normal file
53
deps/cares/Makefile
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to
|
||||||
|
# deal in the Software without restriction, including without limitation the
|
||||||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
|
SRCDIR ?= $(CURDIR)
|
||||||
|
|
||||||
|
ifeq (,$(builddir_name))
|
||||||
|
|
||||||
|
VPATH := $(SRCDIR)
|
||||||
|
include $(SRCDIR)/build.mk
|
||||||
|
|
||||||
|
else # Out of tree build.
|
||||||
|
|
||||||
|
# Drop all built-in rules.
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
.PHONY: $(builddir_name)
|
||||||
|
$(builddir_name): $(builddir_name)/.buildstamp
|
||||||
|
$(MAKE) -C $@ -f $(CURDIR)/Makefile $(MAKECMDGOALS) \
|
||||||
|
SRCDIR=$(CURDIR) builddir_name=
|
||||||
|
|
||||||
|
$(builddir_name)/.buildstamp:
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
touch $@
|
||||||
|
|
||||||
|
# Add no-op rules for Makefiles to stop make from trying to rebuild them.
|
||||||
|
Makefile:: ;
|
||||||
|
%.mk:: ;
|
||||||
|
|
||||||
|
# Turn everything else into a no-op rule that depends on the build directory.
|
||||||
|
%:: $(builddir_name) ;
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(RM) -fr $(builddir_name)
|
||||||
|
|
||||||
|
endif
|
143
deps/cares/build.mk
vendored
Normal file
143
deps/cares/build.mk
vendored
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
# Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to
|
||||||
|
# deal in the Software without restriction, including without limitation the
|
||||||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
# IN THE SOFTWARE.
|
||||||
|
|
||||||
|
OS ?= $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"')
|
||||||
|
|
||||||
|
OBJS= \
|
||||||
|
src/ares_cancel.o \
|
||||||
|
src/ares__close_sockets.o \
|
||||||
|
src/ares_create_query.o \
|
||||||
|
src/ares_data.o \
|
||||||
|
src/ares_destroy.o \
|
||||||
|
src/ares_expand_name.o \
|
||||||
|
src/ares_expand_string.o \
|
||||||
|
src/ares_fds.o \
|
||||||
|
src/ares_free_hostent.o \
|
||||||
|
src/ares_free_string.o \
|
||||||
|
src/ares_gethostbyaddr.o \
|
||||||
|
src/ares_gethostbyname.o \
|
||||||
|
src/ares__get_hostent.o \
|
||||||
|
src/ares_getnameinfo.o \
|
||||||
|
src/ares_getopt.o \
|
||||||
|
src/ares_getsock.o \
|
||||||
|
src/ares_init.o \
|
||||||
|
src/ares_library_init.o \
|
||||||
|
src/ares_llist.o \
|
||||||
|
src/ares_mkquery.o \
|
||||||
|
src/ares_nowarn.o \
|
||||||
|
src/ares_options.o \
|
||||||
|
src/ares_parse_aaaa_reply.o \
|
||||||
|
src/ares_parse_a_reply.o \
|
||||||
|
src/ares_parse_mx_reply.o \
|
||||||
|
src/ares_parse_naptr_reply.o \
|
||||||
|
src/ares_parse_ns_reply.o \
|
||||||
|
src/ares_parse_ptr_reply.o \
|
||||||
|
src/ares_parse_soa_reply.o \
|
||||||
|
src/ares_parse_srv_reply.o \
|
||||||
|
src/ares_parse_txt_reply.o \
|
||||||
|
src/ares_process.o \
|
||||||
|
src/ares_query.o \
|
||||||
|
src/ares__read_line.o \
|
||||||
|
src/ares_search.o \
|
||||||
|
src/ares_send.o \
|
||||||
|
src/ares_strcasecmp.o \
|
||||||
|
src/ares_strdup.o \
|
||||||
|
src/ares_strerror.o \
|
||||||
|
src/ares_timeout.o \
|
||||||
|
src/ares__timeval.o \
|
||||||
|
src/ares_version.o \
|
||||||
|
src/ares_writev.o \
|
||||||
|
src/bitncmp.o \
|
||||||
|
src/inet_net_pton.o \
|
||||||
|
src/inet_ntop.o \
|
||||||
|
|
||||||
|
CFLAGS += -I. -I$(SRCDIR)/include -DHAVE_CONFIG_H
|
||||||
|
|
||||||
|
ARES_CONFIG_OS = $(OS)
|
||||||
|
SOEXT = so
|
||||||
|
|
||||||
|
# if on windows
|
||||||
|
ifneq (,$(findstring mingw,$(OS)))
|
||||||
|
ARES_CONFIG_OS = win32
|
||||||
|
OBJS += src/windows_port.o
|
||||||
|
OBJS += src/ares_getenv.o
|
||||||
|
OBJS += src/ares_platform.o
|
||||||
|
|
||||||
|
LDFLAGS += -lws2_32.lib -liphlpapi.lib
|
||||||
|
else # else a posix system
|
||||||
|
CFLAGS += -g --std=gnu89 -pedantic
|
||||||
|
CFLAGS += -Wall -Wextra -Wno-unused-parameter
|
||||||
|
CFLAGS += -D_LARGEFILE_SOURCE
|
||||||
|
CFLAGS += -D_FILE_OFFSET_BITS=64
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifneq (,$(findstring cygwin,$(OS)))
|
||||||
|
ARES_CONFIG_OS = cygwin
|
||||||
|
CFLAGS += -D_GNU_SOURCE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (dragonflybsd,$(OS))
|
||||||
|
ARES_CONFIG_OS = freebsd
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (darwin,$(OS))
|
||||||
|
CFLAGS += -D_DARWIN_USE_64_BIT_INODE=1
|
||||||
|
LDFLAGS += -dynamiclib -install_name "@rpath/libcares.dylib"
|
||||||
|
SOEXT = dylib
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (linux,$(OS))
|
||||||
|
CFLAGS += -D_GNU_SOURCE
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (sunos,$(OS))
|
||||||
|
LDFLAGS += -lsocket -lnsl
|
||||||
|
CFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=500
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -I$(SRCDIR)/config/$(ARES_CONFIG_OS)
|
||||||
|
|
||||||
|
ifneq (,$(findstring libcares.$(SOEXT),$(MAKECMDGOALS)))
|
||||||
|
CFLAGS += -DCARES_BUILDING_LIBRARY
|
||||||
|
else
|
||||||
|
CFLAGS += -DCARES_STATICLIB
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: libcares.a
|
||||||
|
|
||||||
|
src/.buildstamp:
|
||||||
|
mkdir -p $(dir $@)
|
||||||
|
touch $@
|
||||||
|
|
||||||
|
libcares.a: $(OBJS)
|
||||||
|
$(AR) rcs $@ $^
|
||||||
|
|
||||||
|
libcares.$(SOEXT): override CFLAGS += -fPIC
|
||||||
|
libcares.$(SOEXT): $(OBJS:%.o=%.pic.o)
|
||||||
|
$(CC) -shared -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
src/%.o src/%.pic.o: src/%.c include/ares.h include/ares_version.h \
|
||||||
|
include/nameser.h src/.buildstamp \
|
||||||
|
$(SRCDIR)/config/$(ARES_CONFIG_OS)/ares_config.h
|
||||||
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
$(RM) -f libcares.a libcares.$(SOEXT) src/*.o src/.buildstamp
|
1
deps/cares/cares.gyp
vendored
1
deps/cares/cares.gyp
vendored
@ -34,6 +34,7 @@
|
|||||||
'include/nameser.h',
|
'include/nameser.h',
|
||||||
'src/ares_cancel.c',
|
'src/ares_cancel.c',
|
||||||
'src/ares__close_sockets.c',
|
'src/ares__close_sockets.c',
|
||||||
|
'src/ares_create_query.c',
|
||||||
'src/ares_data.c',
|
'src/ares_data.c',
|
||||||
'src/ares_data.h',
|
'src/ares_data.h',
|
||||||
'src/ares_destroy.c',
|
'src/ares_destroy.c',
|
||||||
|
40
deps/cares/include/ares.h
vendored
40
deps/cares/include/ares.h
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright 1998, 2009 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
* Copyright (C) 2007-2011 by Daniel Stenberg
|
* Copyright (C) 2007-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -123,22 +123,18 @@ extern "C" {
|
|||||||
** c-ares external API function linkage decorations.
|
** c-ares external API function linkage decorations.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if !defined(CARES_STATICLIB) && \
|
#ifdef CARES_STATICLIB
|
||||||
(defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
|
# define CARES_EXTERN
|
||||||
/* __declspec function decoration for Win32 and Symbian DLL's */
|
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
|
||||||
# if defined(CARES_BUILDING_LIBRARY)
|
# if defined(CARES_BUILDING_LIBRARY)
|
||||||
# define CARES_EXTERN __declspec(dllexport)
|
# define CARES_EXTERN __declspec(dllexport)
|
||||||
# else
|
# else
|
||||||
# define CARES_EXTERN __declspec(dllimport)
|
# define CARES_EXTERN __declspec(dllimport)
|
||||||
# endif
|
# endif
|
||||||
#else
|
#elif defined(CARES_BUILDING_LIBRARY) && defined(CARES_SYMBOL_HIDING)
|
||||||
/* visibility function decoration for other cases */
|
|
||||||
# if !defined(CARES_SYMBOL_HIDING) || \
|
|
||||||
defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
|
|
||||||
# define CARES_EXTERN
|
|
||||||
# else
|
|
||||||
# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN
|
# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN
|
||||||
# endif
|
#else
|
||||||
|
# define CARES_EXTERN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -191,6 +187,7 @@ extern "C" {
|
|||||||
#define ARES_FLAG_NOSEARCH (1 << 5)
|
#define ARES_FLAG_NOSEARCH (1 << 5)
|
||||||
#define ARES_FLAG_NOALIASES (1 << 6)
|
#define ARES_FLAG_NOALIASES (1 << 6)
|
||||||
#define ARES_FLAG_NOCHECKRESP (1 << 7)
|
#define ARES_FLAG_NOCHECKRESP (1 << 7)
|
||||||
|
#define ARES_FLAG_EDNS (1 << 8)
|
||||||
|
|
||||||
/* Option mask values */
|
/* Option mask values */
|
||||||
#define ARES_OPT_FLAGS (1 << 0)
|
#define ARES_OPT_FLAGS (1 << 0)
|
||||||
@ -208,6 +205,7 @@ extern "C" {
|
|||||||
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
|
#define ARES_OPT_SOCK_RCVBUF (1 << 12)
|
||||||
#define ARES_OPT_TIMEOUTMS (1 << 13)
|
#define ARES_OPT_TIMEOUTMS (1 << 13)
|
||||||
#define ARES_OPT_ROTATE (1 << 14)
|
#define ARES_OPT_ROTATE (1 << 14)
|
||||||
|
#define ARES_OPT_EDNSPSZ (1 << 15)
|
||||||
|
|
||||||
/* Nameinfo flag values */
|
/* Nameinfo flag values */
|
||||||
#define ARES_NI_NOFQDN (1 << 0)
|
#define ARES_NI_NOFQDN (1 << 0)
|
||||||
@ -313,6 +311,7 @@ struct ares_options {
|
|||||||
void *sock_state_cb_data;
|
void *sock_state_cb_data;
|
||||||
struct apattern *sortlist;
|
struct apattern *sortlist;
|
||||||
int nsort;
|
int nsort;
|
||||||
|
int ednspsz;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hostent;
|
struct hostent;
|
||||||
@ -451,6 +450,15 @@ CARES_EXTERN void ares_process_fd(ares_channel channel,
|
|||||||
ares_socket_t read_fd,
|
ares_socket_t read_fd,
|
||||||
ares_socket_t write_fd);
|
ares_socket_t write_fd);
|
||||||
|
|
||||||
|
CARES_EXTERN int ares_create_query(const char *name,
|
||||||
|
int dnsclass,
|
||||||
|
int type,
|
||||||
|
unsigned short id,
|
||||||
|
int rd,
|
||||||
|
unsigned char **buf,
|
||||||
|
int *buflen,
|
||||||
|
int max_udp_size);
|
||||||
|
|
||||||
CARES_EXTERN int ares_mkquery(const char *name,
|
CARES_EXTERN int ares_mkquery(const char *name,
|
||||||
int dnsclass,
|
int dnsclass,
|
||||||
int type,
|
int type,
|
||||||
@ -589,8 +597,6 @@ CARES_EXTERN void ares_free_string(void *str);
|
|||||||
|
|
||||||
CARES_EXTERN void ares_free_hostent(struct hostent *host);
|
CARES_EXTERN void ares_free_hostent(struct hostent *host);
|
||||||
|
|
||||||
CARES_EXTERN void ares_free_soa(struct ares_soa_reply *soa);
|
|
||||||
|
|
||||||
CARES_EXTERN void ares_free_data(void *dataptr);
|
CARES_EXTERN void ares_free_data(void *dataptr);
|
||||||
|
|
||||||
CARES_EXTERN const char *ares_strerror(int code);
|
CARES_EXTERN const char *ares_strerror(int code);
|
||||||
@ -615,6 +621,12 @@ CARES_EXTERN int ares_set_servers_csv(ares_channel channel,
|
|||||||
CARES_EXTERN int ares_get_servers(ares_channel channel,
|
CARES_EXTERN int ares_get_servers(ares_channel channel,
|
||||||
struct ares_addr_node **servers);
|
struct ares_addr_node **servers);
|
||||||
|
|
||||||
|
CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
|
||||||
|
ares_socklen_t size);
|
||||||
|
|
||||||
|
CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
6
deps/cares/include/ares_version.h
vendored
6
deps/cares/include/ares_version.h
vendored
@ -3,15 +3,15 @@
|
|||||||
#define ARES__VERSION_H
|
#define ARES__VERSION_H
|
||||||
|
|
||||||
/* This is the global package copyright */
|
/* This is the global package copyright */
|
||||||
#define ARES_COPYRIGHT "2004 - 2012 Daniel Stenberg, <daniel@haxx.se>."
|
#define ARES_COPYRIGHT "2004 - 2013 Daniel Stenberg, <daniel@haxx.se>."
|
||||||
|
|
||||||
#define ARES_VERSION_MAJOR 1
|
#define ARES_VERSION_MAJOR 1
|
||||||
#define ARES_VERSION_MINOR 9
|
#define ARES_VERSION_MINOR 10
|
||||||
#define ARES_VERSION_PATCH 0
|
#define ARES_VERSION_PATCH 0
|
||||||
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
|
||||||
(ARES_VERSION_MINOR<<8)|\
|
(ARES_VERSION_MINOR<<8)|\
|
||||||
(ARES_VERSION_PATCH))
|
(ARES_VERSION_PATCH))
|
||||||
#define ARES_VERSION_STR "1.9.0-DEV"
|
#define ARES_VERSION_STR "1.10.0-DEV"
|
||||||
|
|
||||||
#if (ARES_VERSION >= 0x010700)
|
#if (ARES_VERSION >= 0x010700)
|
||||||
# define CARES_HAVE_ARES_LIBRARY_INIT 1
|
# define CARES_HAVE_ARES_LIBRARY_INIT 1
|
||||||
|
8
deps/cares/include/nameser.h
vendored
8
deps/cares/include/nameser.h
vendored
@ -186,11 +186,19 @@ typedef enum __ns_rcode {
|
|||||||
#define T_SRV ns_t_srv
|
#define T_SRV ns_t_srv
|
||||||
#define T_ATMA ns_t_atma
|
#define T_ATMA ns_t_atma
|
||||||
#define T_NAPTR ns_t_naptr
|
#define T_NAPTR ns_t_naptr
|
||||||
|
#define T_KX ns_t_kx
|
||||||
|
#define T_CERT ns_t_cert
|
||||||
|
#define T_A6 ns_t_a6
|
||||||
|
#define T_DNAME ns_t_dname
|
||||||
|
#define T_SINK ns_t_sink
|
||||||
|
#define T_OPT ns_t_opt
|
||||||
|
#define T_APL ns_t_apl
|
||||||
#define T_DS ns_t_ds
|
#define T_DS ns_t_ds
|
||||||
#define T_SSHFP ns_t_sshfp
|
#define T_SSHFP ns_t_sshfp
|
||||||
#define T_RRSIG ns_t_rrsig
|
#define T_RRSIG ns_t_rrsig
|
||||||
#define T_NSEC ns_t_nsec
|
#define T_NSEC ns_t_nsec
|
||||||
#define T_DNSKEY ns_t_dnskey
|
#define T_DNSKEY ns_t_dnskey
|
||||||
|
#define T_TKEY ns_t_tkey
|
||||||
#define T_TSIG ns_t_tsig
|
#define T_TSIG ns_t_tsig
|
||||||
#define T_IXFR ns_t_ixfr
|
#define T_IXFR ns_t_ixfr
|
||||||
#define T_AXFR ns_t_axfr
|
#define T_AXFR ns_t_axfr
|
||||||
|
21
deps/cares/src/AUTHORS
vendored
21
deps/cares/src/AUTHORS
vendored
@ -1,15 +1,24 @@
|
|||||||
c-ares is based on ares, and these are the people that have worked on it since
|
c-ares is based on ares, and these are the people that have worked on it since
|
||||||
the fork was made:
|
the fork was made:
|
||||||
|
|
||||||
|
Albert Chin
|
||||||
Alexander Lazic
|
Alexander Lazic
|
||||||
Alexey Simak
|
Alexey Simak
|
||||||
Andreas Rieke
|
Andreas Rieke
|
||||||
|
Andrew C. Morrow
|
||||||
Ashish Sharma
|
Ashish Sharma
|
||||||
|
Ben Greear
|
||||||
|
Ben Noordhuis
|
||||||
|
BogDan Vatra
|
||||||
Brad House
|
Brad House
|
||||||
Brad Spencer
|
Brad Spencer
|
||||||
Bram Matthys
|
Bram Matthys
|
||||||
Dan Fandrich
|
Dan Fandrich
|
||||||
|
Daniel Johnson
|
||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
|
David Stuart
|
||||||
|
Denis Bilenko
|
||||||
|
Dima Tisnek
|
||||||
Dirk Manske
|
Dirk Manske
|
||||||
Dominick Meglio
|
Dominick Meglio
|
||||||
Doug Goldstein
|
Doug Goldstein
|
||||||
@ -18,19 +27,31 @@ Eino Tuominen
|
|||||||
Erik Kline
|
Erik Kline
|
||||||
George Neill
|
George Neill
|
||||||
Gisle Vanem
|
Gisle Vanem
|
||||||
|
Guenter Knauf
|
||||||
Guilherme Balena Versiani
|
Guilherme Balena Versiani
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Henrik Stoerner
|
Henrik Stoerner
|
||||||
|
Jakub Hrozek
|
||||||
James Bursa
|
James Bursa
|
||||||
|
Jérémy Lal
|
||||||
|
Marko Kreen
|
||||||
Michael Wallner
|
Michael Wallner
|
||||||
|
Mike Crowe
|
||||||
|
Nick Alcock
|
||||||
Nick Mathewson
|
Nick Mathewson
|
||||||
|
Patrik Thunstrom
|
||||||
|
Peter Pentchev
|
||||||
Phil Blundell
|
Phil Blundell
|
||||||
|
Poul Thomas Lomholt
|
||||||
Ravi Pratap
|
Ravi Pratap
|
||||||
Robin Cornelius
|
Robin Cornelius
|
||||||
Sebastian at basti79.de
|
Sebastian at basti79.de
|
||||||
Shmulik Regev
|
Shmulik Regev
|
||||||
|
Stefan Bühler
|
||||||
Steinar H. Gunderson
|
Steinar H. Gunderson
|
||||||
Tofu Linden
|
Tofu Linden
|
||||||
|
Tom Hughes
|
||||||
|
Tor Arntsen
|
||||||
Vlad Dinulescu
|
Vlad Dinulescu
|
||||||
William Ahern
|
William Ahern
|
||||||
Yang Tse
|
Yang Tse
|
||||||
|
7
deps/cares/src/CHANGES
vendored
7
deps/cares/src/CHANGES
vendored
@ -1,7 +0,0 @@
|
|||||||
This file no longer holds the changelog. Now you can generate it yourself
|
|
||||||
like this:
|
|
||||||
|
|
||||||
$ git log --pretty=fuller --no-color --date=short --decorate=full -1000 |
|
|
||||||
./git2changes.pl
|
|
||||||
|
|
||||||
The older, manually edited, changelog is found in git named CHANGES.0
|
|
2
deps/cares/src/README
vendored
2
deps/cares/src/README
vendored
@ -24,8 +24,6 @@ You'll find all c-ares details and news here:
|
|||||||
|
|
||||||
NOTES FOR C-ARES HACKERS
|
NOTES FOR C-ARES HACKERS
|
||||||
|
|
||||||
The following notes apply to c-ares version 1.7.0 and later.
|
|
||||||
|
|
||||||
* The distributed ares_build.h file is only intended to be used on systems
|
* The distributed ares_build.h file is only intended to be used on systems
|
||||||
which can not run the also distributed configure script.
|
which can not run the also distributed configure script.
|
||||||
|
|
||||||
|
33
deps/cares/src/RELEASE-NOTES
vendored
33
deps/cares/src/RELEASE-NOTES
vendored
@ -1,16 +1,35 @@
|
|||||||
c-ares version 1.9.0
|
c-ares version 1.10.0
|
||||||
|
|
||||||
Changed:
|
Changes:
|
||||||
|
|
||||||
o Added ares_parse_soa_reply
|
o Added ares_create_query(), to be used instead of ares_mkquery()
|
||||||
|
o ares_inet_ntop() and ares_inet_pton() are now recognized c-ares functions
|
||||||
|
|
||||||
Fixed:
|
Bug fixes:
|
||||||
|
|
||||||
o libcares.pc generation for static MingW* cross builds
|
o include the ares_parse_soa_reply.* files in the tarball
|
||||||
o ares_dup: UDP and TCP port byte order in saved options
|
o read_udp_packets: bail out loop on bad sockets
|
||||||
|
o get_DNS_AdaptersAddresses: fix IPv6 parsing
|
||||||
|
o adig: perror() doesn't work for socket errors on windows
|
||||||
|
o ares_parse_aaaa_reply: fix memory leak
|
||||||
|
o setup_once.h: HP-UX <sys/socket.h> issue workaround
|
||||||
|
o configure: several fixes
|
||||||
|
o config-dos.h: define strerror() to strerror_s_() for High-C
|
||||||
|
o config-dos.h: define HAVE_CLOSE_S for MSDOS/Watt-32
|
||||||
|
o ares_build.h.dist: enhance non-configure GCC ABI detection logic
|
||||||
|
o ares.h: stricter CARES_EXTERN linkage decorations logic
|
||||||
|
o ares_cancel(): cancel requests safely
|
||||||
|
o protocol parsing: check input data stricter
|
||||||
|
o library init: be recursive, reference count inits/cleanups
|
||||||
|
o ares_parse_txt_reply: return a ares_txt_reply node for each sub-string
|
||||||
|
o ares_set_servers_csv: fixed IPv6 address parsing
|
||||||
|
o build: fix build on msvc11
|
||||||
|
|
||||||
Thanks go to these friendly people for their efforts and contributions:
|
Thanks go to these friendly people for their efforts and contributions:
|
||||||
|
|
||||||
Yang Tse, Nick Alcock, Marko Kreen
|
Eugeny Gladkih, Yang Tse, Gisle Vanem, Guenter Knauf, Horatiu Popescu,
|
||||||
|
Alexander Klauer, Patrick Valsecchi, Paul Saab, Keith Shaw,
|
||||||
|
Alex Loukissas
|
||||||
|
|
||||||
|
|
||||||
Have fun!
|
Have fun!
|
||||||
|
5
deps/cares/src/ares__close_sockets.c
vendored
5
deps/cares/src/ares__close_sockets.c
vendored
@ -16,11 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
5
deps/cares/src/ares__get_hostent.c
vendored
5
deps/cares/src/ares__get_hostent.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -30,7 +27,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
4
deps/cares/src/ares__read_line.c
vendored
4
deps/cares/src/ares__read_line.c
vendored
@ -15,9 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
32
deps/cares/src/ares_cancel.c
vendored
32
deps/cares/src/ares_cancel.c
vendored
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
@ -26,33 +26,33 @@
|
|||||||
void ares_cancel(ares_channel channel)
|
void ares_cancel(ares_channel channel)
|
||||||
{
|
{
|
||||||
struct query *query;
|
struct query *query;
|
||||||
|
struct list_node list_head_copy;
|
||||||
struct list_node* list_head;
|
struct list_node* list_head;
|
||||||
struct list_node* list_node;
|
struct list_node* list_node;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!ares__is_list_empty(&(channel->all_queries)))
|
||||||
|
{
|
||||||
|
/* Swap list heads, so that only those queries which were present on entry
|
||||||
|
* into this function are cancelled. New queries added by callbacks of
|
||||||
|
* queries being cancelled will not be cancelled themselves.
|
||||||
|
*/
|
||||||
list_head = &(channel->all_queries);
|
list_head = &(channel->all_queries);
|
||||||
for (list_node = list_head->next; list_node != list_head; )
|
list_head_copy.prev = list_head->prev;
|
||||||
|
list_head_copy.next = list_head->next;
|
||||||
|
list_head_copy.prev->next = &list_head_copy;
|
||||||
|
list_head_copy.next->prev = &list_head_copy;
|
||||||
|
list_head->prev = list_head;
|
||||||
|
list_head->next = list_head;
|
||||||
|
for (list_node = list_head_copy.next; list_node != &list_head_copy; )
|
||||||
{
|
{
|
||||||
query = list_node->data;
|
query = list_node->data;
|
||||||
list_node = list_node->next; /* since we're deleting the query */
|
list_node = list_node->next; /* since we're deleting the query */
|
||||||
query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
|
query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
|
||||||
ares__free_query(query);
|
ares__free_query(query);
|
||||||
}
|
}
|
||||||
#ifndef NDEBUG
|
|
||||||
/* Freeing the query should remove it from all the lists in which it sits,
|
|
||||||
* so all query lists should be empty now.
|
|
||||||
*/
|
|
||||||
assert(ares__is_list_empty(&(channel->all_queries)));
|
|
||||||
for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
|
|
||||||
{
|
|
||||||
assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
|
|
||||||
}
|
}
|
||||||
for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
|
if (!(channel->flags & ARES_FLAG_STAYOPEN) && ares__is_list_empty(&(channel->all_queries)))
|
||||||
{
|
|
||||||
assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
|
||||||
{
|
{
|
||||||
if (channel->servers)
|
if (channel->servers)
|
||||||
{
|
{
|
||||||
|
208
deps/cares/src/ares_create_query.c
vendored
Normal file
208
deps/cares/src/ares_create_query.c
vendored
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
|
||||||
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ares_setup.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_NETINET_IN_H
|
||||||
|
# include <netinet/in.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_H
|
||||||
|
# include <arpa/nameser.h>
|
||||||
|
#else
|
||||||
|
# include "nameser.h"
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
||||||
|
# include <arpa/nameser_compat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_dns.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
#ifndef T_OPT
|
||||||
|
# define T_OPT 41 /* EDNS0 option (meta-RR) */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Header format, from RFC 1035:
|
||||||
|
* 1 1 1 1 1 1
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ID |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QDCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ANCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | NSCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | ARCOUNT |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* AA, TC, RA, and RCODE are only set in responses. Brief description
|
||||||
|
* of the remaining fields:
|
||||||
|
* ID Identifier to match responses with queries
|
||||||
|
* QR Query (0) or response (1)
|
||||||
|
* Opcode For our purposes, always QUERY
|
||||||
|
* RD Recursion desired
|
||||||
|
* Z Reserved (zero)
|
||||||
|
* QDCOUNT Number of queries
|
||||||
|
* ANCOUNT Number of answers
|
||||||
|
* NSCOUNT Number of name server records
|
||||||
|
* ARCOUNT Number of additional records
|
||||||
|
*
|
||||||
|
* Question format, from RFC 1035:
|
||||||
|
* 1 1 1 1 1 1
|
||||||
|
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | |
|
||||||
|
* / QNAME /
|
||||||
|
* / /
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QTYPE |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
* | QCLASS |
|
||||||
|
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
||||||
|
*
|
||||||
|
* The query name is encoded as a series of labels, each represented
|
||||||
|
* as a one-byte length (maximum 63) followed by the text of the
|
||||||
|
* label. The list is terminated by a label of length zero (which can
|
||||||
|
* be thought of as the root domain).
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ares_create_query(const char *name, int dnsclass, int type,
|
||||||
|
unsigned short id, int rd, unsigned char **buf,
|
||||||
|
int *buflen, int max_udp_size)
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
unsigned char *q;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
/* Set our results early, in case we bail out early with an error. */
|
||||||
|
*buflen = 0;
|
||||||
|
*buf = NULL;
|
||||||
|
|
||||||
|
/* Compute the length of the encoded name so we can check buflen.
|
||||||
|
* Start counting at 1 for the zero-length label at the end. */
|
||||||
|
len = 1;
|
||||||
|
for (p = name; *p; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
/* If there are n periods in the name, there are n + 1 labels, and
|
||||||
|
* thus n + 1 length fields, unless the name is empty or ends with a
|
||||||
|
* period. So add 1 unless name is empty or ends with a period.
|
||||||
|
*/
|
||||||
|
if (*name && *(p - 1) != '.')
|
||||||
|
len++;
|
||||||
|
|
||||||
|
/* Immediately reject names that are longer than the maximum of 255
|
||||||
|
* bytes that's specified in RFC 1035 ("To simplify implementations,
|
||||||
|
* the total length of a domain name (i.e., label octets and label
|
||||||
|
* length octets) is restricted to 255 octets or less."). We aren't
|
||||||
|
* doing this just to be a stickler about RFCs. For names that are
|
||||||
|
* too long, 'dnscache' closes its TCP connection to us immediately
|
||||||
|
* (when using TCP) and ignores the request when using UDP, and
|
||||||
|
* BIND's named returns ServFail (TCP or UDP). Sending a request
|
||||||
|
* that we know will cause 'dnscache' to close the TCP connection is
|
||||||
|
* painful, since that makes any other outstanding requests on that
|
||||||
|
* connection fail. And sending a UDP request that we know
|
||||||
|
* 'dnscache' will ignore is bad because resources will be tied up
|
||||||
|
* until we time-out the request.
|
||||||
|
*/
|
||||||
|
if (len > MAXCDNAME)
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
*buflen = len + HFIXEDSZ + QFIXEDSZ + (max_udp_size ? EDNSFIXEDSZ : 0);
|
||||||
|
*buf = malloc(*buflen);
|
||||||
|
if (!*buf)
|
||||||
|
return ARES_ENOMEM;
|
||||||
|
|
||||||
|
/* Set up the header. */
|
||||||
|
q = *buf;
|
||||||
|
memset(q, 0, HFIXEDSZ);
|
||||||
|
DNS_HEADER_SET_QID(q, id);
|
||||||
|
DNS_HEADER_SET_OPCODE(q, QUERY);
|
||||||
|
if (rd) {
|
||||||
|
DNS_HEADER_SET_RD(q, 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DNS_HEADER_SET_RD(q, 0);
|
||||||
|
}
|
||||||
|
DNS_HEADER_SET_QDCOUNT(q, 1);
|
||||||
|
|
||||||
|
if (max_udp_size) {
|
||||||
|
DNS_HEADER_SET_ARCOUNT(q, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* A name of "." is a screw case for the loop below, so adjust it. */
|
||||||
|
if (strcmp(name, ".") == 0)
|
||||||
|
name++;
|
||||||
|
|
||||||
|
/* Start writing out the name after the header. */
|
||||||
|
q += HFIXEDSZ;
|
||||||
|
while (*name)
|
||||||
|
{
|
||||||
|
if (*name == '.')
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
/* Count the number of bytes in this label. */
|
||||||
|
len = 0;
|
||||||
|
for (p = name; *p && *p != '.'; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
if (len > MAXLABEL)
|
||||||
|
return ARES_EBADNAME;
|
||||||
|
|
||||||
|
/* Encode the length and copy the data. */
|
||||||
|
*q++ = (unsigned char)len;
|
||||||
|
for (p = name; *p && *p != '.'; p++)
|
||||||
|
{
|
||||||
|
if (*p == '\\' && *(p + 1) != 0)
|
||||||
|
p++;
|
||||||
|
*q++ = *p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go to the next label and repeat, unless we hit the end. */
|
||||||
|
if (!*p)
|
||||||
|
break;
|
||||||
|
name = p + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the zero-length label at the end. */
|
||||||
|
*q++ = 0;
|
||||||
|
|
||||||
|
/* Finish off the question with the type and class. */
|
||||||
|
DNS_QUESTION_SET_TYPE(q, type);
|
||||||
|
DNS_QUESTION_SET_CLASS(q, dnsclass);
|
||||||
|
|
||||||
|
if (max_udp_size)
|
||||||
|
{
|
||||||
|
q += QFIXEDSZ;
|
||||||
|
memset(q, 0, EDNSFIXEDSZ);
|
||||||
|
q++;
|
||||||
|
DNS_RR_SET_TYPE(q, T_OPT);
|
||||||
|
DNS_RR_SET_CLASS(q, max_udp_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
32
deps/cares/src/ares_data.c
vendored
32
deps/cares/src/ares_data.c
vendored
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* Copyright (C) 2009-2012 by Daniel Stenberg
|
/* Copyright (C) 2009-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -199,33 +199,3 @@ void *ares_malloc_data(ares_datatype type)
|
|||||||
|
|
||||||
return &ptr->data;
|
return &ptr->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
** ares_get_datatype() - c-ares internal helper function.
|
|
||||||
**
|
|
||||||
** This function returns the ares_datatype of the data stored in a
|
|
||||||
** private ares_data struct when given the public API pointer.
|
|
||||||
*/
|
|
||||||
|
|
||||||
ares_datatype ares_get_datatype(void * dataptr)
|
|
||||||
{
|
|
||||||
struct ares_data *ptr;
|
|
||||||
|
|
||||||
#ifdef __INTEL_COMPILER
|
|
||||||
# pragma warning(push)
|
|
||||||
# pragma warning(disable:1684)
|
|
||||||
/* 1684: conversion from pointer to same-sized integral type */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
|
|
||||||
|
|
||||||
#ifdef __INTEL_COMPILER
|
|
||||||
# pragma warning(pop)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ptr->mark == ARES_DATATYPE_MARK)
|
|
||||||
return ptr->type;
|
|
||||||
|
|
||||||
return ARES_DATATYPE_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
3
deps/cares/src/ares_data.h
vendored
3
deps/cares/src/ares_data.h
vendored
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* Copyright (C) 2009-2012 by Daniel Stenberg
|
/* Copyright (C) 2009-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -66,4 +66,3 @@ struct ares_data {
|
|||||||
|
|
||||||
void *ares_malloc_data(ares_datatype type);
|
void *ares_malloc_data(ares_datatype type);
|
||||||
|
|
||||||
ares_datatype ares_get_datatype(void * dataptr);
|
|
||||||
|
3
deps/cares/src/ares_destroy.c
vendored
3
deps/cares/src/ares_destroy.c
vendored
@ -16,8 +16,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
8
deps/cares/src/ares_dns.h
vendored
8
deps/cares/src/ares_dns.h
vendored
@ -95,9 +95,9 @@
|
|||||||
#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
|
#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
|
||||||
|
|
||||||
/* Macros for constructing the fixed part of a DNS resource record */
|
/* Macros for constructing the fixed part of a DNS resource record */
|
||||||
#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v)
|
#define DNS_RR_SET_TYPE(r, v) DNS__SET16BIT(r, v)
|
||||||
#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v)
|
#define DNS_RR_SET_CLASS(r, v) DNS__SET16BIT((r) + 2, v)
|
||||||
#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v)
|
#define DNS_RR_SET_TTL(r, v) DNS__SET32BIT((r) + 4, v)
|
||||||
#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v)
|
#define DNS_RR_SET_LEN(r, v) DNS__SET16BIT((r) + 8, v)
|
||||||
|
|
||||||
#endif /* HEADER_CARES_DNS_H */
|
#endif /* HEADER_CARES_DNS_H */
|
||||||
|
6
deps/cares/src/ares_expand_name.c
vendored
6
deps/cares/src/ares_expand_name.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -31,7 +28,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_private.h" /* for the memdebug */
|
#include "ares_private.h" /* for the memdebug */
|
||||||
@ -147,7 +143,7 @@ static int name_length(const unsigned char *encoded, const unsigned char *abuf,
|
|||||||
int n = 0, offset, indir = 0;
|
int n = 0, offset, indir = 0;
|
||||||
|
|
||||||
/* Allow the caller to pass us abuf + alen and have us check for it. */
|
/* Allow the caller to pass us abuf + alen and have us check for it. */
|
||||||
if (encoded == abuf + alen)
|
if (encoded >= abuf + alen)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
while (*encoded)
|
while (*encoded)
|
||||||
|
5
deps/cares/src/ares_expand_string.c
vendored
5
deps/cares/src/ares_expand_string.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -28,8 +25,6 @@
|
|||||||
# include "nameser.h"
|
# include "nameser.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h" /* for the memdebug */
|
#include "ares_private.h" /* for the memdebug */
|
||||||
|
|
||||||
|
4
deps/cares/src/ares_fds.c
vendored
4
deps/cares/src/ares_fds.c
vendored
@ -16,10 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
1
deps/cares/src/ares_free_hostent.c
vendored
1
deps/cares/src/ares_free_hostent.c
vendored
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_NETDB_H
|
#ifdef HAVE_NETDB_H
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
2
deps/cares/src/ares_free_string.c
vendored
2
deps/cares/src/ares_free_string.c
vendored
@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
9
deps/cares/src/ares_gethostbyaddr.c
vendored
9
deps/cares/src/ares_gethostbyaddr.c
vendored
@ -15,9 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -36,12 +33,8 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "ares_platform.h"
|
#include "ares_platform.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
17
deps/cares/src/ares_gethostbyname.c
vendored
17
deps/cares/src/ares_gethostbyname.c
vendored
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
/* Copyright 1998, 2011 by the Massachusetts Institute of Technology.
|
/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -37,16 +34,12 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#ifdef HAVE_STRINGS_H
|
#ifdef HAVE_STRINGS_H
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "bitncmp.h"
|
#include "bitncmp.h"
|
||||||
#include "ares_platform.h"
|
#include "ares_platform.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
@ -467,7 +460,7 @@ static int get_address_index(const struct in_addr *addr,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
|
if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
|
||||||
sortlist[i].mask.bits))
|
sortlist[i].mask.bits))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -515,9 +508,7 @@ static int get6_address_index(const struct ares_in6_addr *addr,
|
|||||||
{
|
{
|
||||||
if (sortlist[i].family != AF_INET6)
|
if (sortlist[i].family != AF_INET6)
|
||||||
continue;
|
continue;
|
||||||
if (!ares_bitncmp(addr,
|
if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
|
||||||
&sortlist[i].addrV6,
|
|
||||||
sortlist[i].mask.bits))
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
|
12
deps/cares/src/ares_getnameinfo.c
vendored
12
deps/cares/src/ares_getnameinfo.c
vendored
@ -22,9 +22,6 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -47,17 +44,8 @@
|
|||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "inet_ntop.h"
|
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
4
deps/cares/src/ares_getsock.c
vendored
4
deps/cares/src/ares_getsock.c
vendored
@ -14,10 +14,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef HEADER_CARES_INET_NET_PTON_H
|
#ifndef HEADER_CARES_INET_NET_PTON_H
|
||||||
#define HEADER_CARES_INET_NET_PTON_H
|
#define HEADER_CARES_INET_NET_PTON_H
|
||||||
|
|
||||||
/* Copyright (C) 2005-2010 by Daniel Stenberg et al
|
/* Copyright (C) 2005-2013 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -16,12 +16,6 @@
|
|||||||
* without express or implied warranty.
|
* without express or implied warranty.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_INET_PTON
|
|
||||||
#define ares_inet_pton(x,y,z) inet_pton(x,y,z)
|
|
||||||
#else
|
|
||||||
int ares_inet_pton(int af, const char *src, void *dst);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_INET_NET_PTON
|
#ifdef HAVE_INET_NET_PTON
|
||||||
#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z)
|
#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z)
|
||||||
#else
|
#else
|
44
deps/cares/src/ares_init.c
vendored
44
deps/cares/src/ares_init.c
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
* Copyright (C) 2007-2012 by Daniel Stenberg
|
* Copyright (C) 2007-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -21,14 +21,6 @@
|
|||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
|
||||||
#include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -50,16 +42,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#if defined(ANDROID) || defined(__ANDROID__)
|
#if defined(ANDROID) || defined(__ANDROID__)
|
||||||
#include <sys/system_properties.h>
|
#include <sys/system_properties.h>
|
||||||
/* From the Bionic sources */
|
/* From the Bionic sources */
|
||||||
@ -68,8 +50,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "inet_ntop.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "inet_net_pton.h"
|
|
||||||
#include "ares_library_init.h"
|
#include "ares_library_init.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "ares_platform.h"
|
#include "ares_platform.h"
|
||||||
@ -163,6 +144,7 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
|
|||||||
channel->rotate = -1;
|
channel->rotate = -1;
|
||||||
channel->udp_port = -1;
|
channel->udp_port = -1;
|
||||||
channel->tcp_port = -1;
|
channel->tcp_port = -1;
|
||||||
|
channel->ednspsz = -1;
|
||||||
channel->socket_send_buffer_size = -1;
|
channel->socket_send_buffer_size = -1;
|
||||||
channel->socket_receive_buffer_size = -1;
|
channel->socket_receive_buffer_size = -1;
|
||||||
channel->nservers = -1;
|
channel->nservers = -1;
|
||||||
@ -453,6 +435,9 @@ static int init_by_options(ares_channel channel,
|
|||||||
&& channel->socket_receive_buffer_size == -1)
|
&& channel->socket_receive_buffer_size == -1)
|
||||||
channel->socket_receive_buffer_size = options->socket_receive_buffer_size;
|
channel->socket_receive_buffer_size = options->socket_receive_buffer_size;
|
||||||
|
|
||||||
|
if ((optmask & ARES_OPT_EDNSPSZ) && channel->ednspsz == -1)
|
||||||
|
channel->ednspsz = options->ednspsz;
|
||||||
|
|
||||||
/* Copy the IPv4 servers, if given. */
|
/* Copy the IPv4 servers, if given. */
|
||||||
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
|
||||||
{
|
{
|
||||||
@ -1012,15 +997,10 @@ static int get_DNS_AdaptersAddresses(char **outptr)
|
|||||||
}
|
}
|
||||||
else if (namesrvr.sa->sa_family == AF_INET6)
|
else if (namesrvr.sa->sa_family == AF_INET6)
|
||||||
{
|
{
|
||||||
/* Windows apparently always reports some IPv6 DNS servers that
|
|
||||||
* prefixed with fec0:0:0:ffff. These ususally do not point to
|
|
||||||
* working DNS servers, so we ignore them. */
|
|
||||||
if (strncmp(txtaddr, "fec0:0:0:ffff:", 14) == 0)
|
|
||||||
continue;
|
|
||||||
if (memcmp(&namesrvr.sa6->sin6_addr, &ares_in6addr_any,
|
if (memcmp(&namesrvr.sa6->sin6_addr, &ares_in6addr_any,
|
||||||
sizeof(namesrvr.sa6->sin6_addr)) == 0)
|
sizeof(namesrvr.sa6->sin6_addr)) == 0)
|
||||||
continue;
|
continue;
|
||||||
if (! ares_inet_ntop(AF_INET, &namesrvr.sa6->sin6_addr,
|
if (! ares_inet_ntop(AF_INET6, &namesrvr.sa6->sin6_addr,
|
||||||
txtaddr, sizeof(txtaddr)))
|
txtaddr, sizeof(txtaddr)))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1363,6 +1343,9 @@ static int init_by_defaults(ares_channel channel)
|
|||||||
if (channel->tcp_port == -1)
|
if (channel->tcp_port == -1)
|
||||||
channel->tcp_port = htons(NAMESERVER_PORT);
|
channel->tcp_port = htons(NAMESERVER_PORT);
|
||||||
|
|
||||||
|
if (channel->ednspsz == -1)
|
||||||
|
channel->ednspsz = EDNSPACKETSZ;
|
||||||
|
|
||||||
if (channel->nservers == -1) {
|
if (channel->nservers == -1) {
|
||||||
/* If nobody specified servers, try a local named. */
|
/* If nobody specified servers, try a local named. */
|
||||||
channel->servers = malloc(sizeof(struct server_state));
|
channel->servers = malloc(sizeof(struct server_state));
|
||||||
@ -1960,13 +1943,6 @@ static int init_id_key(rc4_key* key,int key_data_len)
|
|||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned short ares__generate_new_id(rc4_key* key)
|
|
||||||
{
|
|
||||||
unsigned short r=0;
|
|
||||||
ares__rc4(key, (unsigned char *)&r, sizeof(r));
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ares_set_local_ip4(ares_channel channel, unsigned int local_ip)
|
void ares_set_local_ip4(ares_channel channel, unsigned int local_ip)
|
||||||
{
|
{
|
||||||
channel->local_ip4 = local_ip;
|
channel->local_ip4 = local_ip;
|
||||||
|
5
deps/cares/src/ares_library_init.c
vendored
5
deps/cares/src/ares_library_init.c
vendored
@ -101,7 +101,10 @@ int ares_library_init(int flags)
|
|||||||
int res;
|
int res;
|
||||||
|
|
||||||
if (ares_initialized)
|
if (ares_initialized)
|
||||||
|
{
|
||||||
|
ares_initialized++;
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
ares_initialized++;
|
ares_initialized++;
|
||||||
|
|
||||||
if (flags & ARES_LIB_INIT_WIN32)
|
if (flags & ARES_LIB_INIT_WIN32)
|
||||||
@ -122,6 +125,8 @@ void ares_library_cleanup(void)
|
|||||||
if (!ares_initialized)
|
if (!ares_initialized)
|
||||||
return;
|
return;
|
||||||
ares_initialized--;
|
ares_initialized--;
|
||||||
|
if (ares_initialized)
|
||||||
|
return;
|
||||||
|
|
||||||
if (ares_init_flags & ARES_LIB_INIT_WIN32)
|
if (ares_init_flags & ARES_LIB_INIT_WIN32)
|
||||||
ares_win32_cleanup();
|
ares_win32_cleanup();
|
||||||
|
23
deps/cares/src/ares_llist.c
vendored
23
deps/cares/src/ares_llist.c
vendored
@ -61,26 +61,3 @@ void ares__remove_from_list(struct list_node* node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Swap the contents of two lists */
|
|
||||||
void ares__swap_lists(struct list_node* head_a,
|
|
||||||
struct list_node* head_b) {
|
|
||||||
int is_a_empty = ares__is_list_empty(head_a);
|
|
||||||
int is_b_empty = ares__is_list_empty(head_b);
|
|
||||||
struct list_node old_a = *head_a;
|
|
||||||
struct list_node old_b = *head_b;
|
|
||||||
|
|
||||||
if (is_a_empty) {
|
|
||||||
ares__init_list_head(head_b);
|
|
||||||
} else {
|
|
||||||
*head_b = old_a;
|
|
||||||
old_a.next->prev = head_b;
|
|
||||||
old_a.prev->next = head_b;
|
|
||||||
}
|
|
||||||
if (is_b_empty) {
|
|
||||||
ares__init_list_head(head_a);
|
|
||||||
} else {
|
|
||||||
*head_a = old_b;
|
|
||||||
old_b.next->prev = head_a;
|
|
||||||
old_b.prev->next = head_a;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
3
deps/cares/src/ares_llist.h
vendored
3
deps/cares/src/ares_llist.h
vendored
@ -36,7 +36,4 @@ void ares__insert_in_list(struct list_node* new_node,
|
|||||||
|
|
||||||
void ares__remove_from_list(struct list_node* node);
|
void ares__remove_from_list(struct list_node* node);
|
||||||
|
|
||||||
void ares__swap_lists(struct list_node* head_a,
|
|
||||||
struct list_node* head_b);
|
|
||||||
|
|
||||||
#endif /* __ARES_LLIST_H */
|
#endif /* __ARES_LLIST_H */
|
||||||
|
173
deps/cares/src/ares_mkquery.c
vendored
173
deps/cares/src/ares_mkquery.c
vendored
@ -15,181 +15,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
|
||||||
# include <netinet/in.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_H
|
|
||||||
# include <arpa/nameser.h>
|
|
||||||
#else
|
|
||||||
# include "nameser.h"
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ARPA_NAMESER_COMPAT_H
|
|
||||||
# include <arpa/nameser_compat.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
|
||||||
#include "ares_private.h"
|
|
||||||
|
|
||||||
/* Header format, from RFC 1035:
|
|
||||||
* 1 1 1 1 1 1
|
|
||||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | ID |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | QDCOUNT |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | ANCOUNT |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | NSCOUNT |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | ARCOUNT |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
*
|
|
||||||
* AA, TC, RA, and RCODE are only set in responses. Brief description
|
|
||||||
* of the remaining fields:
|
|
||||||
* ID Identifier to match responses with queries
|
|
||||||
* QR Query (0) or response (1)
|
|
||||||
* Opcode For our purposes, always QUERY
|
|
||||||
* RD Recursion desired
|
|
||||||
* Z Reserved (zero)
|
|
||||||
* QDCOUNT Number of queries
|
|
||||||
* ANCOUNT Number of answers
|
|
||||||
* NSCOUNT Number of name server records
|
|
||||||
* ARCOUNT Number of additional records
|
|
||||||
*
|
|
||||||
* Question format, from RFC 1035:
|
|
||||||
* 1 1 1 1 1 1
|
|
||||||
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | |
|
|
||||||
* / QNAME /
|
|
||||||
* / /
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | QTYPE |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
* | QCLASS |
|
|
||||||
* +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|
|
||||||
*
|
|
||||||
* The query name is encoded as a series of labels, each represented
|
|
||||||
* as a one-byte length (maximum 63) followed by the text of the
|
|
||||||
* label. The list is terminated by a label of length zero (which can
|
|
||||||
* be thought of as the root domain).
|
|
||||||
*/
|
|
||||||
|
|
||||||
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
||||||
int rd, unsigned char **buf, int *buflen)
|
int rd, unsigned char **buf, int *buflen)
|
||||||
{
|
{
|
||||||
int len;
|
return ares_create_query(name, dnsclass, type, id, rd, buf, buflen, 0);
|
||||||
unsigned char *q;
|
|
||||||
const char *p;
|
|
||||||
|
|
||||||
/* Set our results early, in case we bail out early with an error. */
|
|
||||||
*buflen = 0;
|
|
||||||
*buf = NULL;
|
|
||||||
|
|
||||||
/* Compute the length of the encoded name so we can check buflen.
|
|
||||||
* Start counting at 1 for the zero-length label at the end. */
|
|
||||||
len = 1;
|
|
||||||
for (p = name; *p; p++)
|
|
||||||
{
|
|
||||||
if (*p == '\\' && *(p + 1) != 0)
|
|
||||||
p++;
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
/* If there are n periods in the name, there are n + 1 labels, and
|
|
||||||
* thus n + 1 length fields, unless the name is empty or ends with a
|
|
||||||
* period. So add 1 unless name is empty or ends with a period.
|
|
||||||
*/
|
|
||||||
if (*name && *(p - 1) != '.')
|
|
||||||
len++;
|
|
||||||
|
|
||||||
/* Immediately reject names that are longer than the maximum of 255
|
|
||||||
* bytes that's specified in RFC 1035 ("To simplify implementations,
|
|
||||||
* the total length of a domain name (i.e., label octets and label
|
|
||||||
* length octets) is restricted to 255 octets or less."). We aren't
|
|
||||||
* doing this just to be a stickler about RFCs. For names that are
|
|
||||||
* too long, 'dnscache' closes its TCP connection to us immediately
|
|
||||||
* (when using TCP) and ignores the request when using UDP, and
|
|
||||||
* BIND's named returns ServFail (TCP or UDP). Sending a request
|
|
||||||
* that we know will cause 'dnscache' to close the TCP connection is
|
|
||||||
* painful, since that makes any other outstanding requests on that
|
|
||||||
* connection fail. And sending a UDP request that we know
|
|
||||||
* 'dnscache' will ignore is bad because resources will be tied up
|
|
||||||
* until we time-out the request.
|
|
||||||
*/
|
|
||||||
if (len > MAXCDNAME)
|
|
||||||
return ARES_EBADNAME;
|
|
||||||
|
|
||||||
*buflen = len + HFIXEDSZ + QFIXEDSZ;
|
|
||||||
*buf = malloc(*buflen);
|
|
||||||
if (!*buf)
|
|
||||||
return ARES_ENOMEM;
|
|
||||||
|
|
||||||
/* Set up the header. */
|
|
||||||
q = *buf;
|
|
||||||
memset(q, 0, HFIXEDSZ);
|
|
||||||
DNS_HEADER_SET_QID(q, id);
|
|
||||||
DNS_HEADER_SET_OPCODE(q, QUERY);
|
|
||||||
if (rd) {
|
|
||||||
DNS_HEADER_SET_RD(q, 1);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
DNS_HEADER_SET_RD(q, 0);
|
|
||||||
}
|
|
||||||
DNS_HEADER_SET_QDCOUNT(q, 1);
|
|
||||||
|
|
||||||
/* A name of "." is a screw case for the loop below, so adjust it. */
|
|
||||||
if (strcmp(name, ".") == 0)
|
|
||||||
name++;
|
|
||||||
|
|
||||||
/* Start writing out the name after the header. */
|
|
||||||
q += HFIXEDSZ;
|
|
||||||
while (*name)
|
|
||||||
{
|
|
||||||
if (*name == '.')
|
|
||||||
return ARES_EBADNAME;
|
|
||||||
|
|
||||||
/* Count the number of bytes in this label. */
|
|
||||||
len = 0;
|
|
||||||
for (p = name; *p && *p != '.'; p++)
|
|
||||||
{
|
|
||||||
if (*p == '\\' && *(p + 1) != 0)
|
|
||||||
p++;
|
|
||||||
len++;
|
|
||||||
}
|
|
||||||
if (len > MAXLABEL)
|
|
||||||
return ARES_EBADNAME;
|
|
||||||
|
|
||||||
/* Encode the length and copy the data. */
|
|
||||||
*q++ = (unsigned char)len;
|
|
||||||
for (p = name; *p && *p != '.'; p++)
|
|
||||||
{
|
|
||||||
if (*p == '\\' && *(p + 1) != 0)
|
|
||||||
p++;
|
|
||||||
*q++ = *p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go to the next label and repeat, unless we hit the end. */
|
|
||||||
if (!*p)
|
|
||||||
break;
|
|
||||||
name = p + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add the zero-length label at the end. */
|
|
||||||
*q++ = 0;
|
|
||||||
|
|
||||||
/* Finish off the question with the type and class. */
|
|
||||||
DNS_QUESTION_SET_TYPE(q, type);
|
|
||||||
DNS_QUESTION_SET_CLASS(q, dnsclass);
|
|
||||||
|
|
||||||
return ARES_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
3
deps/cares/src/ares_nowarn.c
vendored
3
deps/cares/src/ares_nowarn.c
vendored
@ -23,9 +23,6 @@
|
|||||||
|
|
||||||
#if defined(__INTEL_COMPILER) && defined(__unix__)
|
#if defined(__INTEL_COMPILER) && defined(__unix__)
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
|
48
deps/cares/src/ares_options.c
vendored
48
deps/cares/src/ares_options.c
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
* Copyright (C) 2008-2011 by Daniel Stenberg
|
* Copyright (C) 2008-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
|
||||||
@ -132,6 +132,7 @@ int ares_set_servers(ares_channel channel,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Incomming string format: host[:port][,host[:port]]... */
|
/* Incomming string format: host[:port][,host[:port]]... */
|
||||||
|
/* IPv6 addresses with ports require square brackets [fe80::1%lo0]:53 */
|
||||||
int ares_set_servers_csv(ares_channel channel,
|
int ares_set_servers_csv(ares_channel channel,
|
||||||
const char* _csv)
|
const char* _csv)
|
||||||
{
|
{
|
||||||
@ -139,6 +140,7 @@ int ares_set_servers_csv(ares_channel channel,
|
|||||||
char* csv = NULL;
|
char* csv = NULL;
|
||||||
char* ptr;
|
char* ptr;
|
||||||
char* start_host;
|
char* start_host;
|
||||||
|
int cc = 0;
|
||||||
int rv = ARES_SUCCESS;
|
int rv = ARES_SUCCESS;
|
||||||
struct ares_addr_node *servers = NULL;
|
struct ares_addr_node *servers = NULL;
|
||||||
struct ares_addr_node *last = NULL;
|
struct ares_addr_node *last = NULL;
|
||||||
@ -164,29 +166,54 @@ int ares_set_servers_csv(ares_channel channel,
|
|||||||
|
|
||||||
start_host = csv;
|
start_host = csv;
|
||||||
for (ptr = csv; *ptr; ptr++) {
|
for (ptr = csv; *ptr; ptr++) {
|
||||||
if (*ptr == ',') {
|
if (*ptr == ':') {
|
||||||
|
/* count colons to determine if we have an IPv6 number or IPv4 with
|
||||||
|
port */
|
||||||
|
cc++;
|
||||||
|
}
|
||||||
|
else if (*ptr == '[') {
|
||||||
|
/* move start_host if an open square bracket is found wrapping an IPv6
|
||||||
|
address */
|
||||||
|
start_host = ptr + 1;
|
||||||
|
}
|
||||||
|
else if (*ptr == ',') {
|
||||||
char* pp = ptr - 1;
|
char* pp = ptr - 1;
|
||||||
|
char* p = ptr;
|
||||||
struct in_addr in4;
|
struct in_addr in4;
|
||||||
struct ares_in6_addr in6;
|
struct ares_in6_addr in6;
|
||||||
struct ares_addr_node *s = NULL;
|
struct ares_addr_node *s = NULL;
|
||||||
|
|
||||||
*ptr = 0; /* null terminate host:port string */
|
*ptr = 0; /* null terminate host:port string */
|
||||||
/* Got an entry..see if port was specified. */
|
/* Got an entry..see if the port was specified. */
|
||||||
|
if (cc > 0) {
|
||||||
while (pp > start_host) {
|
while (pp > start_host) {
|
||||||
if (*pp == ':')
|
/* a single close square bracket followed by a colon, ']:' indicates
|
||||||
break; /* yes */
|
an IPv6 address with port */
|
||||||
if (!ISDIGIT(*pp)) {
|
if ((*pp == ']') && (*p == ':'))
|
||||||
|
break; /* found port */
|
||||||
|
/* a single colon, ':' indicates an IPv4 address with port */
|
||||||
|
if ((*pp == ':') && (cc == 1))
|
||||||
|
break; /* found port */
|
||||||
|
if (!(ISDIGIT(*pp) || (*pp == ':'))) {
|
||||||
/* Found end of digits before we found :, so wasn't a port */
|
/* Found end of digits before we found :, so wasn't a port */
|
||||||
pp = ptr;
|
/* must allow ':' for IPv6 case of ']:' indicates we found a port */
|
||||||
|
pp = p = ptr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
pp--;
|
pp--;
|
||||||
|
p--;
|
||||||
}
|
}
|
||||||
if ((pp != start_host) && ((pp + 1) < ptr)) {
|
if ((pp != start_host) && ((pp + 1) < ptr)) {
|
||||||
/* Found it. Parse over the port number */
|
/* Found it. Parse over the port number */
|
||||||
(void)strtol(pp + 1, NULL, 10);
|
/* when an IPv6 address is wrapped with square brackets the port
|
||||||
|
starts at pp + 2 */
|
||||||
|
if (*pp == ']')
|
||||||
|
p++; /* move p before ':' */
|
||||||
|
/* p will point to the start of the port */
|
||||||
|
(void)strtol(p, NULL, 10);
|
||||||
*pp = 0; /* null terminate host */
|
*pp = 0; /* null terminate host */
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* resolve host, try ipv4 first, rslt is in network byte order */
|
/* resolve host, try ipv4 first, rslt is in network byte order */
|
||||||
rv = ares_inet_pton(AF_INET, start_host, &in4);
|
rv = ares_inet_pton(AF_INET, start_host, &in4);
|
||||||
if (!rv) {
|
if (!rv) {
|
||||||
@ -221,6 +248,8 @@ int ares_set_servers_csv(ares_channel channel,
|
|||||||
s->next = NULL;
|
s->next = NULL;
|
||||||
if (last) {
|
if (last) {
|
||||||
last->next = s;
|
last->next = s;
|
||||||
|
/* need to move last to maintain the linked list */
|
||||||
|
last = last->next;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
servers = s;
|
servers = s;
|
||||||
@ -230,6 +259,7 @@ int ares_set_servers_csv(ares_channel channel,
|
|||||||
|
|
||||||
/* Set up for next one */
|
/* Set up for next one */
|
||||||
start_host = ptr + 1;
|
start_host = ptr + 1;
|
||||||
|
cc = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
deps/cares/src/ares_parse_a_reply.c
vendored
11
deps/cares/src/ares_parse_a_reply.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -41,8 +38,6 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#ifdef HAVE_LIMITS_H
|
#ifdef HAVE_LIMITS_H
|
||||||
# include <limits.h>
|
# include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
@ -141,6 +136,12 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
|
|||||||
rr_len = DNS_RR_LEN(aptr);
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
rr_ttl = DNS_RR_TTL(aptr);
|
rr_ttl = DNS_RR_TTL(aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
free(rr_name);
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (rr_class == C_IN && rr_type == T_A
|
if (rr_class == C_IN && rr_type == T_A
|
||||||
&& rr_len == sizeof(struct in_addr)
|
&& rr_len == sizeof(struct in_addr)
|
||||||
|
15
deps/cares/src/ares_parse_aaaa_reply.c
vendored
15
deps/cares/src/ares_parse_aaaa_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -42,15 +39,13 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#ifdef HAVE_LIMITS_H
|
#ifdef HAVE_LIMITS_H
|
||||||
# include <limits.h>
|
# include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
||||||
@ -141,6 +136,12 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
|||||||
rr_len = DNS_RR_LEN(aptr);
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
rr_ttl = DNS_RR_TTL(aptr);
|
rr_ttl = DNS_RR_TTL(aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
free(rr_name);
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (rr_class == C_IN && rr_type == T_AAAA
|
if (rr_class == C_IN && rr_type == T_AAAA
|
||||||
&& rr_len == sizeof(struct ares_in6_addr)
|
&& rr_len == sizeof(struct ares_in6_addr)
|
||||||
@ -241,6 +242,8 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
|
|||||||
for (i = 0; i < naddrs; i++)
|
for (i = 0; i < naddrs; i++)
|
||||||
hostent->h_addr_list[i] = (char *) &addrs[i];
|
hostent->h_addr_list[i] = (char *) &addrs[i];
|
||||||
hostent->h_addr_list[naddrs] = NULL;
|
hostent->h_addr_list[naddrs] = NULL;
|
||||||
|
if (!naddrs && addrs)
|
||||||
|
free(addrs);
|
||||||
*host = hostent;
|
*host = hostent;
|
||||||
return ARES_SUCCESS;
|
return ARES_SUCCESS;
|
||||||
}
|
}
|
||||||
|
10
deps/cares/src/ares_parse_mx_reply.c
vendored
10
deps/cares/src/ares_parse_mx_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,8 +35,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
@ -105,6 +100,11 @@ ares_parse_mx_reply (const unsigned char *abuf, int alen,
|
|||||||
rr_class = DNS_RR_CLASS (aptr);
|
rr_class = DNS_RR_CLASS (aptr);
|
||||||
rr_len = DNS_RR_LEN (aptr);
|
rr_len = DNS_RR_LEN (aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we are really looking at a MX record */
|
/* Check if we are really looking at a MX record */
|
||||||
if (rr_class == C_IN && rr_type == T_MX)
|
if (rr_class == C_IN && rr_type == T_MX)
|
||||||
|
10
deps/cares/src/ares_parse_naptr_reply.c
vendored
10
deps/cares/src/ares_parse_naptr_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,8 +35,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
@ -110,6 +105,11 @@ ares_parse_naptr_reply (const unsigned char *abuf, int alen,
|
|||||||
rr_class = DNS_RR_CLASS (aptr);
|
rr_class = DNS_RR_CLASS (aptr);
|
||||||
rr_len = DNS_RR_LEN (aptr);
|
rr_len = DNS_RR_LEN (aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we are really looking at a NAPTR record */
|
/* Check if we are really looking at a NAPTR record */
|
||||||
if (rr_class == C_IN && rr_type == T_NAPTR)
|
if (rr_class == C_IN && rr_type == T_NAPTR)
|
||||||
|
11
deps/cares/src/ares_parse_ns_reply.c
vendored
11
deps/cares/src/ares_parse_ns_reply.c
vendored
@ -20,9 +20,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -41,8 +38,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
@ -110,6 +105,12 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen,
|
|||||||
rr_class = DNS_RR_CLASS( aptr );
|
rr_class = DNS_RR_CLASS( aptr );
|
||||||
rr_len = DNS_RR_LEN( aptr );
|
rr_len = DNS_RR_LEN( aptr );
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
free(rr_name);
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if ( rr_class == C_IN && rr_type == T_NS )
|
if ( rr_class == C_IN && rr_type == T_NS )
|
||||||
{
|
{
|
||||||
|
11
deps/cares/src/ares_parse_ptr_reply.c
vendored
11
deps/cares/src/ares_parse_ptr_reply.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,8 +35,6 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
@ -108,6 +103,12 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
|
|||||||
rr_class = DNS_RR_CLASS(aptr);
|
rr_class = DNS_RR_CLASS(aptr);
|
||||||
rr_len = DNS_RR_LEN(aptr);
|
rr_len = DNS_RR_LEN(aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
free(rr_name);
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (rr_class == C_IN && rr_type == T_PTR
|
if (rr_class == C_IN && rr_type == T_PTR
|
||||||
&& strcasecmp(rr_name, ptrname) == 0)
|
&& strcasecmp(rr_name, ptrname) == 0)
|
||||||
|
5
deps/cares/src/ares_parse_soa_reply.c
vendored
5
deps/cares/src/ares_parse_soa_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,8 +35,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
|
10
deps/cares/src/ares_parse_srv_reply.c
vendored
10
deps/cares/src/ares_parse_srv_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -38,8 +35,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
@ -110,6 +105,11 @@ ares_parse_srv_reply (const unsigned char *abuf, int alen,
|
|||||||
rr_class = DNS_RR_CLASS (aptr);
|
rr_class = DNS_RR_CLASS (aptr);
|
||||||
rr_len = DNS_RR_LEN (aptr);
|
rr_len = DNS_RR_LEN (aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we are really looking at a SRV record */
|
/* Check if we are really looking at a SRV record */
|
||||||
if (rr_class == C_IN && rr_type == T_SRV)
|
if (rr_class == C_IN && rr_type == T_SRV)
|
||||||
|
69
deps/cares/src/ares_parse_txt_reply.c
vendored
69
deps/cares/src/ares_parse_txt_reply.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -42,9 +39,6 @@
|
|||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_data.h"
|
#include "ares_data.h"
|
||||||
@ -54,7 +48,7 @@ int
|
|||||||
ares_parse_txt_reply (const unsigned char *abuf, int alen,
|
ares_parse_txt_reply (const unsigned char *abuf, int alen,
|
||||||
struct ares_txt_reply **txt_out)
|
struct ares_txt_reply **txt_out)
|
||||||
{
|
{
|
||||||
size_t substr_len, str_len;
|
size_t substr_len;
|
||||||
unsigned int qdcount, ancount, i;
|
unsigned int qdcount, ancount, i;
|
||||||
const unsigned char *aptr;
|
const unsigned char *aptr;
|
||||||
const unsigned char *strptr;
|
const unsigned char *strptr;
|
||||||
@ -112,10 +106,35 @@ ares_parse_txt_reply (const unsigned char *abuf, int alen,
|
|||||||
rr_class = DNS_RR_CLASS (aptr);
|
rr_class = DNS_RR_CLASS (aptr);
|
||||||
rr_len = DNS_RR_LEN (aptr);
|
rr_len = DNS_RR_LEN (aptr);
|
||||||
aptr += RRFIXEDSZ;
|
aptr += RRFIXEDSZ;
|
||||||
|
if (aptr + rr_len > abuf + alen)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if we are really looking at a TXT record */
|
/* Check if we are really looking at a TXT record */
|
||||||
if (rr_class == C_IN && rr_type == T_TXT)
|
if (rr_class == C_IN && rr_type == T_TXT)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* There may be multiple substrings in a single TXT record. Each
|
||||||
|
* substring may be up to 255 characters in length, with a
|
||||||
|
* "length byte" indicating the size of the substring payload.
|
||||||
|
* RDATA contains both the length-bytes and payloads of all
|
||||||
|
* substrings contained therein.
|
||||||
|
*/
|
||||||
|
|
||||||
|
strptr = aptr;
|
||||||
|
while (strptr < (aptr + rr_len))
|
||||||
|
{
|
||||||
|
substr_len = (unsigned char)*strptr;
|
||||||
|
if (strptr + substr_len + 1 > aptr + rr_len)
|
||||||
|
{
|
||||||
|
status = ARES_EBADRESP;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
++strptr;
|
||||||
|
|
||||||
/* Allocate storage for this TXT answer appending it to the list */
|
/* Allocate storage for this TXT answer appending it to the list */
|
||||||
txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY);
|
txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY);
|
||||||
if (!txt_curr)
|
if (!txt_curr)
|
||||||
@ -133,44 +152,20 @@ ares_parse_txt_reply (const unsigned char *abuf, int alen,
|
|||||||
}
|
}
|
||||||
txt_last = txt_curr;
|
txt_last = txt_curr;
|
||||||
|
|
||||||
/*
|
txt_curr->length = substr_len;
|
||||||
* There may be multiple substrings in a single TXT record. Each
|
txt_curr->txt = malloc (substr_len + 1/* Including null byte */);
|
||||||
* substring may be up to 255 characters in length, with a
|
|
||||||
* "length byte" indicating the size of the substring payload.
|
|
||||||
* RDATA contains both the length-bytes and payloads of all
|
|
||||||
* substrings contained therein.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Compute total length to allow a single memory allocation */
|
|
||||||
strptr = aptr;
|
|
||||||
while (strptr < (aptr + rr_len))
|
|
||||||
{
|
|
||||||
substr_len = (unsigned char)*strptr;
|
|
||||||
txt_curr->length += substr_len;
|
|
||||||
strptr += substr_len + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Including null byte */
|
|
||||||
txt_curr->txt = malloc (txt_curr->length + 1);
|
|
||||||
if (txt_curr->txt == NULL)
|
if (txt_curr->txt == NULL)
|
||||||
{
|
{
|
||||||
status = ARES_ENOMEM;
|
status = ARES_ENOMEM;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
memcpy ((char *) txt_curr->txt, strptr, substr_len);
|
||||||
|
|
||||||
|
/* Make sure we NULL-terminate */
|
||||||
|
txt_curr->txt[substr_len] = 0;
|
||||||
|
|
||||||
/* Step through the list of substrings, concatenating them */
|
|
||||||
str_len = 0;
|
|
||||||
strptr = aptr;
|
|
||||||
while (strptr < (aptr + rr_len))
|
|
||||||
{
|
|
||||||
substr_len = (unsigned char)*strptr;
|
|
||||||
strptr++;
|
|
||||||
memcpy ((char *) txt_curr->txt + str_len, strptr, substr_len);
|
|
||||||
str_len += substr_len;
|
|
||||||
strptr += substr_len;
|
strptr += substr_len;
|
||||||
}
|
}
|
||||||
/* Make sure we NULL-terminate */
|
|
||||||
*((char *) txt_curr->txt + txt_curr->length) = '\0';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't lose memory in the next iteration */
|
/* Don't lose memory in the next iteration */
|
||||||
|
17
deps/cares/src/ares_private.h
vendored
17
deps/cares/src/ares_private.h
vendored
@ -26,9 +26,6 @@
|
|||||||
#define WIN32
|
#define WIN32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -40,10 +37,6 @@
|
|||||||
#define HAVE_WRITEV 1
|
#define HAVE_WRITEV 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NETWARE
|
|
||||||
#include <time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEFAULT_TIMEOUT 5000 /* milliseconds */
|
#define DEFAULT_TIMEOUT 5000 /* milliseconds */
|
||||||
#define DEFAULT_TRIES 4
|
#define DEFAULT_TRIES 4
|
||||||
#ifndef INADDR_NONE
|
#ifndef INADDR_NONE
|
||||||
@ -113,6 +106,13 @@
|
|||||||
# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
|
# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/********* EDNS defines section ******/
|
||||||
|
#define EDNSPACKETSZ 1280 /* Reasonable UDP payload size, as suggested
|
||||||
|
in RFC2671 */
|
||||||
|
#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */
|
||||||
|
#define EDNSFIXEDSZ 11 /* Size of EDNS header */
|
||||||
|
/********* EDNS defines section ******/
|
||||||
|
|
||||||
struct ares_addr {
|
struct ares_addr {
|
||||||
int family;
|
int family;
|
||||||
union {
|
union {
|
||||||
@ -260,6 +260,7 @@ struct ares_channeldata {
|
|||||||
struct apattern *sortlist;
|
struct apattern *sortlist;
|
||||||
int nsort;
|
int nsort;
|
||||||
char *lookups;
|
char *lookups;
|
||||||
|
int ednspsz;
|
||||||
|
|
||||||
/* For binding to local devices and/or IP addresses. Leave
|
/* For binding to local devices and/or IP addresses. Leave
|
||||||
* them null/zero for no binding.
|
* them null/zero for no binding.
|
||||||
@ -317,7 +318,6 @@ long ares__timeoffset(struct timeval *now,
|
|||||||
struct timeval *check);
|
struct timeval *check);
|
||||||
/* returns ARES_SUCCESS if library has been initialized */
|
/* returns ARES_SUCCESS if library has been initialized */
|
||||||
int ares_library_initialized(void);
|
int ares_library_initialized(void);
|
||||||
void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);
|
|
||||||
void ares__send_query(ares_channel channel, struct query *query,
|
void ares__send_query(ares_channel channel, struct query *query,
|
||||||
struct timeval *now);
|
struct timeval *now);
|
||||||
void ares__close_sockets(ares_channel channel, struct server_state *server);
|
void ares__close_sockets(ares_channel channel, struct server_state *server);
|
||||||
@ -349,6 +349,7 @@ long ares__tvdiff(struct timeval t1, struct timeval t2);
|
|||||||
libcurl lowlevel code from within library is ugly and only works when
|
libcurl lowlevel code from within library is ugly and only works when
|
||||||
c-ares is built and linked with a similarly curldebug-enabled libcurl,
|
c-ares is built and linked with a similarly curldebug-enabled libcurl,
|
||||||
but we do this anyway for convenience. */
|
but we do this anyway for convenience. */
|
||||||
|
#define HEADER_CURL_SETUP_ONCE_H
|
||||||
#include "../lib/memdebug.h"
|
#include "../lib/memdebug.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
224
deps/cares/src/ares_process.c
vendored
224
deps/cares/src/ares_process.c
vendored
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||||
* Copyright (C) 2004-2012 by Daniel Stenberg
|
* Copyright (C) 2004-2013 by Daniel Stenberg
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_UIO_H
|
#ifdef HAVE_SYS_UIO_H
|
||||||
# include <sys/uio.h>
|
# include <sys/uio.h>
|
||||||
#endif
|
#endif
|
||||||
@ -41,16 +38,9 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_STRINGS_H
|
#ifdef HAVE_STRINGS_H
|
||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_IOCTL_H
|
#ifdef HAVE_SYS_IOCTL_H
|
||||||
# include <sys/ioctl.h>
|
# include <sys/ioctl.h>
|
||||||
#endif
|
#endif
|
||||||
@ -59,10 +49,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
@ -356,11 +343,11 @@ static void read_tcp_data(ares_channel channel, fd_set *read_fds,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(read_fds)
|
if(read_fds)
|
||||||
/* If there's an error and we close this socket, then open
|
/* If there's an error and we close this socket, then open another
|
||||||
* another with the same fd to talk to another server, then we
|
* with the same fd to talk to another server, then we don't want to
|
||||||
* don't want to think that it was the new socket that was
|
* think that it was the new socket that was ready. This is not
|
||||||
* ready. This is not disastrous, but is likely to result in
|
* disastrous, but is likely to result in extra system calls and
|
||||||
* extra system calls and confusion. */
|
* confusion. */
|
||||||
FD_CLR(server->tcp_socket, read_fds);
|
FD_CLR(server->tcp_socket, read_fds);
|
||||||
|
|
||||||
if (server->tcp_lenbuf_pos != 2)
|
if (server->tcp_lenbuf_pos != 2)
|
||||||
@ -430,7 +417,7 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
struct server_state *server;
|
struct server_state *server;
|
||||||
int i;
|
int i;
|
||||||
ssize_t count;
|
ssize_t count;
|
||||||
unsigned char buf[PACKETSZ + 1];
|
unsigned char buf[MAXENDSSZ + 1];
|
||||||
#ifdef HAVE_RECVFROM
|
#ifdef HAVE_RECVFROM
|
||||||
ares_socklen_t fromlen;
|
ares_socklen_t fromlen;
|
||||||
union {
|
union {
|
||||||
@ -472,25 +459,31 @@ static void read_udp_packets(ares_channel channel, fd_set *read_fds,
|
|||||||
/* To reduce event loop overhead, read and process as many
|
/* To reduce event loop overhead, read and process as many
|
||||||
* packets as we can. */
|
* packets as we can. */
|
||||||
do {
|
do {
|
||||||
|
if (server->udp_socket == ARES_SOCKET_BAD)
|
||||||
|
count = 0;
|
||||||
|
|
||||||
|
else {
|
||||||
#ifdef HAVE_RECVFROM
|
#ifdef HAVE_RECVFROM
|
||||||
if (server->addr.family == AF_INET)
|
if (server->addr.family == AF_INET)
|
||||||
fromlen = sizeof(from.sa4);
|
fromlen = sizeof(from.sa4);
|
||||||
else
|
else
|
||||||
fromlen = sizeof(from.sa6);
|
fromlen = sizeof(from.sa6);
|
||||||
count = (ssize_t)recvfrom(server->udp_socket, (void *)buf, sizeof(buf),
|
count = (ssize_t)recvfrom(server->udp_socket, (void *)buf,
|
||||||
0, &from.sa, &fromlen);
|
sizeof(buf), 0, &from.sa, &fromlen);
|
||||||
#else
|
#else
|
||||||
count = sread(server->udp_socket, buf, sizeof(buf));
|
count = sread(server->udp_socket, buf, sizeof(buf));
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if (count == -1 && try_again(SOCKERRNO))
|
if (count == -1 && try_again(SOCKERRNO))
|
||||||
continue;
|
continue;
|
||||||
else if (count <= 0)
|
else if (count <= 0)
|
||||||
handle_error(channel, i, now);
|
handle_error(channel, i, now);
|
||||||
#ifdef HAVE_RECVFROM
|
#ifdef HAVE_RECVFROM
|
||||||
else if (!same_address(&from.sa, &server->addr))
|
else if (!same_address(&from.sa, &server->addr))
|
||||||
/* The address the response comes from does not match
|
/* The address the response comes from does not match the address we
|
||||||
* the address we sent the request to. Someone may be
|
* sent the request to. Someone may be attempting to perform a cache
|
||||||
* attempting to perform a cache poisoning attack. */
|
* poisoning attack. */
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
@ -507,11 +500,10 @@ static void process_timeouts(ares_channel channel, struct timeval *now)
|
|||||||
struct list_node* list_head;
|
struct list_node* list_head;
|
||||||
struct list_node* list_node;
|
struct list_node* list_node;
|
||||||
|
|
||||||
/* Process all the timeouts that have fired since the last time we
|
/* Process all the timeouts that have fired since the last time we processed
|
||||||
* processed timeouts. If things are going well, then we'll have
|
* timeouts. If things are going well, then we'll have hundreds/thousands of
|
||||||
* hundreds/thousands of queries that fall into future buckets, and
|
* queries that fall into future buckets, and only a handful of requests
|
||||||
* only a handful of requests that fall into the "now" bucket, so
|
* that fall into the "now" bucket, so this should be quite quick.
|
||||||
* this should be quite quick.
|
|
||||||
*/
|
*/
|
||||||
for (t = channel->last_timeout_processed; t <= now->tv_sec; t++)
|
for (t = channel->last_timeout_processed; t <= now->tv_sec; t++)
|
||||||
{
|
{
|
||||||
@ -536,7 +528,7 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
int alen, int whichserver, int tcp,
|
int alen, int whichserver, int tcp,
|
||||||
struct timeval *now)
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
int tc, rcode;
|
int tc, rcode, packetsz;
|
||||||
unsigned short id;
|
unsigned short id;
|
||||||
struct query *query;
|
struct query *query;
|
||||||
struct list_node* list_head;
|
struct list_node* list_head;
|
||||||
@ -553,11 +545,10 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
rcode = DNS_HEADER_RCODE(abuf);
|
rcode = DNS_HEADER_RCODE(abuf);
|
||||||
|
|
||||||
/* Find the query corresponding to this packet. The queries are
|
/* Find the query corresponding to this packet. The queries are
|
||||||
* hashed/bucketed by query id, so this lookup should be quick.
|
* hashed/bucketed by query id, so this lookup should be quick. Note that
|
||||||
* Note that both the query id and the questions must be the same;
|
* both the query id and the questions must be the same; when the query id
|
||||||
* when the query id wraps around we can have multiple outstanding
|
* wraps around we can have multiple outstanding queries with the same query
|
||||||
* queries with the same query id, so we need to check both the id and
|
* id, so we need to check both the id and question.
|
||||||
* question.
|
|
||||||
*/
|
*/
|
||||||
query = NULL;
|
query = NULL;
|
||||||
list_head = &(channel->queries_by_qid[id % ARES_QID_TABLE_SIZE]);
|
list_head = &(channel->queries_by_qid[id % ARES_QID_TABLE_SIZE]);
|
||||||
@ -574,11 +565,34 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
if (!query)
|
if (!query)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
packetsz = PACKETSZ;
|
||||||
|
/* If we use EDNS and server answers with one of these RCODES, the protocol
|
||||||
|
* extension is not understood by the responder. We must retry the query
|
||||||
|
* without EDNS enabled.
|
||||||
|
*/
|
||||||
|
if (channel->flags & ARES_FLAG_EDNS)
|
||||||
|
{
|
||||||
|
packetsz = channel->ednspsz;
|
||||||
|
if (rcode == NOTIMP || rcode == FORMERR || rcode == SERVFAIL)
|
||||||
|
{
|
||||||
|
int qlen = alen - EDNSFIXEDSZ;
|
||||||
|
channel->flags ^= ARES_FLAG_EDNS;
|
||||||
|
query->tcplen -= EDNSFIXEDSZ;
|
||||||
|
query->qlen -= EDNSFIXEDSZ;
|
||||||
|
query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
|
||||||
|
query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
|
||||||
|
DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0);
|
||||||
|
query->tcpbuf = realloc(query->tcpbuf, query->tcplen);
|
||||||
|
ares__send_query(channel, query, now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If we got a truncated UDP packet and are not ignoring truncation,
|
/* If we got a truncated UDP packet and are not ignoring truncation,
|
||||||
* don't accept the packet, and switch the query to TCP if we hadn't
|
* don't accept the packet, and switch the query to TCP if we hadn't
|
||||||
* done so already.
|
* done so already.
|
||||||
*/
|
*/
|
||||||
if ((tc || alen > PACKETSZ) && !tcp && !(channel->flags & ARES_FLAG_IGNTC))
|
if ((tc || alen > packetsz) && !tcp && !(channel->flags & ARES_FLAG_IGNTC))
|
||||||
{
|
{
|
||||||
if (!query->using_tcp)
|
if (!query->using_tcp)
|
||||||
{
|
{
|
||||||
@ -591,8 +605,8 @@ static void process_answer(ares_channel channel, unsigned char *abuf,
|
|||||||
/* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we
|
/* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we
|
||||||
* are ignoring truncation.
|
* are ignoring truncation.
|
||||||
*/
|
*/
|
||||||
if (alen > PACKETSZ && !tcp)
|
if (alen > packetsz && !tcp)
|
||||||
alen = PACKETSZ;
|
alen = packetsz;
|
||||||
|
|
||||||
/* If we aren't passing through all error packets, discard packets
|
/* If we aren't passing through all error packets, discard packets
|
||||||
* with SERVFAIL, NOTIMP, or REFUSED response codes.
|
* with SERVFAIL, NOTIMP, or REFUSED response codes.
|
||||||
@ -626,6 +640,31 @@ static void process_broken_connections(ares_channel channel,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Swap the contents of two lists */
|
||||||
|
static void swap_lists(struct list_node* head_a,
|
||||||
|
struct list_node* head_b)
|
||||||
|
{
|
||||||
|
int is_a_empty = ares__is_list_empty(head_a);
|
||||||
|
int is_b_empty = ares__is_list_empty(head_b);
|
||||||
|
struct list_node old_a = *head_a;
|
||||||
|
struct list_node old_b = *head_b;
|
||||||
|
|
||||||
|
if (is_a_empty) {
|
||||||
|
ares__init_list_head(head_b);
|
||||||
|
} else {
|
||||||
|
*head_b = old_a;
|
||||||
|
old_a.next->prev = head_b;
|
||||||
|
old_a.prev->next = head_b;
|
||||||
|
}
|
||||||
|
if (is_b_empty) {
|
||||||
|
ares__init_list_head(head_a);
|
||||||
|
} else {
|
||||||
|
*head_a = old_b;
|
||||||
|
old_b.next->prev = head_a;
|
||||||
|
old_b.prev->next = head_a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_error(ares_channel channel, int whichserver,
|
static void handle_error(ares_channel channel, int whichserver,
|
||||||
struct timeval *now)
|
struct timeval *now)
|
||||||
{
|
{
|
||||||
@ -639,15 +678,14 @@ static void handle_error(ares_channel channel, int whichserver,
|
|||||||
/* Reset communications with this server. */
|
/* Reset communications with this server. */
|
||||||
ares__close_sockets(channel, server);
|
ares__close_sockets(channel, server);
|
||||||
|
|
||||||
/* Tell all queries talking to this server to move on and not try
|
/* Tell all queries talking to this server to move on and not try this
|
||||||
* this server again. We steal the current list of queries that were
|
* server again. We steal the current list of queries that were in-flight to
|
||||||
* in-flight to this server, since when we call next_server this can
|
* this server, since when we call next_server this can cause the queries to
|
||||||
* cause the queries to be re-sent to this server, which will
|
* be re-sent to this server, which will re-insert these queries in that
|
||||||
* re-insert these queries in that same server->queries_to_server
|
* same server->queries_to_server list.
|
||||||
* list.
|
|
||||||
*/
|
*/
|
||||||
ares__init_list_head(&list_head);
|
ares__init_list_head(&list_head);
|
||||||
ares__swap_lists(&list_head, &(server->queries_to_server));
|
swap_lists(&list_head, &(server->queries_to_server));
|
||||||
for (list_node = list_head.next; list_node != &list_head; )
|
for (list_node = list_head.next; list_node != &list_head; )
|
||||||
{
|
{
|
||||||
query = list_node->data;
|
query = list_node->data;
|
||||||
@ -663,14 +701,15 @@ static void handle_error(ares_channel channel, int whichserver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void skip_server(ares_channel channel, struct query *query,
|
static void skip_server(ares_channel channel, struct query *query,
|
||||||
int whichserver) {
|
int whichserver)
|
||||||
/* The given server gave us problems with this query, so if we have
|
{
|
||||||
* the luxury of using other servers, then let's skip the
|
/* The given server gave us problems with this query, so if we have the
|
||||||
* potentially broken server and just use the others. If we only
|
* luxury of using other servers, then let's skip the potentially broken
|
||||||
* have one server and we need to retry then we should just go ahead
|
* server and just use the others. If we only have one server and we need to
|
||||||
* and re-use that server, since it's our only hope; perhaps we
|
* retry then we should just go ahead and re-use that server, since it's our
|
||||||
* just got unlucky, and retrying will work (eg, the server timed
|
* only hope; perhaps we just got unlucky, and retrying will work (eg, the
|
||||||
* out our TCP connection just as we were sending another request).
|
* server timed out our TCP connection just as we were sending another
|
||||||
|
* request).
|
||||||
*/
|
*/
|
||||||
if (channel->nservers > 1)
|
if (channel->nservers > 1)
|
||||||
{
|
{
|
||||||
@ -693,11 +732,10 @@ static void next_server(ares_channel channel, struct query *query,
|
|||||||
query->server = (query->server + 1) % channel->nservers;
|
query->server = (query->server + 1) % channel->nservers;
|
||||||
server = &channel->servers[query->server];
|
server = &channel->servers[query->server];
|
||||||
|
|
||||||
/* We don't want to use this server if (1) we decided this
|
/* We don't want to use this server if (1) we decided this connection is
|
||||||
* connection is broken, and thus about to be closed, (2)
|
* broken, and thus about to be closed, (2) we've decided to skip this
|
||||||
* we've decided to skip this server because of earlier
|
* server because of earlier errors we encountered, or (3) we already
|
||||||
* errors we encountered, or (3) we already sent this query
|
* sent this query over this exact connection.
|
||||||
* over this exact connection.
|
|
||||||
*/
|
*/
|
||||||
if (!server->is_broken &&
|
if (!server->is_broken &&
|
||||||
!query->server_info[query->server].skip_server &&
|
!query->server_info[query->server].skip_server &&
|
||||||
@ -709,11 +747,11 @@ static void next_server(ares_channel channel, struct query *query,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* You might think that with TCP we only need one try. However,
|
/* You might think that with TCP we only need one try. However, even
|
||||||
* even when using TCP, servers can time-out our connection just
|
* when using TCP, servers can time-out our connection just as we're
|
||||||
* as we're sending a request, or close our connection because
|
* sending a request, or close our connection because they die, or never
|
||||||
* they die, or never send us a reply because they get wedged or
|
* send us a reply because they get wedged or tickle a bug that drops
|
||||||
* tickle a bug that drops our request.
|
* our request.
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -749,11 +787,11 @@ void ares__send_query(ares_channel channel, struct query *query,
|
|||||||
end_query(channel, query, ARES_ENOMEM, NULL, 0);
|
end_query(channel, query, ARES_ENOMEM, NULL, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* To make the common case fast, we avoid copies by using the
|
/* To make the common case fast, we avoid copies by using the query's
|
||||||
* query's tcpbuf for as long as the query is alive. In the rare
|
* tcpbuf for as long as the query is alive. In the rare case where the
|
||||||
* case where the query ends while it's queued for transmission,
|
* query ends while it's queued for transmission, then we give the
|
||||||
* then we give the sendreq its own copy of the request packet
|
* sendreq its own copy of the request packet and put it in
|
||||||
* and put it in sendreq->data_storage.
|
* sendreq->data_storage.
|
||||||
*/
|
*/
|
||||||
sendreq->data_storage = NULL;
|
sendreq->data_storage = NULL;
|
||||||
sendreq->data = query->tcpbuf;
|
sendreq->data = query->tcpbuf;
|
||||||
@ -916,10 +954,12 @@ static int configure_socket(ares_socket_t s, int family, ares_channel channel)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (family == AF_INET6) {
|
else if (family == AF_INET6) {
|
||||||
if (memcmp(channel->local_ip6, &ares_in6addr_any, sizeof(channel->local_ip6)) != 0) {
|
if (memcmp(channel->local_ip6, &ares_in6addr_any,
|
||||||
|
sizeof(channel->local_ip6)) != 0) {
|
||||||
memset(&local.sa6, 0, sizeof(local.sa6));
|
memset(&local.sa6, 0, sizeof(local.sa6));
|
||||||
local.sa6.sin6_family = AF_INET6;
|
local.sa6.sin6_family = AF_INET6;
|
||||||
memcpy(&local.sa6.sin6_addr, channel->local_ip6, sizeof(channel->local_ip6));
|
memcpy(&local.sa6.sin6_addr, channel->local_ip6,
|
||||||
|
sizeof(channel->local_ip6));
|
||||||
if (bind(s, &local.sa, sizeof(local.sa6)) < 0)
|
if (bind(s, &local.sa, sizeof(local.sa6)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1222,19 +1262,17 @@ static void end_query (ares_channel channel, struct query *query, int status,
|
|||||||
assert(sendreq->data_storage == NULL);
|
assert(sendreq->data_storage == NULL);
|
||||||
if (status == ARES_SUCCESS)
|
if (status == ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
/* We got a reply for this query, but this queued
|
/* We got a reply for this query, but this queued sendreq
|
||||||
* sendreq points into this soon-to-be-gone query's
|
* points into this soon-to-be-gone query's tcpbuf. Probably
|
||||||
* tcpbuf. Probably this means we timed out and queued
|
* this means we timed out and queued the query for
|
||||||
* the query for retransmission, then received a
|
* retransmission, then received a response before actually
|
||||||
* response before actually retransmitting. This is
|
* retransmitting. This is perfectly fine, so we want to keep
|
||||||
* perfectly fine, so we want to keep the connection
|
* the connection running smoothly if we can. But in the worst
|
||||||
* running smoothly if we can. But in the worst case
|
* case we may have sent only some prefix of the query, with
|
||||||
* we may have sent only some prefix of the query,
|
* some suffix of the query left to send. Also, the buffer may
|
||||||
* with some suffix of the query left to send. Also,
|
* be queued on multiple queues. To prevent dangling pointers
|
||||||
* the buffer may be queued on multiple queues. To
|
* to the query's tcpbuf and handle these cases, we just give
|
||||||
* prevent dangling pointers to the query's tcpbuf and
|
* such sendreqs their own copy of the query packet.
|
||||||
* handle these cases, we just give such sendreqs
|
|
||||||
* their own copy of the query packet.
|
|
||||||
*/
|
*/
|
||||||
sendreq->data_storage = malloc(sendreq->len);
|
sendreq->data_storage = malloc(sendreq->len);
|
||||||
if (sendreq->data_storage != NULL)
|
if (sendreq->data_storage != NULL)
|
||||||
@ -1245,14 +1283,12 @@ static void end_query (ares_channel channel, struct query *query, int status,
|
|||||||
}
|
}
|
||||||
if ((status != ARES_SUCCESS) || (sendreq->data_storage == NULL))
|
if ((status != ARES_SUCCESS) || (sendreq->data_storage == NULL))
|
||||||
{
|
{
|
||||||
/* We encountered an error (probably a timeout,
|
/* We encountered an error (probably a timeout, suggesting the
|
||||||
* suggesting the DNS server we're talking to is
|
* DNS server we're talking to is probably unreachable,
|
||||||
* probably unreachable, wedged, or severely
|
* wedged, or severely overloaded) or we couldn't copy the
|
||||||
* overloaded) or we couldn't copy the request, so
|
* request, so mark the connection as broken. When we get to
|
||||||
* mark the connection as broken. When we get to
|
* process_broken_connections() we'll close the connection and
|
||||||
* process_broken_connections() we'll close the
|
* try to re-send requests to another server.
|
||||||
* connection and try to re-send requests to another
|
|
||||||
* server.
|
|
||||||
*/
|
*/
|
||||||
server->is_broken = 1;
|
server->is_broken = 1;
|
||||||
/* Just to be paranoid, zero out this sendreq... */
|
/* Just to be paranoid, zero out this sendreq... */
|
||||||
@ -1266,8 +1302,8 @@ static void end_query (ares_channel channel, struct query *query, int status,
|
|||||||
query->callback(query->arg, status, query->timeouts, abuf, alen);
|
query->callback(query->arg, status, query->timeouts, abuf, alen);
|
||||||
ares__free_query(query);
|
ares__free_query(query);
|
||||||
|
|
||||||
/* Simple cleanup policy: if no queries are remaining, close all
|
/* Simple cleanup policy: if no queries are remaining, close all network
|
||||||
* network sockets unless STAYOPEN is set.
|
* sockets unless STAYOPEN is set.
|
||||||
*/
|
*/
|
||||||
if (!(channel->flags & ARES_FLAG_STAYOPEN) &&
|
if (!(channel->flags & ARES_FLAG_STAYOPEN) &&
|
||||||
ares__is_list_empty(&(channel->all_queries)))
|
ares__is_list_empty(&(channel->all_queries)))
|
||||||
|
17
deps/cares/src/ares_query.c
vendored
17
deps/cares/src/ares_query.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -31,7 +28,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
@ -43,7 +39,7 @@ struct qquery {
|
|||||||
|
|
||||||
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen);
|
static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen);
|
||||||
|
|
||||||
void ares__rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
|
static void rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
|
||||||
{
|
{
|
||||||
unsigned char x;
|
unsigned char x;
|
||||||
unsigned char y;
|
unsigned char y;
|
||||||
@ -105,6 +101,13 @@ static unsigned short generate_unique_id(ares_channel channel)
|
|||||||
return (unsigned short)id;
|
return (unsigned short)id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned short ares__generate_new_id(rc4_key* key)
|
||||||
|
{
|
||||||
|
unsigned short r=0;
|
||||||
|
rc4(key, (unsigned char *)&r, sizeof(r));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
void ares_query(ares_channel channel, const char *name, int dnsclass,
|
||||||
int type, ares_callback callback, void *arg)
|
int type, ares_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
@ -114,8 +117,8 @@ void ares_query(ares_channel channel, const char *name, int dnsclass,
|
|||||||
|
|
||||||
/* Compose the query. */
|
/* Compose the query. */
|
||||||
rd = !(channel->flags & ARES_FLAG_NORECURSE);
|
rd = !(channel->flags & ARES_FLAG_NORECURSE);
|
||||||
status = ares_mkquery(name, dnsclass, type, channel->next_id, rd, &qbuf,
|
status = ares_create_query(name, dnsclass, type, channel->next_id, rd, &qbuf,
|
||||||
&qlen);
|
&qlen, (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : 0);
|
||||||
if (status != ARES_SUCCESS)
|
if (status != ARES_SUCCESS)
|
||||||
{
|
{
|
||||||
if (qbuf != NULL) free(qbuf);
|
if (qbuf != NULL) free(qbuf);
|
||||||
|
5
deps/cares/src/ares_search.c
vendored
5
deps/cares/src/ares_search.c
vendored
@ -16,11 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#ifdef HAVE_STRINGS_H
|
#ifdef HAVE_STRINGS_H
|
||||||
# include <strings.h>
|
# include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
13
deps/cares/src/ares_send.c
vendored
13
deps/cares/src/ares_send.c
vendored
@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -31,9 +28,6 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_dns.h"
|
#include "ares_dns.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
@ -42,7 +36,7 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
ares_callback callback, void *arg)
|
ares_callback callback, void *arg)
|
||||||
{
|
{
|
||||||
struct query *query;
|
struct query *query;
|
||||||
int i;
|
int i, packetsz;
|
||||||
struct timeval now;
|
struct timeval now;
|
||||||
|
|
||||||
/* Verify that the query is at least long enough to hold the header. */
|
/* Verify that the query is at least long enough to hold the header. */
|
||||||
@ -109,7 +103,10 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
|
|||||||
query->server_info[i].skip_server = 0;
|
query->server_info[i].skip_server = 0;
|
||||||
query->server_info[i].tcp_connection_generation = 0;
|
query->server_info[i].tcp_connection_generation = 0;
|
||||||
}
|
}
|
||||||
query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > PACKETSZ;
|
|
||||||
|
packetsz = (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : PACKETSZ;
|
||||||
|
query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > packetsz;
|
||||||
|
|
||||||
query->error_status = ARES_ECONNREFUSED;
|
query->error_status = ARES_ECONNREFUSED;
|
||||||
query->timeouts = 0;
|
query->timeouts = 0;
|
||||||
|
|
||||||
|
12
deps/cares/src/ares_timeout.c
vendored
12
deps/cares/src/ares_timeout.c
vendored
@ -16,12 +16,10 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_TIME_H
|
#ifdef HAVE_LIMITS_H
|
||||||
#include <sys/time.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_private.h"
|
#include "ares_private.h"
|
||||||
|
|
||||||
@ -67,8 +65,10 @@ struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
|
|||||||
*/
|
*/
|
||||||
if (min_offset != -1)
|
if (min_offset != -1)
|
||||||
{
|
{
|
||||||
nextstop.tv_sec = min_offset/1000;
|
int ioffset = (min_offset > (long)INT_MAX) ? INT_MAX : (int)min_offset;
|
||||||
nextstop.tv_usec = (min_offset%1000)*1000;
|
|
||||||
|
nextstop.tv_sec = ioffset/1000;
|
||||||
|
nextstop.tv_usec = (ioffset%1000)*1000;
|
||||||
|
|
||||||
if (!maxtv || ares__timedout(maxtv, &nextstop))
|
if (!maxtv || ares__timedout(maxtv, &nextstop))
|
||||||
{
|
{
|
||||||
|
4
deps/cares/src/bitncmp.c
vendored
4
deps/cares/src/bitncmp.c
vendored
@ -33,8 +33,8 @@
|
|||||||
* author:
|
* author:
|
||||||
* Paul Vixie (ISC), June 1996
|
* Paul Vixie (ISC), June 1996
|
||||||
*/
|
*/
|
||||||
int
|
int ares__bitncmp(const void *l, const void *r, int n)
|
||||||
ares_bitncmp(const void *l, const void *r, int n) {
|
{
|
||||||
unsigned int lb, rb;
|
unsigned int lb, rb;
|
||||||
int x, b;
|
int x, b;
|
||||||
|
|
||||||
|
6
deps/cares/src/bitncmp.h
vendored
6
deps/cares/src/bitncmp.h
vendored
@ -2,7 +2,7 @@
|
|||||||
#define __ARES_BITNCMP_H
|
#define __ARES_BITNCMP_H
|
||||||
|
|
||||||
|
|
||||||
/* Copyright (C) 2005 by Dominick Meglio
|
/* Copyright (C) 2005, 2013 by Dominick Meglio
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this
|
* Permission to use, copy, modify, and distribute this
|
||||||
* software and its documentation for any purpose and without
|
* software and its documentation for any purpose and without
|
||||||
@ -18,9 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HAVE_BITNCMP
|
#ifndef HAVE_BITNCMP
|
||||||
int ares_bitncmp(const void *l, const void *r, int n);
|
int ares__bitncmp(const void *l, const void *r, int n);
|
||||||
#else
|
#else
|
||||||
#define ares_bitncmp(x,y,z) bitncmp(x,y,z)
|
#define ares__bitncmp(x,y,z) bitncmp(x,y,z)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __ARES_BITNCMP_H */
|
#endif /* __ARES_BITNCMP_H */
|
||||||
|
35
deps/cares/src/get_ver.awk
vendored
35
deps/cares/src/get_ver.awk
vendored
@ -1,35 +0,0 @@
|
|||||||
# ***************************************************************************
|
|
||||||
# * Project: c-ares
|
|
||||||
# *
|
|
||||||
# ***************************************************************************
|
|
||||||
# awk script which fetches c-ares version number and string from input
|
|
||||||
# file and writes them to STDOUT. Here you can get an awk version for Win32:
|
|
||||||
# http://www.gknw.net/development/prgtools/awk-20070501.zip
|
|
||||||
#
|
|
||||||
BEGIN {
|
|
||||||
if (match (ARGV[1], /ares_version.h/)) {
|
|
||||||
while ((getline < ARGV[1]) > 0) {
|
|
||||||
if (match ($0, /^#define ARES_COPYRIGHT "[^"]+"$/)) {
|
|
||||||
libcares_copyright_str = substr($0, 25, length($0)-25);
|
|
||||||
}
|
|
||||||
else if (match ($0, /^#define ARES_VERSION_STR "[^"]+"$/)) {
|
|
||||||
libcares_ver_str = substr($3, 2, length($3)-2);
|
|
||||||
}
|
|
||||||
else if (match ($0, /^#define ARES_VERSION_MAJOR [0-9]+$/)) {
|
|
||||||
libcares_ver_major = substr($3, 1, length($3));
|
|
||||||
}
|
|
||||||
else if (match ($0, /^#define ARES_VERSION_MINOR [0-9]+$/)) {
|
|
||||||
libcares_ver_minor = substr($3, 1, length($3));
|
|
||||||
}
|
|
||||||
else if (match ($0, /^#define ARES_VERSION_PATCH [0-9]+$/)) {
|
|
||||||
libcares_ver_patch = substr($3, 1, length($3));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
libcares_ver = libcares_ver_major "," libcares_ver_minor "," libcares_ver_patch;
|
|
||||||
print "LIBCARES_VERSION = " libcares_ver "";
|
|
||||||
print "LIBCARES_VERSION_STR = " libcares_ver_str "";
|
|
||||||
print "LIBCARES_COPYRIGHT_STR = " libcares_copyright_str "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
17
deps/cares/src/inet_net_pton.c
vendored
17
deps/cares/src/inet_net_pton.c
vendored
@ -18,9 +18,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -36,15 +33,10 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "ares_nowarn.h"
|
#include "ares_nowarn.h"
|
||||||
#include "inet_net_pton.h"
|
#include "ares_inet_net_pton.h"
|
||||||
|
|
||||||
|
|
||||||
const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
|
const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
|
||||||
@ -448,4 +440,11 @@ int ares_inet_pton(int af, const char *src, void *dst)
|
|||||||
return 0;
|
return 0;
|
||||||
return (result > -1 ? 1 : -1);
|
return (result > -1 ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
#else /* HAVE_INET_PTON */
|
||||||
|
int ares_inet_pton(int af, const char *src, void *dst)
|
||||||
|
{
|
||||||
|
/* just relay this to the underlying function */
|
||||||
|
return inet_pton(af, src, dst);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
28
deps/cares/src/inet_ntop.c
vendored
28
deps/cares/src/inet_ntop.c
vendored
@ -17,9 +17,6 @@
|
|||||||
|
|
||||||
#include "ares_setup.h"
|
#include "ares_setup.h"
|
||||||
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
#ifdef HAVE_NETINET_IN_H
|
||||||
# include <netinet/in.h>
|
# include <netinet/in.h>
|
||||||
#endif
|
#endif
|
||||||
@ -35,15 +32,8 @@
|
|||||||
# include <arpa/nameser_compat.h>
|
# include <arpa/nameser_compat.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "ares.h"
|
#include "ares.h"
|
||||||
#include "ares_ipv6.h"
|
#include "ares_ipv6.h"
|
||||||
#include "inet_ntop.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_INET_NTOP
|
#ifndef HAVE_INET_NTOP
|
||||||
|
|
||||||
@ -69,13 +59,13 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
|||||||
* Paul Vixie, 1996.
|
* Paul Vixie, 1996.
|
||||||
*/
|
*/
|
||||||
const char *
|
const char *
|
||||||
ares_inet_ntop(int af, const void *src, char *dst, size_t size)
|
ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
|
||||||
{
|
{
|
||||||
switch (af) {
|
switch (af) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
return (inet_ntop4(src, dst, size));
|
return (inet_ntop4(src, dst, (size_t)size));
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
return (inet_ntop6(src, dst, size));
|
return (inet_ntop6(src, dst, (size_t)size));
|
||||||
default:
|
default:
|
||||||
SET_ERRNO(EAFNOSUPPORT);
|
SET_ERRNO(EAFNOSUPPORT);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
@ -205,4 +195,14 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|||||||
strcpy(dst, tmp);
|
strcpy(dst, tmp);
|
||||||
return (dst);
|
return (dst);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#else /* HAVE_INET_NTOP */
|
||||||
|
|
||||||
|
const char *
|
||||||
|
ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
|
||||||
|
{
|
||||||
|
/* just relay this to the underlying function */
|
||||||
|
return inet_ntop(af, src, dst, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_INET_NTOP */
|
||||||
|
26
deps/cares/src/inet_ntop.h
vendored
26
deps/cares/src/inet_ntop.h
vendored
@ -1,26 +0,0 @@
|
|||||||
#ifndef __ARES_INET_NTOP_H
|
|
||||||
#define __ARES_INET_NTOP_H
|
|
||||||
|
|
||||||
|
|
||||||
/* Copyright (C) 2005 by Dominick Meglio
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_INET_NTOP
|
|
||||||
#define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z)
|
|
||||||
#else
|
|
||||||
const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __ARES_INET_NTOP_H */
|
|
44
deps/cares/src/setup_once.h
vendored
44
deps/cares/src/setup_once.h
vendored
@ -2,7 +2,7 @@
|
|||||||
#define __SETUP_ONCE_H
|
#define __SETUP_ONCE_H
|
||||||
|
|
||||||
|
|
||||||
/* Copyright (C) 2004 - 2012 by Daniel Stenberg et al
|
/* Copyright (C) 2004 - 2013 by Daniel Stenberg et al
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and distribute this software and its
|
* Permission to use, copy, modify, and distribute this software and its
|
||||||
* documentation for any purpose and without fee is hereby granted, provided
|
* documentation for any purpose and without fee is hereby granted, provided
|
||||||
@ -76,6 +76,34 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __hpux
|
||||||
|
# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
|
||||||
|
# ifdef _APP32_64BIT_OFF_T
|
||||||
|
# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T
|
||||||
|
# undef _APP32_64BIT_OFF_T
|
||||||
|
# else
|
||||||
|
# undef OLD_APP32_64BIT_OFF_T
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_SOCKET_H
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __hpux
|
||||||
|
# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
|
||||||
|
# ifdef OLD_APP32_64BIT_OFF_T
|
||||||
|
# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T
|
||||||
|
# undef OLD_APP32_64BIT_OFF_T
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Definition of timeval struct for platforms that don't have it.
|
* Definition of timeval struct for platforms that don't have it.
|
||||||
@ -232,6 +260,8 @@ struct timeval {
|
|||||||
# define sclose(x) closesocket((x))
|
# define sclose(x) closesocket((x))
|
||||||
#elif defined(HAVE_CLOSESOCKET_CAMEL)
|
#elif defined(HAVE_CLOSESOCKET_CAMEL)
|
||||||
# define sclose(x) CloseSocket((x))
|
# define sclose(x) CloseSocket((x))
|
||||||
|
#elif defined(HAVE_CLOSE_S)
|
||||||
|
# define sclose(x) close_s((x))
|
||||||
#else
|
#else
|
||||||
# define sclose(x) close((x))
|
# define sclose(x) close((x))
|
||||||
#endif
|
#endif
|
||||||
@ -259,6 +289,18 @@ struct timeval {
|
|||||||
#define TOLOWER(x) (tolower((int) ((unsigned char)x)))
|
#define TOLOWER(x) (tolower((int) ((unsigned char)x)))
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 'bool' stuff compatible with HP-UX headers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__hpux) && !defined(HAVE_BOOL_T)
|
||||||
|
typedef int bool;
|
||||||
|
# define false 0
|
||||||
|
# define true 1
|
||||||
|
# define HAVE_BOOL_T
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 'bool' exists on platforms with <stdbool.h>, i.e. C99 platforms.
|
* 'bool' exists on platforms with <stdbool.h>, i.e. C99 platforms.
|
||||||
* On non-C99 platforms there's no bool, so define an enum for that.
|
* On non-C99 platforms there's no bool, so define an enum for that.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user