diff --git a/Net/src/NetworkInterface.cpp b/Net/src/NetworkInterface.cpp index c086325e4..c84e2d6df 100644 --- a/Net/src/NetworkInterface.cpp +++ b/Net/src/NetworkInterface.cpp @@ -1277,7 +1277,7 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) ifIndex = sdl->sdl_index; intf = NetworkInterface(ifIndex); setInterfaceParams(currIface, intf.impl()); - if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly) && !ipOnly) + if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) ifIt = result.insert(Map::value_type(ifIndex, intf)).first; break; } @@ -1340,6 +1340,18 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) } if (ifaces) freeifaddrs(ifaces); + if (ipOnly) + { + Map::iterator it = result.begin(); + Map::iterator end = result.end(); + for (; it != end;) + { + if (!it->second.supportsIPv4() && !it->second.supportsIPv6()) + result.erase(it++); + else ++it; + } + } + return result; } @@ -1437,7 +1449,7 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) intf = NetworkInterface(ifIndex); setInterfaceParams(iface, intf.impl()); - if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly) && !ipOnly) + if ((result.find(ifIndex) == result.end()) && ((upOnly && intf.isUp()) || !upOnly)) ifIt = result.insert(Map::value_type(ifIndex, intf)).first; break; @@ -1505,6 +1517,18 @@ NetworkInterface::Map NetworkInterface::map(bool ipOnly, bool upOnly) if (ifaces) freeifaddrs(ifaces); + if (ipOnly) + { + Map::iterator it = result.begin(); + Map::iterator end = result.end(); + for (; it != end;) + { + if (!it->second.supportsIPv4() && !it->second.supportsIPv6()) + result.erase(it++); + else ++it; + } + } + return result; #else throw Poco::NotImplementedException("Not implemented in Android"); diff --git a/Net/testsuite/src/NetworkInterfaceTest.cpp b/Net/testsuite/src/NetworkInterfaceTest.cpp index 512a9b7f3..3f99a54dc 100644 --- a/Net/testsuite/src/NetworkInterfaceTest.cpp +++ b/Net/testsuite/src/NetworkInterfaceTest.cpp @@ -194,9 +194,16 @@ void NetworkInterfaceTest::testMapIpOnly() { NetworkInterface::Map m = NetworkInterface::map(true, false); assert (!m.empty()); + + std::cout << std::endl; for (NetworkInterface::Map::const_iterator it = m.begin(); it != m.end(); ++it) { assert(it->second.supportsIPv4() || it->second.supportsIPv6()); + std::cout << "Interface: (" << it->second.index() << ")" << std::endl; + std::cout << "Address: " << it->second.address().toString() << std::endl; + NetworkInterface::MACAddress mac(it->second.macAddress()); + if (!mac.empty() && (it->second.type() != NetworkInterface::NI_TYPE_SOFTWARE_LOOPBACK)) + std::cout << "MAC Address:" << mac << std::endl; } }