axmol/templates/lua-template-runtime/frameworks/runtime-src/proj.ios_mac/Runtime_ios-mac.mm

47 lines
1.3 KiB
Plaintext

#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <string>
#include <vector>
#include "ConfigParser.h"
using namespace std;
string getIPAddress()
{
BOOL success;
struct ifaddrs * addrs;
const struct ifaddrs * cursor;
// customized by user
auto &bindAddress = ConfigParser::getInstance()->getBindAddress();
if (bindAddress.length() > 0)
{
return bindAddress;
}
success = getifaddrs(&addrs) == 0;
if (success) {
cursor = addrs;
while (cursor != NULL) {
// the second test keeps from picking up the loopback address
if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0)
{
NSString *name = [NSString stringWithUTF8String:cursor->ifa_name];
if ([name rangeOfString:@"en" options:NSCaseInsensitiveSearch].length > 0) {
string ipaddr = [[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)]UTF8String];
if (!ipaddr.empty()) {
return ipaddr;
}
}
}
cursor = cursor->ifa_next;
}
freeifaddrs(addrs);
}
return "";
}