X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fhost.h;h=4d89ecf5a37f0a2350cd7c8633c8e41f524b45d3;hp=f99c636c2ae788a3bf374eddcf7c068cfcd7060a;hb=cb4003403509b46d2f6ef6936baf969906ff1430;hpb=e59a7ee8ac8a7e31a52ade02cfdb54d341e2bec1 diff --git a/src/host.h b/src/host.h index f99c636c..4d89ecf5 100644 --- a/src/host.h +++ b/src/host.h @@ -20,28 +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)); void address_list_get_bounds PARAMS ((struct address_list *, int *, int *)); void address_list_copy_one PARAMS ((struct address_list *, int, - unsigned char *)); + 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 void *)); +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 */