diff options
Diffstat (limited to 'Swiften/Network/UnboundDomainNameResolver.h')
-rw-r--r-- | Swiften/Network/UnboundDomainNameResolver.h | 32 |
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; }; } |