X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fhost.h;h=84f3d137f092f7086e259828e0635203ec4f18ba;hp=d2293dacfae079e88197e24bfb1f22cd322a1cf3;hb=HEAD;hpb=6f1250b1c6a9e9a01cc378e668e38b65739e3e8f diff --git a/src/host.h b/src/host.h index d2293dac..84f3d137 100644 --- a/src/host.h +++ b/src/host.h @@ -1,11 +1,13 @@ /* Declarations for host.c - Copyright (C) 1995, 1996, 1997, 2001 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 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,26 +16,30 @@ 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. - -In addition, as a special exception, the Free Software Foundation -gives permission to link the code of its release of Wget with the -OpenSSL project's "OpenSSL" library (or with modified versions of it -that use the same license as the "OpenSSL" library), and distribute -the linked executables. You must obey the GNU General Public License -in all respects for all of the code used other than "OpenSSL". If you -modify this file, you may extend this exception to your version of the -file, but you are not obligated to do so. If you do not wish to do -so, delete this exception statement from your version. */ +along with Wget. If not, see . + +Additional permission under GNU GPL version 3 section 7 + +If you modify this program, or any covered work, by linking or +combining it with the OpenSSL project's OpenSSL library (or a +modified version of that library), containing parts covered by the +terms of the OpenSSL or SSLeay licenses, the Free Software Foundation +grants you additional permission to convey the resulting work. +Corresponding Source for a non-source form of such a combination +shall include the source code for the parts of OpenSSL used as well +as that of the covered work. */ #ifndef HOST_H #define HOST_H #ifdef WINDOWS -# include +# include #else -# include +# ifdef __VMS +# include "vms_ip.h" +# else /* def __VMS */ +# include +# endif /* def __VMS [else] */ # include # include #ifndef __BEOS__ @@ -44,83 +50,59 @@ so, delete this exception statement from your version. */ struct url; struct address_list; -extern int ip_default_family; /* defined in host.c */ - /* 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 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 /* HAVE_SOCKADDR_IN6_SCOPE_ID */ - } ipv6; -#endif /* ENABLE_IPV6 */ - struct { - struct in_addr addr; - } ipv4; - } u; + struct in6_addr d6; /* IPv6 address */ +#endif + } data; + + /* 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; -/* Because C doesn't support anonymous unions, access to ip_address - elements is clunky. Hence the accessors. */ - -#define ADDRESS_IPV6_IN6_ADDR(x) ((x)->u.ipv6.addr) -#define ADDRESS_IPV6_DATA(x) ((void *)&(x)->u.ipv6.addr.s6_addr) -#define ADDRESS_IPV6_SCOPE(x) ((x)->u.ipv6.scope_id) - -#define ADDRESS_IPV4_IN_ADDR(x) ((x)->u.ipv4.addr) -#define ADDRESS_IPV4_DATA(x) ((void *)&(x)->u.ipv4.addr.s_addr) - -#ifndef ENABLE_IPV6 -# ifndef HAVE_SOCKADDR_STORAGE -# define sockaddr_storage sockaddr_in -# endif -#endif /* ENABLE_IPV6 */ - -/* Flags for lookup_host */ -#define LH_SILENT 0x0001 -#define LH_PASSIVE 0x0002 -#define LH_IPV4_ONLY 0x0004 -#define LH_IPV6_ONLY 0x0008 - -/* Function declarations */ -struct address_list *lookup_host PARAMS ((const char *, int)); -char *herrmsg PARAMS ((int)); - -void address_list_get_bounds PARAMS ((const struct address_list *, - int *, int *)); -void address_list_copy_one PARAMS ((const struct address_list *, int, - ip_address *)); -int address_list_match_all PARAMS ((const struct address_list *, - const struct address_list *)); -void address_list_set_faulty PARAMS ((struct address_list *, int)); -void address_list_release PARAMS ((struct address_list *)); - -const char *pretty_print_address PARAMS ((const ip_address *)); - -int accept_domain PARAMS ((struct url *)); -int sufmatch PARAMS ((const char **, const char *)); - -void sockaddr_set_address PARAMS ((struct sockaddr *, unsigned short, - const ip_address *)); -void sockaddr_get_address PARAMS ((const struct sockaddr *, unsigned short *, - ip_address *)); -unsigned short sockaddr_get_port PARAMS ((const struct sockaddr *)); -socklen_t sockaddr_len PARAMS ((const struct sockaddr *sa)); - -void host_cleanup PARAMS ((void)); +/* 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 + +bool is_valid_ip_address (const char *name); + +bool accept_domain (struct url *); +bool sufmatch (const char **, const char *); + +void host_cleanup (void); #endif /* HOST_H */