/* * Copyright (c) 2010 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include #include #include #include #include #include "Swiften/EventLoop/EventOwner.h" #include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h" #include "Swiften/LinkLocal/DNSSD/DNSSDResolveServiceQuery.h" #include "Swiften/Network/HostAddress.h" namespace Swift { class ByteArray; class FakeDNSSDQuery; class FakeDNSSDBrowseQuery; class EventLoop; class FakeDNSSDQuerier : public DNSSDQuerier, public EventOwner, public boost::enable_shared_from_this { public: FakeDNSSDQuerier(const std::string& domain, EventLoop* eventLoop); ~FakeDNSSDQuerier(); void start() {} void stop() {} void clearAllQueriesEverRun() { allQueriesEverRun.clear(); } boost::shared_ptr createBrowseQuery(); boost::shared_ptr createRegisterQuery( const std::string& name, int port, const ByteArray& info); boost::shared_ptr createResolveServiceQuery( const DNSSDServiceID&); boost::shared_ptr createResolveHostnameQuery( const std::string& hostname, int interfaceIndex); void addRunningQuery(boost::shared_ptr); void removeRunningQuery(boost::shared_ptr); void addService(const DNSSDServiceID& id); void removeService(const DNSSDServiceID& id); void setServiceInfo(const DNSSDServiceID& id, const DNSSDResolveServiceQuery::Result& info); bool isServiceRegistered(const std::string& name, int port, const ByteArray& info); void setAddress(const std::string& hostname, boost::optional address); void setBrowseError(); void setRegisterError(); public: template std::vector< boost::shared_ptr > getAllQueriesEverRun() const { std::vector< boost::shared_ptr > result; for (QueryList::const_iterator i = allQueriesEverRun.begin(); i != allQueriesEverRun.end(); ++i) { if (boost::shared_ptr resultQuery = boost::dynamic_pointer_cast(*i)) { result.push_back(resultQuery); } } return result; } private: template std::vector< boost::shared_ptr > getQueries() const { std::vector< boost::shared_ptr > result; for (QueryList::const_iterator i = runningQueries.begin(); i != runningQueries.end(); ++i) { if (boost::shared_ptr resultQuery = boost::dynamic_pointer_cast(*i)) { result.push_back(resultQuery); } } return result; } private: std::string domain; EventLoop* eventLoop; typedef std::list< boost::shared_ptr > QueryList; QueryList runningQueries; QueryList allQueriesEverRun; std::set services; typedef std::map ServiceInfoMap; ServiceInfoMap serviceInfo; std::map > addresses; }; }