BCLogger::BCLogger(const string& ip, const unsigned port, const LogFlags flags) : Logger(flags), _init_ok() { Poco::Net::IPAddress ipaddr; if (Poco::Net::IPAddress::tryParse(ip, ipaddr) && (ipaddr.isGlobalMC() || ipaddr.isMulticast() || ipaddr.isBroadcast() || ipaddr.isLinkLocalMC() || ipaddr.isUnicast() || ipaddr.isWellKnownMC() || ipaddr.isSiteLocalMC() || ipaddr.isOrgLocalMC())) { Poco::Net::SocketAddress saddr(ipaddr, port); Poco::Net::DatagramSocket *dgs(new Poco::Net::DatagramSocket); if (ipaddr.isBroadcast()) dgs->setBroadcast(true); dgs->connect(saddr); _ofs = new bcostream(dgs); _flags |= broadcast; _init_ok = true; } }
NetworkUtils::NetworkInterfaceList NetworkUtils::listNetworkInterfaces(AddressType addressType, NetworkInterface::IPVersion ipVersion) { NetworkInterfaceList all = Poco::Net::NetworkInterface::list(); NetworkInterfaceList results; // empty to start NetworkInterfaceList::iterator iter = all.begin(); while (iter != all.end()) { bool match = false; Poco::Net::NetworkInterface iface = (*iter); Poco::Net::IPAddress address = iface.address(); switch (addressType) { case WILDCARD: match = address.isWildcard(); break; case BROADCAST: match = address.isBroadcast(); break; case LOOPBACK: match = address.isLoopback(); break; case MULTICAST: match = address.isMulticast(); break; case UNICAST: match = address.isUnicast(); break; case LINK_LOCAL: match = address.isLinkLocal(); break; case SITE_LOCAL: match = address.isSiteLocal(); break; } if (match) { if ((ipVersion == NetworkInterface::IPv4_OR_IPv6) || (ipVersion == NetworkInterface::IPv4_ONLY && !iface.supportsIPv6() && iface.supportsIPv4()) || (ipVersion == NetworkInterface::IPv6_ONLY && !iface.supportsIPv4() && iface.supportsIPv6())) { results.push_back(iface); } } ++iter; } return results; }