diff options
Diffstat (limited to 'drivers/unix/ip_unix.cpp')
-rw-r--r-- | drivers/unix/ip_unix.cpp | 114 |
1 files changed, 55 insertions, 59 deletions
diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp index fc0b3faccc..0a26b5bbba 100644 --- a/drivers/unix/ip_unix.cpp +++ b/drivers/unix/ip_unix.cpp @@ -33,60 +33,61 @@ #include <string.h> #ifdef WINDOWS_ENABLED - #include <ws2tcpip.h> - #include <winsock2.h> - #include <windows.h> - #include <stdio.h> - #ifndef UWP_ENABLED - #if defined(__MINGW32__ ) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4) - // MinGW-w64 on Ubuntu 12.04 (our Travis build env) has bugs in this code where - // some includes are missing in dependencies of iphlpapi.h for WINVER >= 0x0600 (Vista). - // We don't use this Vista code for now, so working it around by disabling it. - // MinGW-w64 >= 4.0 seems to be better judging by its headers. - #undef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 // Windows XP, disable Vista API - #include <iphlpapi.h> - #undef _WIN32_WINNT - #define _WIN32_WINNT 0x0600 // Reenable Vista API - #else - #include <iphlpapi.h> - #endif // MINGW hack - #endif +#include <stdio.h> +#include <winsock2.h> +// Needs to be included after winsocks2.h +#include <windows.h> +#include <ws2tcpip.h> +#ifndef UWP_ENABLED +#if defined(__MINGW32__) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 4) +// MinGW-w64 on Ubuntu 12.04 (our Travis build env) has bugs in this code where +// some includes are missing in dependencies of iphlpapi.h for WINVER >= 0x0600 (Vista). +// We don't use this Vista code for now, so working it around by disabling it. +// MinGW-w64 >= 4.0 seems to be better judging by its headers. +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 // Windows XP, disable Vista API +#include <iphlpapi.h> +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0600 // Reenable Vista API #else - #include <netdb.h> - #ifdef ANDROID_ENABLED - #include "platform/android/ifaddrs_android.h" - #else - #ifdef __FreeBSD__ - #include <sys/types.h> - #endif - #include <ifaddrs.h> - #endif - #include <arpa/inet.h> - #include <sys/socket.h> - #ifdef __FreeBSD__ - #include <netinet/in.h> - #endif +#include <iphlpapi.h> +#endif // MINGW hack +#endif +#else +#include <netdb.h> +#ifdef ANDROID_ENABLED +#include "platform/android/ifaddrs_android.h" +#else +#ifdef __FreeBSD__ +#include <sys/types.h> +#endif +#include <ifaddrs.h> +#endif +#include <arpa/inet.h> +#include <sys/socket.h> +#ifdef __FreeBSD__ +#include <netinet/in.h> +#endif #endif -static IP_Address _sockaddr2ip(struct sockaddr* p_addr) { +static IP_Address _sockaddr2ip(struct sockaddr *p_addr) { IP_Address ip; if (p_addr->sa_family == AF_INET) { - struct sockaddr_in* addr = (struct sockaddr_in*)p_addr; + struct sockaddr_in *addr = (struct sockaddr_in *)p_addr; ip.set_ipv4((uint8_t *)&(addr->sin_addr)); } else { - struct sockaddr_in6* addr6 = (struct sockaddr_in6*)p_addr; + struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr; ip.set_ipv6(addr6->sin6_addr.s6_addr); }; return ip; }; -IP_Address IP_Unix::_resolve_hostname(const String& p_hostname, Type p_type) { +IP_Address IP_Unix::_resolve_hostname(const String &p_hostname, Type p_type) { struct addrinfo hints; - struct addrinfo* result; + struct addrinfo *result; memset(&hints, 0, sizeof(struct addrinfo)); if (p_type == TYPE_IPV4) { @@ -115,7 +116,6 @@ IP_Address IP_Unix::_resolve_hostname(const String& p_hostname, Type p_type) { freeaddrinfo(result); return ip; - } #if defined(WINDOWS_ENABLED) @@ -136,23 +136,22 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { r_addresses->push_back(IP_Address(String(hostnames->GetAt(i)->CanonicalName->Data()))); } } - }; #else void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { ULONG buf_size = 1024; - IP_ADAPTER_ADDRESSES* addrs; + IP_ADAPTER_ADDRESSES *addrs; while (true) { - addrs = (IP_ADAPTER_ADDRESSES*)memalloc(buf_size); + addrs = (IP_ADAPTER_ADDRESSES *)memalloc(buf_size); int err = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_SKIP_ANYCAST | - GAA_FLAG_SKIP_MULTICAST | - GAA_FLAG_SKIP_DNS_SERVER | - GAA_FLAG_SKIP_FRIENDLY_NAME, - NULL, addrs, &buf_size); + GAA_FLAG_SKIP_MULTICAST | + GAA_FLAG_SKIP_DNS_SERVER | + GAA_FLAG_SKIP_FRIENDLY_NAME, + NULL, addrs, &buf_size); if (err == NO_ERROR) { break; }; @@ -166,29 +165,27 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { return; }; - - IP_ADAPTER_ADDRESSES* adapter = addrs; + IP_ADAPTER_ADDRESSES *adapter = addrs; while (adapter != NULL) { - IP_ADAPTER_UNICAST_ADDRESS* address = adapter->FirstUnicastAddress; + IP_ADAPTER_UNICAST_ADDRESS *address = adapter->FirstUnicastAddress; while (address != NULL) { IP_Address ip; if (address->Address.lpSockaddr->sa_family == AF_INET) { - SOCKADDR_IN* ipv4 = reinterpret_cast<SOCKADDR_IN*>(address->Address.lpSockaddr); + SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr); ip.set_ipv4((uint8_t *)&(ipv4->sin_addr)); } else { // ipv6 - SOCKADDR_IN6* ipv6 = reinterpret_cast<SOCKADDR_IN6*>(address->Address.lpSockaddr); + SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr); ip.set_ipv6(ipv6->sin6_addr.s6_addr); }; - r_addresses->push_back(ip); address = address->Next; @@ -205,8 +202,8 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { - struct ifaddrs * ifAddrStruct=NULL; - struct ifaddrs * ifa=NULL; + struct ifaddrs *ifAddrStruct = NULL; + struct ifaddrs *ifa = NULL; getifaddrs(&ifAddrStruct); @@ -218,19 +215,18 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const { r_addresses->push_back(ip); } - if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct); - + if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct); } #endif void IP_Unix::make_default() { - _create=_create_unix; + _create = _create_unix; } -IP* IP_Unix::_create_unix() { +IP *IP_Unix::_create_unix() { - return memnew( IP_Unix ); + return memnew(IP_Unix); } IP_Unix::IP_Unix() { |