X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fhost.h;h=4d89ecf5a37f0a2350cd7c8633c8e41f524b45d3;hp=c3cc1e52951fd6a5a4899bf989695f686047e91d;hb=cb4003403509b46d2f6ef6936baf969906ff1430;hpb=024cb5ed3a0263775bc750b06bca74c91b389d2d diff --git a/src/host.h b/src/host.h index c3cc1e52..4d89ecf5 100644 --- a/src/host.h +++ b/src/host.h @@ -20,27 +20,71 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef HOST_H #define HOST_H +#include + +#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; + +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 +#endif + +typedef struct { + unsigned char bytes[MAX_IP_ADDRESS_SIZE]; +} ip_address; + /* Function declarations */ struct address_list *lookup_host PARAMS ((const char *, int)); char *herrmsg PARAMS ((int)); -int address_list_count PARAMS ((struct address_list *)); +void address_list_get_bounds PARAMS ((struct address_list *, int *, int *)); void address_list_copy_one PARAMS ((struct address_list *, int, - unsigned char *)); -void address_list_release PARAMS ((struct address_list *)); + 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 *)); -/* This was originally going to be a macro, but then every caller - would have to #include the netinet stuff. */ -char *pretty_print_address PARAMS ((const unsigned char *)); +char *pretty_print_address PARAMS ((ip_address *)); int accept_domain PARAMS ((struct url *)); int sufmatch PARAMS ((const char **, const char *)); void host_cleanup PARAMS ((void)); +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 */ + + #endif /* HOST_H */