#pragma once #include #include #include #include #include #include "Swiften/LinkLocal/DNSSDBrowseQuery.h" #include "Swiften/LinkLocal/DNSSDPublishQuery.h" #include "Swiften/LinkLocal/BonjourQuery.h" namespace Swift { class LinkLocalServiceInfo; class BonjourQuerier : public boost::enable_shared_from_this { public: BonjourQuerier(); ~BonjourQuerier(); boost::shared_ptr createBrowseQuery(); boost::shared_ptr createPublishQuery(const String& name, int port, const LinkLocalServiceInfo& info); void start(); void stop(); private: friend class BonjourQuery; void addRunningQuery(boost::shared_ptr); void removeRunningQuery(boost::shared_ptr); private: void interruptSelect(); void run(); private: bool stopRequested; boost::thread* thread; boost::mutex runningQueriesMutex; std::list< boost::shared_ptr > runningQueries; int interruptSelectReadSocket; int interruptSelectWriteSocket; boost::condition_variable runningQueriesAvailableEvent; }; }