summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Network/UnboundDomainNameResolver.h')
-rw-r--r--Swiften/Network/UnboundDomainNameResolver.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/Swiften/Network/UnboundDomainNameResolver.h b/Swiften/Network/UnboundDomainNameResolver.h
index 37cf2f6..cd0b167 100644
--- a/Swiften/Network/UnboundDomainNameResolver.h
+++ b/Swiften/Network/UnboundDomainNameResolver.h
@@ -1,11 +1,34 @@
+/*
+ * Copyright (c) 2012 Tobias Markmann
+ * Licensed under the simplified BSD license.
+ * See Documentation/Licenses/BSD-simplified.txt for more information.
+ */
+
#pragma once
#include <Swiften/Network/DomainNameResolver.h>
+#include <Swiften/Network/Timer.h>
+
+#include <boost/shared_ptr.hpp>
+
+#include <unbound.h>
namespace Swift {
class EventLoop;
class TimerFactory;
+ class UnboundDomainNameResolver;
+
+ class UnboundQuery {
+ public:
+ UnboundQuery(UnboundDomainNameResolver* resolver, ub_ctx* context) : resolver(resolver), ubContext(context) {}
+ virtual ~UnboundQuery() {}
+ virtual void handleResult(int err, ub_result* result) = 0;
+ protected:
+ UnboundDomainNameResolver* resolver;
+ ub_ctx* ubContext;
+ };
+
class UnboundDomainNameResolver : public DomainNameResolver {
public:
UnboundDomainNameResolver(EventLoop* eventLoop, TimerFactory* timerFactory);
@@ -14,9 +37,18 @@ namespace Swift {
virtual boost::shared_ptr<DomainNameServiceQuery> createServiceQuery(const std::string& name);
virtual boost::shared_ptr<DomainNameAddressQuery> createAddressQuery(const std::string& name);
+ static void unbound_callback_wrapper(void* data, int err, ub_result* result);
+
+ private:
+ void unbound_callback(boost::shared_ptr<UnboundQuery> query, int err, ub_result* result);
+
+ void processData();
+
private:
EventLoop* eventLoop;
TimerFactory* timerFactory;
+ ub_ctx* ubContext;
+ Timer::ref timer;
};
}