aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalP <crystalp@kodi.tv>2024-05-04 12:52:54 -0400
committerGitHub <noreply@github.com>2024-05-04 12:52:54 -0400
commit08948981a77af5856b9a6d925e718e2277e75688 (patch)
tree73fe6d2d9f70b76db3dddbe9622a8148526a8450
parent0db97ab49b85b7ea52a59ae20b7cd5e117a64cdc (diff)
parent3758c6f774c27244f850008738b56218914fb910 (diff)
downloadxbmc-08948981a77af5856b9a6d925e718e2277e75688.tar.xz
Merge pull request #25111 from CrystalP/fix-macdiscovery
[Windows] Fix Discovery of MAC Address
-rw-r--r--xbmc/platform/win32/network/NetworkWin32.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/xbmc/platform/win32/network/NetworkWin32.cpp b/xbmc/platform/win32/network/NetworkWin32.cpp
index f87056134b..2dee878a9d 100644
--- a/xbmc/platform/win32/network/NetworkWin32.cpp
+++ b/xbmc/platform/win32/network/NetworkWin32.cpp
@@ -248,7 +248,7 @@ bool CNetworkWin32::PingHost(const struct sockaddr& host, unsigned int timeout_m
bool CNetworkInterfaceWin32::GetHostMacAddress(unsigned long host, std::string& mac) const
{
- struct sockaddr sockHost;
+ sockaddr sockHost{};
sockHost.sa_family = AF_INET;
reinterpret_cast<struct sockaddr_in&>(sockHost).sin_addr.S_un.S_addr = host;
return GetHostMacAddress(&sockHost, mac);
@@ -260,33 +260,38 @@ bool CNetworkInterfaceWin32::GetHostMacAddress(struct sockaddr* host, std::strin
if (GetBestInterfaceEx(host, &InterfaceIndex) != NO_ERROR)
return false;
- NET_LUID luid = {};
+ NET_LUID luid{};
if (ConvertInterfaceIndexToLuid(InterfaceIndex, &luid) != NO_ERROR)
return false;
- MIB_IPNET_ROW2 neighborIp = {};
+ MIB_IPNET_ROW2 neighborIp{};
neighborIp.InterfaceLuid = luid;
- neighborIp.InterfaceIndex;
- neighborIp.Address.si_family = host->sa_family;
switch (host->sa_family)
{
case AF_INET:
- neighborIp.Address.Ipv4 = reinterpret_cast<const struct sockaddr_in&>(host);
+ memcpy(&neighborIp.Address.Ipv4, host, sizeof(sockaddr_in));
break;
case AF_INET6:
- neighborIp.Address.Ipv6 = reinterpret_cast<const struct sockaddr_in6&>(host);
+ memcpy(&neighborIp.Address.Ipv6, host, sizeof(sockaddr_in6));
break;
default:
return false;
}
- DWORD dwRetVal = ResolveIpNetEntry2(&neighborIp, nullptr);
+ DWORD dwRetVal = GetIpNetEntry2(&neighborIp);
+
+ if (dwRetVal != NO_ERROR)
+ {
+ CLog::LogF(LOGDEBUG, "Host not found in the cache (error {}), resolve the address.", dwRetVal);
+ dwRetVal = ResolveIpNetEntry2(&neighborIp, nullptr);
+ }
if (dwRetVal != NO_ERROR)
{
CLog::LogF(LOGERROR, "ResolveIpNetEntry2 failed with error ({})", dwRetVal);
return false;
}
+
if (neighborIp.PhysicalAddressLength < MAC_LENGTH)
{
CLog::LogF(LOGERROR,