summaryrefslogtreecommitdiff
path: root/src/network/dns_handler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/dns_handler.cpp')
-rw-r--r--src/network/dns_handler.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/network/dns_handler.cpp b/src/network/dns_handler.cpp
new file mode 100644
index 0000000..7f0c96a
--- /dev/null
+++ b/src/network/dns_handler.cpp
@@ -0,0 +1,46 @@
+#include <biboumi.h>
+#ifdef UDNS_FOUND
+
+#include <network/dns_socket_handler.hpp>
+#include <network/dns_handler.hpp>
+#include <network/poller.hpp>
+
+#include <utils/timed_events.hpp>
+
+#include <udns.h>
+#include <cerrno>
+#include <cstring>
+
+class Resolver;
+
+using namespace std::string_literals;
+
+std::unique_ptr<DNSSocketHandler> DNSHandler::socket_handler{};
+
+DNSHandler::DNSHandler(std::shared_ptr<Poller>& poller)
+{
+ dns_init(nullptr, 0);
+ const auto socket = dns_open(nullptr);
+ if (socket == -1)
+ throw std::runtime_error("Failed to initialize udns socket: "s + strerror(errno));
+
+ DNSHandler::socket_handler = std::make_unique<DNSSocketHandler>(poller, socket);
+}
+
+void DNSHandler::destroy()
+{
+ DNSHandler::socket_handler.reset(nullptr);
+ dns_close(nullptr);
+}
+
+void DNSHandler::watch()
+{
+ DNSHandler::socket_handler->watch();
+}
+
+void DNSHandler::unwatch()
+{
+ DNSHandler::socket_handler->unwatch();
+}
+
+#endif /* UDNS_FOUND */