Add doc to load_ex_ip_helper_procedures().
[platform/upstream/dbus.git] / dbus / dbus-sysdeps-win.c
index aa0f97e..3c46bd1 100644 (file)
@@ -116,6 +116,11 @@ typedef PMIB_TCPTABLE_OWNER_PID PMIB_TCPTABLE_EX;
 typedef DWORD (WINAPI *ProcAllocateAndGetTcpExtTableFromStack)(PMIB_TCPTABLE_EX*,BOOL,HANDLE,DWORD,DWORD);
 static ProcAllocateAndGetTcpExtTableFromStack lpfnAllocateAndGetTcpExTableFromStack = NULL;
 
+/**
+ * AllocateAndGetTcpExTableFromStack() is undocumented and not exported,
+ * but is the only way to do this in older XP versions.
+ * @return true if the procedures could be loaded
+ */
 static BOOL load_ex_ip_helper_procedures(void)
 {
     HMODULE hModule = LoadLibrary ("iphlpapi.dll");
@@ -208,7 +213,8 @@ _dbus_get_peer_pid_from_tcp_handle (int handle)
       for (dwSize = 0; dwSize < lpBuffer->dwNumEntries; dwSize++)
         {
           int local_port = ntohs (lpBuffer->table[dwSize].dwLocalPort);
-          if (local_port == peer_port)
+          int local_address = ntohl (lpBuffer->table[dwSize].dwLocalAddr);
+          if (local_address == INADDR_LOOPBACK && local_port == peer_port)
             {
               result = lpBuffer->table[dwSize].dwOwningPid;
               break;
@@ -244,8 +250,10 @@ _dbus_get_peer_pid_from_tcp_handle (int handle)
   for (i = 0; i < tcp_table->dwNumEntries; i++)
     {
       MIB_TCPROW_OWNER_PID *p = &tcp_table->table[i];
+      int local_address = ntohl (p->dwLocalAddr);
       int local_port = ntohs (p->dwLocalPort);
-      if (p->dwState == MIB_TCP_STATE_ESTAB && local_port == peer_port)
+      if (p->dwState == MIB_TCP_STATE_ESTAB
+          && local_address == INADDR_LOOPBACK && local_port == peer_port)
         result = p->dwOwningPid;
     }