summaryrefslogtreecommitdiff
path: root/netaddr.c
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-25 19:29:12 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-25 19:29:12 +0000
commitca56bbdb0d398371332467534deaefdb77883bd7 (patch)
treec2d0009eccfd0d8d2e7cae9932885a7a0a6699bc /netaddr.c
parent19bd1c5e3910088ac0e92ca005427192a223c8a0 (diff)
XFree86 4.3.99.16 Bring the tree up to date for the Cygwin folksxf86-4_3_99_16
Diffstat (limited to 'netaddr.c')
-rw-r--r--netaddr.c41
1 files changed, 40 insertions, 1 deletions
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