Module: wine Branch: master Commit: 519e8db1f38f877128b86af544f7d62efd0c01b5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=519e8db1f38f877128b86af544...
Author: Juan Lang juan.lang@gmail.com Date: Sat Oct 13 16:21:20 2007 -0700
iphlpapi: Use route table to find an adapter's default gateway in GetAdaptersInfo.
---
dlls/iphlpapi/iphlpapi_main.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index eaccf83..858437d 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -678,9 +678,12 @@ DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen) else { InterfaceIndexTable *table = NULL; PMIB_IPADDRTABLE ipAddrTable = NULL; + PMIB_IPFORWARDTABLE routeTable = NULL;
ret = getIPAddrTable(&ipAddrTable, GetProcessHeap(), 0); if (!ret) + ret = getRouteTable(&routeTable, GetProcessHeap(), 0); + if (!ret) table = getNonLoopbackInterfaceIndexTable(); if (table) { size = sizeof(IP_ADAPTER_INFO) * table->numIndexes; @@ -753,6 +756,14 @@ DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen) } } } + /* Find first router through this interface, which we'll assume + * is the default gateway for this adapter */ + for (i = 0; i < routeTable->dwNumEntries; i++) + if (routeTable->table[i].dwForwardIfIndex == ptr->Index + && routeTable->table[i].dwForwardType == + MIB_IPROUTE_TYPE_INDIRECT) + toIPAddressString(routeTable->table[i].dwForwardNextHop, + ptr->GatewayList.IpAddress.String); if (winsEnabled) { ptr->HaveWins = TRUE; memcpy(ptr->PrimaryWinsServer.IpAddress.String, @@ -771,6 +782,7 @@ DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen) } else ret = ERROR_OUTOFMEMORY; + HeapFree(GetProcessHeap(), 0, routeTable); HeapFree(GetProcessHeap(), 0, ipAddrTable); } }