return ERROR_SUCCESS;
}
+static char *debugstr_ipv4(const in_addr_t *in_addr, char *buf)
+{
+ const BYTE *addrp;
+ char *p = buf;
+
+ for (addrp = (const BYTE *)in_addr;
+ addrp - (const BYTE *)in_addr < sizeof(*in_addr);
+ addrp++)
+ {
+ if (addrp == (const BYTE *)in_addr + sizeof(*in_addr) - 1)
+ sprintf(p, "%d", *addrp);
+ else
+ {
+ int n;
+
+ sprintf(p, "%d.%n", *addrp, &n);
+ p += n;
+ }
+ }
+ return buf;
+}
+
+static char *debugstr_ipv6(const struct WS_sockaddr_in6 *sin, char *buf)
+{
+ const IN6_ADDR *addr = &sin->sin6_addr;
+ char *p = buf;
+ int i;
+ BOOL in_zero = FALSE;
+
+ for (i = 0; i < 7; i++)
+ {
+ if (!addr->u.Word[i])
+ {
+ if (i == 0)
+ *p++ = ':';
+ if (!in_zero)
+ {
+ *p++ = ':';
+ in_zero = TRUE;
+ }
+ }
+ else
+ {
+ int n;
+
+ sprintf(p, "%x:%n", ntohs(addr->u.Word[i]), &n);
+ p += n;
+ in_zero = FALSE;
+ }
+ }
+ sprintf(p, "%x", ntohs(addr->u.Word[7]));
+ return buf;
+}
+
static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADDRESSES *aa, ULONG *size)
{
ULONG ret, i, num_v4addrs = 0, num_v6addrs = 0, total_size;
*dst++ = 0;
ptr = (char *)dst;
+ TRACE("%s: %d IPv4 addresses, %d IPv6 addresses:\n", name, num_v4addrs,
+ num_v6addrs);
if (num_v4addrs)
{
IP_ADAPTER_UNICAST_ADDRESS *ua;
ua = aa->FirstUnicastAddress = (IP_ADAPTER_UNICAST_ADDRESS *)ptr;
for (i = 0; i < num_v4addrs; i++)
{
+ char addr_buf[16];
+
memset(ua, 0, sizeof(IP_ADAPTER_UNICAST_ADDRESS));
ua->u.s.Length = sizeof(IP_ADAPTER_UNICAST_ADDRESS);
ua->Address.iSockaddrLength = sizeof(struct sockaddr_in);
sa->sin_family = AF_INET;
sa->sin_addr.s_addr = v4addrs[i];
sa->sin_port = 0;
+ TRACE("IPv4 %d/%d: %s\n", i + 1, num_v4addrs,
+ debugstr_ipv4(&sa->sin_addr.s_addr, addr_buf));
ptr += ua->u.s.Length + ua->Address.iSockaddrLength;
if (i < num_v4addrs - 1)
ua = aa->FirstUnicastAddress = (IP_ADAPTER_UNICAST_ADDRESS *)ptr;
for (i = 0; i < num_v6addrs; i++)
{
+ char addr_buf[46];
+
memset(ua, 0, sizeof(IP_ADAPTER_UNICAST_ADDRESS));
ua->u.s.Length = sizeof(IP_ADAPTER_UNICAST_ADDRESS);
ua->Address.iSockaddrLength = v6addrs[i].iSockaddrLength;
sa = (struct WS_sockaddr_in6 *)ua->Address.lpSockaddr;
memcpy(sa, v6addrs[i].lpSockaddr, sizeof(*sa));
+ TRACE("IPv6 %d/%d: %s\n", i + 1, num_v6addrs,
+ debugstr_ipv6(sa, addr_buf));
ptr += ua->u.s.Length + ua->Address.iSockaddrLength;
if (i < num_v6addrs - 1)