mirror of
https://github.com/mirror/wget.git
synced 2025-03-25 17:20:13 +08:00
[svn] Fixed declaration of VEC in lookup_host.
Removed the ip_default_family global variable.
This commit is contained in:
parent
41f850165a
commit
bed1c56453
@ -1,3 +1,10 @@
|
|||||||
|
2003-11-01 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
|
* host.c: Removed the ip_default_family global variable.
|
||||||
|
|
||||||
|
* host.c (lookup_host): Document the function. Fixed declaration
|
||||||
|
of VEC.
|
||||||
|
|
||||||
2003-10-31 Hrvoje Niksic <hniksic@xemacs.org>
|
2003-10-31 Hrvoje Niksic <hniksic@xemacs.org>
|
||||||
|
|
||||||
* various: Use new macros xnew, xnew0, xnew_array, and xnew0_array
|
* various: Use new macros xnew, xnew0, xnew_array, and xnew0_array
|
||||||
|
94
src/host.c
94
src/host.c
@ -81,12 +81,6 @@ extern int h_errno;
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
|
||||||
int ip_default_family = AF_UNSPEC;
|
|
||||||
#else
|
|
||||||
int ip_default_family = AF_INET;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Mapping between known hosts and to lists of their addresses. */
|
/* Mapping between known hosts and to lists of their addresses. */
|
||||||
|
|
||||||
static struct hash_table *host_name_addresses_map;
|
static struct hash_table *host_name_addresses_map;
|
||||||
@ -270,13 +264,13 @@ address_list_from_addrinfo (const struct addrinfo *ai)
|
|||||||
addresses. This kind of vector is returned by gethostbyname. */
|
addresses. This kind of vector is returned by gethostbyname. */
|
||||||
|
|
||||||
static struct address_list *
|
static struct address_list *
|
||||||
address_list_from_ipv4_addresses (char **h_addr_list)
|
address_list_from_ipv4_addresses (char **vec)
|
||||||
{
|
{
|
||||||
int count, i;
|
int count, i;
|
||||||
struct address_list *al = xnew0 (struct address_list);
|
struct address_list *al = xnew0 (struct address_list);
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
while (h_addr_list[count])
|
while (vec[count])
|
||||||
++count;
|
++count;
|
||||||
assert (count > 0);
|
assert (count > 0);
|
||||||
|
|
||||||
@ -288,7 +282,7 @@ address_list_from_ipv4_addresses (char **h_addr_list)
|
|||||||
{
|
{
|
||||||
ip_address *ip = &al->addresses[i];
|
ip_address *ip = &al->addresses[i];
|
||||||
ip->type = IPV4_ADDRESS;
|
ip->type = IPV4_ADDRESS;
|
||||||
memcpy (ADDRESS_IPV4_DATA (ip), h_addr_list[i], 4);
|
memcpy (ADDRESS_IPV4_DATA (ip), vec[i], 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
return al;
|
return al;
|
||||||
@ -453,6 +447,9 @@ cache_host_lookup (const char *host, struct address_list *al)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove HOST from Wget's DNS cache. Does nothing is HOST is not in
|
||||||
|
the cache. */
|
||||||
|
|
||||||
void
|
void
|
||||||
forget_host_lookup (const char *host)
|
forget_host_lookup (const char *host)
|
||||||
{
|
{
|
||||||
@ -464,44 +461,56 @@ forget_host_lookup (const char *host)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Look up HOST in DNS and return a list of IP addresses.
|
||||||
|
|
||||||
|
This function caches its result so that, if the same host is passed
|
||||||
|
the second time, the addresses are returned without the DNS lookup.
|
||||||
|
If you want to force lookup, call forget_host_lookup() prior to
|
||||||
|
this function, or set opt.dns_cache to 0 to globally disable
|
||||||
|
caching.
|
||||||
|
|
||||||
|
FLAGS can be a combination of:
|
||||||
|
LH_SILENT - don't print the "resolving ... done" message.
|
||||||
|
LH_IPV4_ONLY - return only IPv4 addresses.
|
||||||
|
LH_IPV6_ONLY - return only IPv6 addresses. */
|
||||||
|
|
||||||
struct address_list *
|
struct address_list *
|
||||||
lookup_host (const char *host, int flags)
|
lookup_host (const char *host, int flags)
|
||||||
{
|
{
|
||||||
struct address_list *al = NULL;
|
struct address_list *al = NULL;
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
int err, family;
|
int err;
|
||||||
struct addrinfo hints, *res;
|
struct addrinfo hints, *res;
|
||||||
|
|
||||||
/* Is this necessary? Should this function be changed to accept a
|
xzero (hints);
|
||||||
FAMILY argument? */
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
|
/* Should we inspect opt.<something> directly? */
|
||||||
if (flags & LH_IPV4_ONLY)
|
if (flags & LH_IPV4_ONLY)
|
||||||
family = AF_INET;
|
hints.ai_family = AF_INET;
|
||||||
else if (flags & LH_IPV6_ONLY)
|
else if (flags & LH_IPV6_ONLY)
|
||||||
family = AF_INET6;
|
hints.ai_family = AF_INET6;
|
||||||
else
|
else
|
||||||
family = ip_default_family;
|
hints.ai_family = AF_UNSPEC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* First, try to check whether the address is already a numeric
|
/* First, try to check whether the address is already a numeric
|
||||||
address, in which case we don't need to cache it or bother with
|
address, in which case we don't want to cache it or bother with
|
||||||
setting up timeouts. Plus, if memory serves me right, Ultrix's
|
setting up timeouts. Plus, old (e.g. Ultrix) implementations of
|
||||||
gethostbyname can't handle numeric addresses (!).
|
gethostbyname can't handle numeric addresses (!).
|
||||||
|
|
||||||
Where getaddrinfo is available, we do it using the AI_NUMERICHOST
|
Where getaddrinfo is available, we do it using the AI_NUMERICHOST
|
||||||
flag. Without IPv6, we use inet_addr succeeds. */
|
flag. Without IPv6, we use inet_addr. */
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
xzero (hints);
|
hints.ai_flags = AI_NUMERICHOST;
|
||||||
hints.ai_family = family;
|
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
|
||||||
hints.ai_flags = AI_NUMERICHOST;
|
|
||||||
if (flags & LH_PASSIVE)
|
if (flags & LH_PASSIVE)
|
||||||
hints.ai_flags = AI_PASSIVE;
|
hints.ai_flags |= AI_PASSIVE;
|
||||||
|
|
||||||
/* no need to call getaddrinfo_with_timeout here, as we're not
|
/* No need to call getaddrinfo_with_timeout here, as we're not
|
||||||
* relying on the DNS, but we're only doing an address translation
|
resolving anything, but merely translating the address from the
|
||||||
* from presentation (ASCII) to network format */
|
presentation (ASCII) to network format. */
|
||||||
err = getaddrinfo (host, NULL, &hints, &res);
|
err = getaddrinfo (host, NULL, &hints, &res);
|
||||||
if (err == 0 && res != NULL)
|
if (err == 0 && res != NULL)
|
||||||
{
|
{
|
||||||
@ -516,7 +525,7 @@ lookup_host (const char *host, int flags)
|
|||||||
{
|
{
|
||||||
/* The return value of inet_addr is in network byte order, so
|
/* The return value of inet_addr is in network byte order, so
|
||||||
we can just copy it to IP. */
|
we can just copy it to IP. */
|
||||||
char **vec[2];
|
char *vec[2];
|
||||||
vec[0] = (char *)&addr_ipv4;
|
vec[0] = (char *)&addr_ipv4;
|
||||||
vec[1] = NULL;
|
vec[1] = NULL;
|
||||||
return address_list_from_ipv4_addresses (vec);
|
return address_list_from_ipv4_addresses (vec);
|
||||||
@ -544,25 +553,20 @@ lookup_host (const char *host, int flags)
|
|||||||
/* Host name lookup goes on below. */
|
/* Host name lookup goes on below. */
|
||||||
|
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
{
|
hints.ai_flags = 0;
|
||||||
xzero (hints);
|
if (flags & LH_PASSIVE)
|
||||||
hints.ai_family = family;
|
hints.ai_flags |= AI_PASSIVE;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
|
||||||
if (flags & LH_PASSIVE)
|
|
||||||
hints.ai_flags = AI_PASSIVE;
|
|
||||||
|
|
||||||
err = getaddrinfo_with_timeout (host, NULL, &hints, &res, opt.dns_timeout);
|
err = getaddrinfo_with_timeout (host, NULL, &hints, &res, opt.dns_timeout);
|
||||||
|
if (err != 0 || res == NULL)
|
||||||
if (err != 0 || res == NULL)
|
{
|
||||||
{
|
if (!(flags & LH_SILENT))
|
||||||
if (!(flags & LH_SILENT))
|
logprintf (LOG_VERBOSE, _("failed: %s.\n"),
|
||||||
logprintf (LOG_VERBOSE, _("failed: %s.\n"),
|
err != EAI_SYSTEM ? gai_strerror (err) : strerror (errno));
|
||||||
err != EAI_SYSTEM ? gai_strerror (err) : strerror (errno));
|
return NULL;
|
||||||
return NULL;
|
}
|
||||||
}
|
al = address_list_from_addrinfo (res);
|
||||||
al = address_list_from_addrinfo (res);
|
freeaddrinfo (res);
|
||||||
freeaddrinfo (res);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
struct hostent *hptr = gethostbyname_with_timeout (host, opt.dns_timeout);
|
struct hostent *hptr = gethostbyname_with_timeout (host, opt.dns_timeout);
|
||||||
|
@ -44,8 +44,6 @@ so, delete this exception statement from your version. */
|
|||||||
struct url;
|
struct url;
|
||||||
struct address_list;
|
struct address_list;
|
||||||
|
|
||||||
extern int ip_default_family; /* defined in host.c */
|
|
||||||
|
|
||||||
/* This struct defines an IP address, tagged with family type. */
|
/* This struct defines an IP address, tagged with family type. */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user