/* * 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 "Swiften/Base/foreach.h" #include "Swiften/Base/String.h" #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 FakeDNSSDQuerier : public DNSSDQuerier, public EventOwner, public boost::enable_shared_from_this { public: FakeDNSSDQuerier(const String& domain); ~FakeDNSSDQuerier(); void start() {} void stop() {} boost::shared_ptr createBrowseQuery(); boost::shared_ptr createRegisterQuery( const String& name, int port, const ByteArray& info); boost::shared_ptr createResolveServiceQuery( const DNSSDServiceID&); boost::shared_ptr createResolveHostnameQuery( const 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 String& name, int port, const ByteArray& info); void setAddress(const String& hostname, boost::optional address); void setBrowseError(); void setRegisterError(); private: template std::vector< boost::shared_ptr > getQueries() const { std::vector< boost::shared_ptr > result; foreach(const boost::shared_ptr& query, runningQueries) { if (boost::shared_ptr resultQuery = boost::dynamic_pointer_cast(query)) { result.push_back(resultQuery); } } return result; } private: String domain; std::list< boost::shared_ptr > runningQueries; std::set services; typedef std::map ServiceInfoMap; ServiceInfoMap serviceInfo; std::map > addresses; }; }