mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-11 23:54:18 +00:00
DRYed some IPAddress code
This commit is contained in:
parent
7b23dfe473
commit
7ea87b4bc5
2 changed files with 41 additions and 93 deletions
|
|
@ -30,15 +30,9 @@ namespace
|
|||
if (addr_in == nullptr)
|
||||
return {};
|
||||
|
||||
in6_addr addr = addr_in->sin6_addr;
|
||||
auto addr = addr_in->sin6_addr;
|
||||
|
||||
union ByteUnion
|
||||
{
|
||||
uint16 combined;
|
||||
uint8 split[2];
|
||||
};
|
||||
|
||||
ByteUnion temp;
|
||||
IPAddressByteUnion temp;
|
||||
uint16 arr[8];
|
||||
|
||||
for (int i = 0; i < 8; ++i) // Swap bytes from network to host order
|
||||
|
|
@ -62,8 +56,7 @@ namespace
|
|||
|
||||
struct InterfaceInfo
|
||||
{
|
||||
IPAddress interfaceAddress;
|
||||
IPAddress broadcastAddress;
|
||||
IPAddress interfaceAddress, broadcastAddress;
|
||||
};
|
||||
|
||||
bool operator== (const InterfaceInfo& lhs, const InterfaceInfo& rhs)
|
||||
|
|
@ -78,8 +71,8 @@ namespace
|
|||
{
|
||||
if (ifa->ifa_addr->sa_family == AF_INET)
|
||||
{
|
||||
auto* interfaceAddressInfo = (sockaddr_in*) ifa->ifa_addr;
|
||||
auto* broadcastAddressInfo = (sockaddr_in*) ifa->ifa_dstaddr;
|
||||
auto interfaceAddressInfo = (sockaddr_in*) ifa->ifa_addr;
|
||||
auto broadcastAddressInfo = (sockaddr_in*) ifa->ifa_dstaddr;
|
||||
|
||||
if (interfaceAddressInfo->sin_addr.s_addr != INADDR_NONE)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -514,6 +514,37 @@ namespace MACAddressHelpers
|
|||
split[1] = sa_in6->sin6_addr.u.Byte[off];
|
||||
#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)
|
||||
|
|
@ -530,90 +561,14 @@ void IPAddress::findAllAddresses (Array<IPAddress>& result, bool includeIPv6)
|
|||
result.addIfNotAlreadyThere (IPAddress::local (true));
|
||||
|
||||
GetAdaptersAddressesHelper addressesHelper;
|
||||
|
||||
if (addressesHelper.callGetAdaptersAddresses())
|
||||
{
|
||||
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&)
|
||||
{
|
||||
// TODO
|
||||
return IPAddress {};
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue