From ca56bbdb0d398371332467534deaefdb77883bd7 Mon Sep 17 00:00:00 2001 From: Kaleb Keithley Date: Tue, 25 Nov 2003 19:29:12 +0000 Subject: XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folks --- netaddr.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'netaddr.c') diff --git a/netaddr.c b/netaddr.c index 02cde08..776e23a 100644 --- a/netaddr.c +++ b/netaddr.c @@ -26,7 +26,7 @@ other dealings in this Software without prior written authorization from The Open Group. */ -/* $XFree86: xc/programs/xdm/netaddr.c,v 3.6 2001/12/14 20:01:22 dawes Exp $ */ +/* $XFree86: xc/programs/xdm/netaddr.c,v 3.8 2003/07/18 15:53:28 tsi Exp $ */ /* * xdm - X display manager @@ -85,6 +85,11 @@ char * NetaddrPort(XdmcpNetaddr netaddrp, int *lenp) case AF_INET: *lenp = 2; return (char *)&(((struct sockaddr_in *)netaddrp)->sin_port); +#if defined(IPv6) && defined(AF_INET6) + case AF_INET6: + *lenp = 2; + return (char *)&(((struct sockaddr_in6 *)netaddrp)->sin6_port); +#endif default: *lenp = 0; return NULL; @@ -112,6 +117,19 @@ char * NetaddrAddress(XdmcpNetaddr netaddrp, int *lenp) case AF_INET: *lenp = sizeof (struct in_addr); return (char *) &(((struct sockaddr_in *)netaddrp)->sin_addr); +#if defined(IPv6) && defined(AF_INET6) + case AF_INET6: + { + struct in6_addr *a = &(((struct sockaddr_in6 *)netaddrp)->sin6_addr); + if (IN6_IS_ADDR_V4MAPPED(a)) { + *lenp = sizeof (struct in_addr); + return ((char *) &(a->s6_addr))+12; + } else { + *lenp = sizeof (struct in6_addr); + return (char *) &(a->s6_addr); + } + } +#endif #endif #ifdef DNETCONN case AF_DECnet: @@ -163,6 +181,14 @@ int ConvertAddr (XdmcpNetaddr saddr, int *len, char **addr) case AF_INET: retval = FamilyInternet; break; +#if defined(IPv6) && defined(AF_INET6) + case AF_INET6: + if (*len == sizeof(struct in_addr)) + retval = FamilyInternet; + else + retval = FamilyInternet6; + break; +#endif #endif #ifdef DNETCONN case AF_DECnet: @@ -231,8 +257,21 @@ PrintSockAddr (struct sockaddr *a, int len) Debug ("port %d, host %d.%d.%d.%d\n", (p[0] << 8) + p[1], t[0], t[1], t[2], t[3]); break; +#endif +#if defined(IPv6) && defined(AF_INET6) + case AF_INET6: + { + char astr[INET6_ADDRSTRLEN] = ""; + + inet_ntop(a->sa_family, &((struct sockaddr_in6 *) a)->sin6_addr, + astr, sizeof(astr)); + p = (unsigned char *) &((struct sockaddr_in6 *) a)->sin6_port; + + Debug ("port %d, host %s\n", (p[0] << 8) + p[1], astr); + break; } #endif + } } #endif -- cgit v1.2.3