mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-02 14:16:16 -04:00
Use Qt to read the local addresses on android
getifaddrs is not present on android and an alternative implementation crashed, use QNetworkInterface::allAddresses() to retrieve local addresses list instead This
This commit is contained in:
parent
c12cfd60b8
commit
48a9be0ccc
4 changed files with 28 additions and 672 deletions
|
@ -24,9 +24,9 @@
|
|||
*/
|
||||
|
||||
#ifdef WINDOWS_SYS
|
||||
#include "util/rswin.h"
|
||||
#include "util/rsmemory.h"
|
||||
#include <ws2tcpip.h>
|
||||
# include "util/rswin.h"
|
||||
# include "util/rsmemory.h"
|
||||
# include <ws2tcpip.h>
|
||||
#endif // WINDOWS_SYS
|
||||
|
||||
#include "pqi/pqinetwork.h"
|
||||
|
@ -271,16 +271,17 @@ int inet_aton(const char *name, struct in_addr *addr)
|
|||
|
||||
#include <sys/types.h>
|
||||
#ifdef WINDOWS_SYS
|
||||
#include <winsock2.h>
|
||||
#include <iphlpapi.h>
|
||||
#pragma comment(lib, "IPHLPAPI.lib")
|
||||
#else // WINDOWS_SYS
|
||||
#ifdef __ANDROID__
|
||||
#include "util/ifaddrs.h"
|
||||
#else // __ANDROID__
|
||||
#include <ifaddrs.h>
|
||||
#endif //__ANDROID__
|
||||
#include <net/if.h>
|
||||
# include <winsock2.h>
|
||||
# include <iphlpapi.h>
|
||||
# pragma comment(lib, "IPHLPAPI.lib")
|
||||
#elif defined(__ANDROID__)
|
||||
# include <string>
|
||||
# include <QString>
|
||||
# include <QHostAddress>
|
||||
# include <QNetworkInterface>
|
||||
#else // not __ANDROID__ nor WINDOWS => Linux and other unixes
|
||||
# include <ifaddrs.h>
|
||||
# include <net/if.h>
|
||||
#endif // WINDOWS_SYS
|
||||
|
||||
void getLocalAddressesFailed()
|
||||
|
@ -323,7 +324,15 @@ bool getLocalAddresses(std::list<sockaddr_storage> & addrs)
|
|||
}
|
||||
}
|
||||
free(adapter_addresses);
|
||||
#else // WINDOWS_SYS
|
||||
#elif defined(__ANDROID__)
|
||||
foreach(QHostAddress qAddr, QNetworkInterface::allAddresses())
|
||||
{
|
||||
sockaddr_storage tmpAddr;
|
||||
sockaddr_storage_clear(tmpAddr);
|
||||
if(sockaddr_storage_ipv4_aton(tmpAddr, qAddr.toString().toStdString().c_str()))
|
||||
addrs.push_back(tmpAddr);
|
||||
}
|
||||
#else // not WINDOWS_SYS not ANDROID => Linux and other unixes
|
||||
struct ifaddrs *ifsaddrs, *ifa;
|
||||
if(getifaddrs(&ifsaddrs) != 0) getLocalAddressesFailed();
|
||||
for ( ifa = ifsaddrs; ifa; ifa = ifa->ifa_next )
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue