version 1.55, 2008/10/17 11:07:33
|
version 1.56, 2008/10/17 12:42:55
|
|
|
{ | { |
return ips; | return ips; |
} | } |
|
Boolean ipFound; |
for( addrs = array; addrs != NULL; addrs = addrs->ifa_next) | for( addrs = array; addrs != NULL; addrs = addrs->ifa_next) |
{ | { |
|
ipFound = false; |
switch(addrs->ifa_addr->sa_family) | switch(addrs->ifa_addr->sa_family) |
{ | { |
case AF_INET : | case AF_INET : |
|
|
HostAddress::convertBinaryToText(AF_INET, | HostAddress::convertBinaryToText(AF_INET, |
&((struct sockaddr_in *)addrs->ifa_addr)->sin_addr, | &((struct sockaddr_in *)addrs->ifa_addr)->sin_addr, |
buff, sizeof(buff)); | buff, sizeof(buff)); |
ips.append(buff); |
ipFound = true; |
break; | break; |
case AF_INET6 : | case AF_INET6 : |
if (System::isLoopBack(AF_INET6, | if (System::isLoopBack(AF_INET6, |
|
|
HostAddress::convertBinaryToText(AF_INET6, | HostAddress::convertBinaryToText(AF_INET6, |
&((struct sockaddr_in6 *)addrs->ifa_addr)->sin6_addr, | &((struct sockaddr_in6 *)addrs->ifa_addr)->sin6_addr, |
buff, sizeof(buff)); | buff, sizeof(buff)); |
ips.append(buff); |
ipFound = true; |
break; | break; |
} | } |
|
//ATTN: Some Linux implementations of getifaddrs() returning duplicate |
|
// IPv6 Link-local unicast addresses. Filter the duplicates IPs. |
|
if (ipFound) |
|
{ |
|
Boolean duplicateFound = false; |
|
for (Uint32 i = 0, n = ips.size(); i < n ; ++i) |
|
{ |
|
if (String::equal(ips[i], buff)) |
|
{ |
|
duplicateFound = true; |
|
break; |
|
} |
|
} |
|
if (!duplicateFound) |
|
{ |
|
ips.append(buff); |
|
} |
|
} |
} | } |
if(array) | if(array) |
{ | { |