| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include "Dns/MulticastDnsClient.h"
- #include <asio.hpp>
- #include <Logging.h>
- #include <functional>
- #include <unistd.h>
- 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<Network::Dns::ResourceRecord> records)
- {
- Logging::Log(Logging::Severity::Info, "Callback");
- for(auto& record : records)
- {
- if(record.GetType() == Network::Dns::Type::A)
- {
- std::vector<uint8_t> data = record.GetResourceData();
- std::stringstream ss;
- ss << static_cast<int>(data.at(0)) << "." << static_cast<int>(data.at(1)) << "." << static_cast<int>(data.at(2)) << "." << static_cast<int>(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<asio::ip::address_v4> m_addresses;
- };
- bool TestMulticastDNS()
- {
- Test test;
- test.Print();
- sleep(4);
- test.Print();
- return true;
- }
- } // namespace Test
- } // namespace Network
|