Juan Lang : iphlpapi: Trace enumerated addresses.

Alexandre Julliard julliard at winehq.org
Fri Sep 24 11:43:42 CDT 2010


Module: wine
Branch: master
Commit: f22cf51124a03d7bf372b5b8ae16e2e0d2b6769b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f22cf51124a03d7bf372b5b8ae16e2e0d2b6769b

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Sep 16 11:11:06 2010 -0700

iphlpapi: Trace enumerated addresses.

---

 dlls/iphlpapi/iphlpapi_main.c |   64 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 493fe3f..8207ffd 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -632,6 +632,60 @@ static ULONG v4addressesFromIndex(DWORD index, DWORD **addrs, ULONG *num_addrs)
     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;
@@ -685,6 +739,8 @@ static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADD
         *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;
@@ -693,6 +749,8 @@ static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADD
             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);
@@ -702,6 +760,8 @@ static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADD
                 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)
@@ -727,6 +787,8 @@ static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADD
                 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;
@@ -734,6 +796,8 @@ static ULONG adapterAddressesFromIndex(ULONG family, DWORD index, IP_ADAPTER_ADD
 
                 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)




More information about the wine-cvs mailing list