X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fhost.h;h=03b88c8186f3969f1a12c4b34ca91d4c0b0ff3c1;hb=4d7c5e087b2bc82c9f503dff003916d1047903ce;hp=7790c8b86f5f59ff45d409823ff83c5babb64688;hpb=615ae382f98c6c285edf5ac6f0c3d92214c6a1c5;p=wget diff --git a/src/host.h b/src/host.h index 7790c8b8..03b88c81 100644 --- a/src/host.h +++ b/src/host.h @@ -1,11 +1,11 @@ /* Declarations for host.c - Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc. + Copyright (C) 1996-2006 Free Software Foundation, Inc. This file is part of GNU Wget. GNU Wget is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or +the Free Software Foundation; either version 3 of the License, or (at your option) any later version. GNU Wget is distributed in the hope that it will be useful, @@ -14,8 +14,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Wget; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +along with Wget. If not, see . In addition, as a special exception, the Free Software Foundation gives permission to link the code of its release of Wget with the @@ -47,70 +46,54 @@ struct address_list; /* This struct defines an IP address, tagged with family type. */ typedef struct { - /* Address type. */ - enum { - IPV4_ADDRESS, -#ifdef ENABLE_IPV6 - IPV6_ADDRESS -#endif /* ENABLE_IPV6 */ - } type; + /* Address family, one of AF_INET or AF_INET6. */ + int family; - /* Address data union: ipv6 contains IPv6-related data (address and - scope), and ipv4 contains the IPv4 address. */ + /* The actual data, in the form of struct in_addr or in6_addr: */ union { + struct in_addr d4; /* IPv4 address */ #ifdef ENABLE_IPV6 - struct { - struct in6_addr addr; -# ifdef HAVE_SOCKADDR_IN6_SCOPE_ID - unsigned int scope_id; -# endif - } ipv6; -#endif /* ENABLE_IPV6 */ - struct { - struct in_addr addr; - } ipv4; - } u; -} ip_address; - -/* Because C doesn't support anonymous unions, access to ip_address - elements is unwieldy. Hence the accessors. - - The _ADDR accessors return the address as the struct in_addr or - in6_addr. The _DATA accessor returns a pointer to the address data - -- pretty much the same as the above, but cast to void*. The - _SCOPE accessor returns the address's scope_id, and makes sense - only when IPv6 and HAVE_SOCKADDR_IN6_SCOPE_ID are both defined. */ - -#define ADDRESS_IPV4_IN_ADDR(x) ((x)->u.ipv4.addr) -/* Don't use &x->u.ipv4.addr.s_addr because it can be #defined to a - bitfield, which you can't take an address of. */ -#define ADDRESS_IPV4_DATA(x) ((void *)&(x)->u.ipv4.addr) - -#define ADDRESS_IPV6_IN6_ADDR(x) ((x)->u.ipv6.addr) -#define ADDRESS_IPV6_DATA(x) ((void *)&(x)->u.ipv6.addr) -#define ADDRESS_IPV6_SCOPE(x) ((x)->u.ipv6.scope_id) - -/* Function declarations */ -struct address_list *lookup_host PARAMS ((const char *, int)); -struct address_list *lookup_host_passive PARAMS ((const char *)); - -void forget_host_lookup PARAMS ((const char *)); + struct in6_addr d6; /* IPv6 address */ +#endif + } data; -void address_list_get_bounds PARAMS ((const struct address_list *, - int *, int *)); -const ip_address *address_list_address_at PARAMS ((const struct address_list *, - int)); -int address_list_find PARAMS ((const struct address_list *, const ip_address *)); -void address_list_set_faulty PARAMS ((struct address_list *, int)); -void address_list_set_connected PARAMS ((struct address_list *)); -int address_list_connected_p PARAMS ((const struct address_list *)); -void address_list_release PARAMS ((struct address_list *)); + /* Under IPv6 getaddrinfo also returns scope_id. Since it's + IPv6-specific it strictly belongs in the above union, but we put + it here for simplicity. */ +#if defined ENABLE_IPV6 && defined HAVE_SOCKADDR_IN6_SCOPE_ID + int ipv6_scope; +#endif +} ip_address; -const char *pretty_print_address PARAMS ((const ip_address *)); +/* IP_INADDR_DATA macro returns a void pointer that can be interpreted + as a pointer to struct in_addr in IPv4 context or a pointer to + struct in6_addr in IPv4 context. This pointer can be passed to + functions that work on either, such as inet_ntop. */ +#define IP_INADDR_DATA(x) ((void *) &(x)->data) + +enum { + LH_SILENT = 1, + LH_BIND = 2, + LH_REFRESH = 4 +}; +struct address_list *lookup_host (const char *, int); + +void address_list_get_bounds (const struct address_list *, int *, int *); +const ip_address *address_list_address_at (const struct address_list *, int); +bool address_list_contains (const struct address_list *, const ip_address *); +void address_list_set_faulty (struct address_list *, int); +void address_list_set_connected (struct address_list *); +bool address_list_connected_p (const struct address_list *); +void address_list_release (struct address_list *); + +const char *print_address (const ip_address *); +#ifdef ENABLE_IPV6 +bool is_valid_ipv6_address (const char *, const char *); +#endif -int accept_domain PARAMS ((struct url *)); -int sufmatch PARAMS ((const char **, const char *)); +bool accept_domain (struct url *); +bool sufmatch (const char **, const char *); -void host_cleanup PARAMS ((void)); +void host_cleanup (void); #endif /* HOST_H */