JDierkse преди 5 години
родител
ревизия
b61fefd11f
променени са 8 файла, в които са добавени 120 реда и са изтрити 3 реда
  1. 2 0
      .gitignore
  2. 1 0
      Libraries/Utilities
  3. 8 2
      Makefile.conf
  4. 6 1
      Makefile.target
  5. 1 0
      Test/Makefile
  6. 24 0
      Test/Test.cc
  7. 7 0
      Test/Test.h
  8. 71 0
      Test/mDNSTest.cpp

+ 2 - 0
.gitignore

@@ -4,3 +4,5 @@
 .*.swp
 .AppleDouble
 lib
+test*
+!test.cc

+ 1 - 0
Libraries/Utilities

@@ -0,0 +1 @@
+../../Utilities

+ 8 - 2
Makefile.conf

@@ -3,8 +3,12 @@
 #
 
 LFLAGS += -lLogging
-LFLAGS += -L$(ROOTPATH)/lib/$(ARCH)
-CFLAGS += -I$(ROOTPATH) -I$(ROOTPATH)/include
+LFLAGS += -L$(ROOTPATH)/Libraries/Logging/lib/$(ARCH)
+CFLAGS += -I$(ROOTPATH)/Libraries/Logging/include
+
+LFLAGS += -lUtilities
+LFLAGS += -L$(ROOTPATH)/Libraries/Utilities/lib/$(ARCH)
+CFLAGS += -I$(ROOTPATH)/Libraries/Utilities/include
 
 CFLAGS += -I$(ROOTPATH)/Libraries/asio/include
 
@@ -12,4 +16,6 @@ LFLAGS += -lNetwork
 LFLAGS += -L$(ROOTPATH)/lib/$(ARCH)
 CFLAGS += -I$(ROOTPATH) -I$(ROOTPATH)/include
 
+LFLAGS += -pthread
+
 DEBUGDIR := .debug

+ 6 - 1
Makefile.target

@@ -8,6 +8,11 @@ Network.a.$(ARCH) : $(OBJECTS)
 Network.a:
 	$(call build_target,$@)
 
+test.$(ARCH): $(OBJECTS) Test/Test.o.$(ARCH) | Network.a.$(ARCH)
+	$(call build_target_arch,$@,$^)
+test:
+	$(call build_target,$@)
+
 .DEFAULT_GOAL := Network.a
 
-TARGETS += Network.a
+TARGETS += Network.a test

+ 1 - 0
Test/Makefile

@@ -0,0 +1 @@
+../Makefile

+ 24 - 0
Test/Test.cc

@@ -0,0 +1,24 @@
+#include "Test.h"
+#include <Logging.h>
+
+
+int main(int /*argc*/, char** /*argv*/)
+{
+	Logging::OpenLog();
+	Logging::SetLogMask(Logging::Severity::Info);
+
+	if (
+		Network::Test::TestMulticastDNS()
+	)
+	{
+		Logging::Log(Logging::Severity::Info, "Pass");
+		Logging::CloseLog();
+
+		return 0;
+	}
+
+	Logging::Log(Logging::Severity::Info, "Error");
+	Logging::CloseLog();
+
+	return -1;
+}

+ 7 - 0
Test/Test.h

@@ -0,0 +1,7 @@
+namespace Network {
+namespace Test {
+
+bool TestMulticastDNS();
+
+} // namespace Test
+} // namespace Network

+ 71 - 0
Test/mDNSTest.cpp

@@ -0,0 +1,71 @@
+#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