/* * Copyright (c) 2013 Tobias Markmann * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ #pragma once #include #include #include #include #include #include struct ub_ctx; struct ub_result; namespace Swift { class EventLoop; class IDNConverter; class TimerFactory; class UnboundDomainNameResolver; class UnboundQuery; class UnboundDomainNameResolver : public DomainNameResolver, public EventOwner, public boost::enable_shared_from_this { public: UnboundDomainNameResolver(IDNConverter* idnConverter, boost::shared_ptr ioService, EventLoop* eventLoop); virtual ~UnboundDomainNameResolver(); virtual boost::shared_ptr createServiceQuery(const std::string& serviceLookupPrefix, const std::string& domain); virtual boost::shared_ptr createAddressQuery(const std::string& name); static void unbound_callback_wrapper(void* data, int err, ub_result* result); private: void unbound_callback(boost::shared_ptr query, int err, ub_result* result); void handleUBSocketReadable(boost::system::error_code); void processData(); private: IDNConverter* idnConverter; boost::shared_ptr eventOwner; boost::shared_ptr ioService; boost::asio::posix::stream_descriptor ubDescriptior; EventLoop* eventLoop; ub_ctx* ubContext; }; }