|
@@ -514,6 +514,37 @@ namespace MACAddressHelpers |
|
|
split[1] = sa_in6->sin6_addr.u.Byte[off];
|
|
|
split[1] = sa_in6->sin6_addr.u.Byte[off];
|
|
|
#endif
|
|
|
#endif
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static IPAddress createAddress (const sockaddr_in6* sa_in6)
|
|
|
|
|
|
{
|
|
|
|
|
|
IPAddressByteUnion temp;
|
|
|
|
|
|
uint16 arr[8];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
split (sa_in6, i * 2, temp.split);
|
|
|
|
|
|
arr[i] = temp.combined;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return IPAddress (arr);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static IPAddress createAddress (const sockaddr_in* sa_in)
|
|
|
|
|
|
{
|
|
|
|
|
|
return IPAddress ((uint8*) &sa_in->sin_addr.s_addr, false);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
template <typename Type>
|
|
|
|
|
|
static void findAddresses (Array<IPAddress>& result, bool includeIPv6, Type start)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (auto addr = start; addr != nullptr; addr = addr->Next)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (addr->Address.lpSockaddr->sa_family == AF_INET)
|
|
|
|
|
|
result.addIfNotAlreadyThere (createAddress ((sockaddr_in*) addr->Address.lpSockaddr));
|
|
|
|
|
|
else if (addr->Address.lpSockaddr->sa_family == AF_INET6 && includeIPv6)
|
|
|
|
|
|
result.addIfNotAlreadyThere (createAddress ((sockaddr_in6*) addr->Address.lpSockaddr));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void MACAddress::findAllAddresses (Array<MACAddress>& result)
|
|
|
void MACAddress::findAllAddresses (Array<MACAddress>& result)
|
|
@@ -530,90 +561,14 @@ void IPAddress::findAllAddresses (Array<IPAddress>& result, bool includeIPv6) |
|
|
result.addIfNotAlreadyThere (IPAddress::local (true));
|
|
|
result.addIfNotAlreadyThere (IPAddress::local (true));
|
|
|
|
|
|
|
|
|
GetAdaptersAddressesHelper addressesHelper;
|
|
|
GetAdaptersAddressesHelper addressesHelper;
|
|
|
|
|
|
|
|
|
if (addressesHelper.callGetAdaptersAddresses())
|
|
|
if (addressesHelper.callGetAdaptersAddresses())
|
|
|
{
|
|
|
{
|
|
|
for (PIP_ADAPTER_ADDRESSES adapter = addressesHelper.adaptersAddresses; adapter != nullptr; adapter = adapter->Next)
|
|
|
for (PIP_ADAPTER_ADDRESSES adapter = addressesHelper.adaptersAddresses; adapter != nullptr; adapter = adapter->Next)
|
|
|
{
|
|
|
{
|
|
|
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = nullptr;
|
|
|
|
|
|
for (pUnicast = adapter->FirstUnicastAddress; pUnicast != nullptr; pUnicast = pUnicast->Next)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pUnicast->Address.lpSockaddr->sa_family == AF_INET)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in* sa_in = (sockaddr_in*)pUnicast->Address.lpSockaddr;
|
|
|
|
|
|
IPAddress ip ((uint8*)&sa_in->sin_addr.s_addr, false);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (pUnicast->Address.lpSockaddr->sa_family == AF_INET6 && includeIPv6)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in6* sa_in6 = (sockaddr_in6*)pUnicast->Address.lpSockaddr;
|
|
|
|
|
|
|
|
|
|
|
|
ByteUnion temp;
|
|
|
|
|
|
uint16 arr[8];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
MACAddressHelpers::split (sa_in6, i * 2, temp.split);
|
|
|
|
|
|
arr[i] = temp.combined;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
IPAddress ip (arr);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PIP_ADAPTER_ANYCAST_ADDRESS pAnycast = nullptr;
|
|
|
|
|
|
for (pAnycast = adapter->FirstAnycastAddress; pAnycast != nullptr; pAnycast = pAnycast->Next)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pAnycast->Address.lpSockaddr->sa_family == AF_INET)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in* sa_in = (sockaddr_in*)pAnycast->Address.lpSockaddr;
|
|
|
|
|
|
IPAddress ip ((uint8*)&sa_in->sin_addr.s_addr, false);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (pAnycast->Address.lpSockaddr->sa_family == AF_INET6 && includeIPv6)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in6* sa_in6 = (sockaddr_in6*)pAnycast->Address.lpSockaddr;
|
|
|
|
|
|
|
|
|
|
|
|
ByteUnion temp;
|
|
|
|
|
|
uint16 arr[8];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
MACAddressHelpers::split (sa_in6, i * 2, temp.split);
|
|
|
|
|
|
arr[i] = temp.combined;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
IPAddress ip (arr);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
PIP_ADAPTER_MULTICAST_ADDRESS pMulticast = nullptr;
|
|
|
|
|
|
for (pMulticast = adapter->FirstMulticastAddress; pMulticast != nullptr; pMulticast = pMulticast->Next)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (pMulticast->Address.lpSockaddr->sa_family == AF_INET)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in* sa_in = (sockaddr_in*)pMulticast->Address.lpSockaddr;
|
|
|
|
|
|
IPAddress ip ((uint8*)&sa_in->sin_addr.s_addr, false);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (pMulticast->Address.lpSockaddr->sa_family == AF_INET6 && includeIPv6)
|
|
|
|
|
|
{
|
|
|
|
|
|
const sockaddr_in6* sa_in6 = (sockaddr_in6*)pMulticast->Address.lpSockaddr;
|
|
|
|
|
|
|
|
|
|
|
|
ByteUnion temp;
|
|
|
|
|
|
uint16 arr[8];
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; ++i)
|
|
|
|
|
|
{
|
|
|
|
|
|
MACAddressHelpers::split (sa_in6, i * 2, temp.split);
|
|
|
|
|
|
arr[i] = temp.combined;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
IPAddress ip (arr);
|
|
|
|
|
|
result.addIfNotAlreadyThere (ip);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
MACAddressHelpers::findAddresses (result, includeIPv6, adapter->FirstUnicastAddress);
|
|
|
|
|
|
MACAddressHelpers::findAddresses (result, includeIPv6, adapter->FirstAnycastAddress);
|
|
|
|
|
|
MACAddressHelpers::findAddresses (result, includeIPv6, adapter->FirstMulticastAddress);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -621,7 +576,7 @@ void IPAddress::findAllAddresses (Array<IPAddress>& result, bool includeIPv6) |
|
|
IPAddress IPAddress::getInterfaceBroadcastAddress (const IPAddress&)
|
|
|
IPAddress IPAddress::getInterfaceBroadcastAddress (const IPAddress&)
|
|
|
{
|
|
|
{
|
|
|
// TODO
|
|
|
// TODO
|
|
|
return IPAddress {};
|
|
|
|
|
|
|
|
|
return {};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|