Browse Source

Fixed a compiler error when building for Android in recently added IPv6 address support

tags/2021-05-28
hogliux 8 years ago
parent
commit
5cdd316934
2 changed files with 60 additions and 1 deletions
  1. +59
    -0
      modules/juce_core/native/juce_android_Network.cpp
  2. +1
    -1
      modules/juce_core/network/juce_IPAddress.cpp

+ 59
- 0
modules/juce_core/native/juce_android_Network.cpp View File

@@ -238,3 +238,62 @@ URL::DownloadTask* URL::downloadToFile (const File& targetLocation, String extra
{
return URL::DownloadTask::createFallbackDownloader (*this, targetLocation, extraHeaders, listener);
}
//==============================================================================
static void addAddress (const sockaddr_in* addr_in, Array<IPAddress>& result)
{
in_addr_t addr = addr_in->sin_addr.s_addr;
if (addr != INADDR_NONE)
result.addIfNotAlreadyThere (IPAddress (ntohl (addr)));
}
static void findIPAddresses (int sock, Array<IPAddress>& result)
{
ifconf cfg;
HeapBlock<char> buffer;
int bufferSize = 1024;
do
{
bufferSize *= 2;
buffer.calloc ((size_t) bufferSize);
cfg.ifc_len = bufferSize;
cfg.ifc_buf = buffer;
if (ioctl (sock, SIOCGIFCONF, &cfg) < 0 && errno != EINVAL)
return;
} while (bufferSize < cfg.ifc_len + 2 * (int) (IFNAMSIZ + sizeof (struct sockaddr_in6)));
#if JUCE_MAC || JUCE_IOS
while (cfg.ifc_len >= (int) (IFNAMSIZ + sizeof (struct sockaddr_in)))
{
if (cfg.ifc_req->ifr_addr.sa_family == AF_INET) // Skip non-internet addresses
addAddress ((const sockaddr_in*) &cfg.ifc_req->ifr_addr, result);
cfg.ifc_len -= IFNAMSIZ + cfg.ifc_req->ifr_addr.sa_len;
cfg.ifc_buf += IFNAMSIZ + cfg.ifc_req->ifr_addr.sa_len;
}
#else
for (size_t i = 0; i < (size_t) cfg.ifc_len / (size_t) sizeof (struct ifreq); ++i)
{
const ifreq& item = cfg.ifc_req[i];
if (item.ifr_addr.sa_family == AF_INET)
addAddress ((const sockaddr_in*) &item.ifr_addr, result);
}
#endif
}
void IPAddress::findAllAddresses (Array<IPAddress>& result, bool /*includeIPv6*/)
{
const int sock = socket (AF_INET, SOCK_DGRAM, 0); // a dummy socket to execute the IO control
if (sock >= 0)
{
findIPAddresses (sock, result);
::close (sock);
}
}

+ 1
- 1
modules/juce_core/network/juce_IPAddress.cpp View File

@@ -251,7 +251,7 @@ bool IPAddress::operator!= (const IPAddress& other) const noexcept
return ! operator== (other);
}
#if ! JUCE_WINDOWS
#if (! JUCE_WINDOWS) && (! JUCE_ANDROID)
static void addAddress (const sockaddr_in* addr_in, Array<IPAddress>& result)
{
in_addr_t addr = addr_in->sin_addr.s_addr;


Loading…
Cancel
Save