X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fhost.h;h=84f3d137f092f7086e259828e0635203ec4f18ba;hp=3ca6af48bcfab409c56252b5d288984bc0447bd0;hb=HEAD;hpb=667d4949783a20006082acd91f26e824c343b2ab diff --git a/src/host.h b/src/host.h index 3ca6af48..84f3d137 100644 --- a/src/host.h +++ b/src/host.h @@ -1,12 +1,14 @@ /* 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 -(at your option) any later version. +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, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -14,17 +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. */ +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 -#include - #ifdef WINDOWS -# include +# include #else +# ifdef __VMS +# include "vms_ip.h" +# else /* def __VMS */ +# include +# endif /* def __VMS [else] */ # include # include #ifndef __BEOS__ @@ -32,69 +47,62 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #endif #endif -#undef INET6 - struct url; struct address_list; -/* wget_sockaddr is used instead of sockaddr where an IPV6 address - must fit. */ - -typedef union { - struct sockaddr sa; /* Generic but too small */ - struct sockaddr_in sin; /* IPv4 socket address */ -#ifdef INET6 - struct sockaddr_in6 sin6; /* IPv6 socket address */ -#endif -} wget_sockaddr; +/* This struct defines an IP address, tagged with family type. */ typedef struct { - unsigned char bytes[4]; -} ip4_address; - -/* If compiled with IPv6 support, we internally represent all IP - addresses as IPv6 addresses. IPv4 addresses are dynamically mapped - to IPv6, i.e. stored in the format ::ffff:. */ - -#ifdef INET6 -# define MAX_IP_ADDRESS_SIZE 16 -#else -# define MAX_IP_ADDRESS_SIZE 4 + /* Address family, one of AF_INET or AF_INET6. */ + int family; + + /* The actual data, in the form of struct in_addr or in6_addr: */ + union { + struct in_addr d4; /* IPv4 address */ +#ifdef ENABLE_IPV6 + struct in6_addr d6; /* IPv6 address */ #endif + } data; -typedef struct { - unsigned char bytes[MAX_IP_ADDRESS_SIZE]; + /* 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; -/* Function declarations */ -struct address_list *lookup_host PARAMS ((const char *, int)); -char *herrmsg PARAMS ((int)); - -void address_list_get_bounds PARAMS ((struct address_list *, int *, int *)); -void address_list_copy_one PARAMS ((struct address_list *, int, - ip_address *)); -int address_list_match_all PARAMS ((struct address_list *, - struct address_list *)); -void address_list_set_faulty PARAMS ((struct address_list *, int)); -void address_list_release PARAMS ((struct address_list *)); - -char *pretty_print_address PARAMS ((ip_address *)); - -int accept_domain PARAMS ((struct url *)); -int sufmatch PARAMS ((const char **, const char *)); +/* 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 -void host_cleanup PARAMS ((void)); +bool is_valid_ip_address (const char *name); -void wget_sockaddr_set_address PARAMS((wget_sockaddr *, int, - unsigned short, ip_address *)); -void wget_sockaddr_set_port PARAMS((wget_sockaddr *, unsigned short)); -void *wget_sockaddr_get_addr PARAMS((wget_sockaddr *)); -unsigned short wget_sockaddr_get_port PARAMS((const wget_sockaddr *)); -int sockaddr_len PARAMS(()); -void map_ipv4_to_ip PARAMS((ip4_address *, ip_address *)); -int map_ip_to_ipv4 PARAMS((ip_address *, ip4_address *)); - -extern int ip_default_family; /* defined in host.c */ +bool accept_domain (struct url *); +bool sufmatch (const char **, const char *); +void host_cleanup (void); #endif /* HOST_H */