#include "Dns/MulticastDnsClient.h" #include #include #include #include namespace Network { namespace Test { class Test { public: Test() : m_client(std::bind(&Test::Callback, this, std::placeholders::_1)) { Network::Dns::Query query; query.SetType(Network::Dns::QueryType::A); query.SetClass(Network::Dns::QueryClass::IN); query.SetName(Network::Dns::Name("_http", "_tcp", "local")); m_client.Query(query); } void Callback(const std::vector records) { Logging::Log(Logging::Severity::Info, "Callback"); for(auto& record : records) { if(record.GetType() == Network::Dns::Type::A) { std::vector data = record.GetResourceData(); std::stringstream ss; ss << static_cast(data.at(0)) << "." << static_cast(data.at(1)) << "." << static_cast(data.at(2)) << "." << static_cast(data.at(3)); asio::ip::address_v4 address = asio::ip::address_v4::from_string(ss.str()); if (std::find(m_addresses.begin(), m_addresses.end(), address) == m_addresses.end()) m_addresses.push_back(address); } } } void Print() { std::stringstream ss; ss << m_addresses.size() << " IPs" << std::endl; for (auto& address : m_addresses) ss << " " << address.to_string() << std::endl; Logging::Log(Logging::Severity::Info, ss.str()); } private: Network::Dns::MulticastDnsClient m_client; std::vector m_addresses; }; bool TestMulticastDNS() { Test test; test.Print(); sleep(4); test.Print(); return true; } } // namespace Test } // namespace Network