/* * Copyright (c) 2010-2018 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace Swift { class FakeDNSSDQuery; class EventLoop; class SWIFTEN_API FakeDNSSDQuerier : public DNSSDQuerier, public EventOwner, public std::enable_shared_from_this { public: FakeDNSSDQuerier(const std::string& domain, EventLoop* eventLoop); ~FakeDNSSDQuerier(); void start() {} void stop() {} void clearAllQueriesEverRun() { allQueriesEverRun.clear(); } std::shared_ptr createBrowseQuery(); std::shared_ptr createRegisterQuery( const std::string& name, unsigned short port, const ByteArray& info); std::shared_ptr createResolveServiceQuery( const DNSSDServiceID&); std::shared_ptr createResolveHostnameQuery( const std::string& hostname, int interfaceIndex); void addRunningQuery(std::shared_ptr); void removeRunningQuery(std::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, unsigned short port, const ByteArray& info); void setAddress(const std::string& hostname, boost::optional address); void setBrowseError(); void setRegisterError(); public: template std::vector< std::shared_ptr > getAllQueriesEverRun() const { std::vector< std::shared_ptr > result; for (const auto& i : allQueriesEverRun) { if (std::shared_ptr resultQuery = std::dynamic_pointer_cast(i)) { result.push_back(resultQuery); } } return result; } private: template std::vector< std::shared_ptr > getQueries() const { std::vector< std::shared_ptr > result; for (const auto& runningQuerie : runningQueries) { if (std::shared_ptr resultQuery = std::dynamic_pointer_cast(runningQuerie)) { result.push_back(resultQuery); } } return result; } private: std::string domain; EventLoop* eventLoop; typedef std::list< std::shared_ptr > QueryList; QueryList runningQueries; QueryList allQueriesEverRun; std::set services; typedef std::map ServiceInfoMap; ServiceInfoMap serviceInfo; std::map > addresses; }; }