diff options
| -rw-r--r-- | Swiften/LinkLocal/DNSSDServiceFactory.cpp | 8 | ||||
| -rw-r--r-- | Swiften/LinkLocal/DNSSDServiceFactory.h | 15 | ||||
| -rw-r--r-- | Swiften/LinkLocal/LinkLocalServiceBrowser.cpp | 56 | ||||
| -rw-r--r-- | Swiften/LinkLocal/LinkLocalServiceBrowser.h | 21 | ||||
| -rw-r--r-- | Swiften/LinkLocal/Makefile.inc | 4 | ||||
| -rw-r--r-- | Swiften/LinkLocal/PlatformDNSSDServiceFactory.cpp | 38 | ||||
| -rw-r--r-- | Swiften/LinkLocal/PlatformDNSSDServiceFactory.h | 13 | 
7 files changed, 52 insertions, 103 deletions
| diff --git a/Swiften/LinkLocal/DNSSDServiceFactory.cpp b/Swiften/LinkLocal/DNSSDServiceFactory.cpp deleted file mode 100644 index f53660a..0000000 --- a/Swiften/LinkLocal/DNSSDServiceFactory.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "Swiften/LinkLocal/DNSSDServiceFactory.h" - -namespace Swift { - -DNSSDServiceFactory::~DNSSDServiceFactory() { -} - -} diff --git a/Swiften/LinkLocal/DNSSDServiceFactory.h b/Swiften/LinkLocal/DNSSDServiceFactory.h deleted file mode 100644 index 6296165..0000000 --- a/Swiften/LinkLocal/DNSSDServiceFactory.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include <boost/shared_ptr.hpp> - -namespace Swift { -	class DNSSDService; - -	class DNSSDServiceFactory { -		public: -			virtual ~DNSSDServiceFactory(); -			virtual bool canCreate() const = 0; - -			virtual boost::shared_ptr<DNSSDService> createDNSSDService() = 0; -	}; -} diff --git a/Swiften/LinkLocal/LinkLocalServiceBrowser.cpp b/Swiften/LinkLocal/LinkLocalServiceBrowser.cpp index ab56695..6634a0a 100644 --- a/Swiften/LinkLocal/LinkLocalServiceBrowser.cpp +++ b/Swiften/LinkLocal/LinkLocalServiceBrowser.cpp @@ -2,48 +2,68 @@  #include <iostream>  #include "Swiften/LinkLocal/LinkLocalServiceBrowser.h" +#include "Swiften/LinkLocal/DNSSD/DNSSDBrowseQuery.h"  #include "Swiften/Network/HostAddress.h"  namespace Swift {  LinkLocalServiceBrowser::LinkLocalServiceBrowser(boost::shared_ptr<DNSSDQuerier> querier) : querier(querier) { -  /*dnsSDService = factory->createDNSSDService(); -	dnsSDService->onServiceAdded.connect( +	browseQuery = querier->createBrowseQuery(); +	browseQuery->onServiceAdded.connect(  			boost::bind(&LinkLocalServiceBrowser::handleServiceAdded, this, _1)); -	dnsSDService->onServiceRemoved.connect( +	browseQuery->onServiceRemoved.connect(  			boost::bind(&LinkLocalServiceBrowser::handleServiceRemoved, this, _1)); -	dnsSDService->onServiceResolved.connect( -			boost::bind(&LinkLocalServiceBrowser::handleServiceResolved, this, _1, _2));*/ +	browseQuery->startBrowsing();  } +LinkLocalServiceBrowser::~LinkLocalServiceBrowser() { +	browseQuery->stopBrowsing(); +} + +/*  std::vector<LinkLocalService> LinkLocalServiceBrowser::getServices() const {  	std::vector<LinkLocalService> result; -	/*for (ServiceMap::const_iterator i = services.begin(); i != services.end(); ++i) { +	for (ServiceMap::const_iterator i = services.begin(); i != services.end(); ++i) {  		result.push_back(LinkLocalService(i->first, i->second)); -	}*/ +	}  	return result;  } +*/ -/*void LinkLocalServiceBrowser::handleServiceAdded(const DNSSDServiceID& service) { -	dnsSDService->startResolvingService(service); +void LinkLocalServiceBrowser::handleServiceAdded(const DNSSDServiceID& service) { +	boost::shared_ptr<DNSSDResolveServiceQuery> resolveQuery = querier->createResolveServiceQuery(service); +	resolveQuery->onServiceResolved.connect( +		boost::bind(&LinkLocalServiceBrowser::handleServiceResolved, this, service, _1)); +	std::pair<ResolveQueryMap::iterator, bool> r = resolveQueries.insert(std::make_pair(service, resolveQuery)); +	if (!r.second) { +		r.first->second = resolveQuery; +	} +	resolveQuery->start();  }  void LinkLocalServiceBrowser::handleServiceRemoved(const DNSSDServiceID& service) { -	dnsSDService->stopResolvingService(service); -	services.erase(service); +	ResolveQueryMap::iterator i = resolveQueries.find(service); +	assert(i != resolveQueries.end()); +	i->second->stop(); +	resolveQueries.erase(i);  	onServiceRemoved(service);  } -void LinkLocalServiceBrowser::handleServiceResolved(const DNSSDServiceID& service, const DNSSDService::ResolveResult& result) { -	std::pair<ServiceMap::iterator, bool> r = services.insert(std::make_pair(service, result)); -	if (r.second) { -		onServiceAdded(service); +void LinkLocalServiceBrowser::handleServiceResolved(const DNSSDServiceID& service, const boost::optional<DNSSDResolveServiceQuery::Result>& result) { +	if (!result) { +		// TODO +		std::cerr << "Error resolving" << std::endl;  	}  	else { -		r.first->second = result; -		onServiceChanged(service); +		std::pair<ServiceMap::iterator, bool> r = services.insert(std::make_pair(service, *result)); +		if (r.second) { +			onServiceAdded(service); +		} +		else { +			r.first->second = *result; +			onServiceChanged(service); +		}  	}  } -*/  } diff --git a/Swiften/LinkLocal/LinkLocalServiceBrowser.h b/Swiften/LinkLocal/LinkLocalServiceBrowser.h index 10b12b7..5bd9bf0 100644 --- a/Swiften/LinkLocal/LinkLocalServiceBrowser.h +++ b/Swiften/LinkLocal/LinkLocalServiceBrowser.h @@ -1,36 +1,41 @@  #pragma once +#include <boost/signal.hpp>  #include <boost/shared_ptr.hpp>  #include <boost/optional.hpp>  #include <map>  #include <vector>  #include "Swiften/Base/String.h" -#include "Swiften/LinkLocal/LinkLocalService.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDQuerier.h" +#include "Swiften/LinkLocal/DNSSD/DNSSDResolveServiceQuery.h"  #include "Swiften/LinkLocal/DNSSD/DNSSDServiceID.h"  namespace Swift { -	class HostAddress; +	//class HostAddress;  	class LinkLocalServiceBrowser {  		public:  			LinkLocalServiceBrowser(boost::shared_ptr<DNSSDQuerier> querier); +			~LinkLocalServiceBrowser(); -			std::vector<LinkLocalService> getServices() const; +			/*std::vector<LinkLocalService> getServices() const;*/  			boost::signal<void (const DNSSDServiceID&)> onServiceAdded;  			boost::signal<void (const DNSSDServiceID&)> onServiceChanged;  			boost::signal<void (const DNSSDServiceID&)> onServiceRemoved;  		private: -			//void handleServiceAdded(const DNSSDServiceID&); -			//void handleServiceRemoved(const DNSSDServiceID&); -			//void handleServiceResolved(const DNSSDServiceID& service, const DNSSDService::ResolveResult& result); +			void handleServiceAdded(const DNSSDServiceID&); +			void handleServiceRemoved(const DNSSDServiceID&); +			void handleServiceResolved(const DNSSDServiceID& service, const boost::optional<DNSSDResolveServiceQuery::Result>& result);  		private:  			boost::shared_ptr<DNSSDQuerier> querier; -			//typedef std::map<DNSSDServiceID, DNSSDService::ResolveResult> ServiceMap; -			//ServiceMap services; +			boost::shared_ptr<DNSSDBrowseQuery> browseQuery; +			typedef std::map<DNSSDServiceID, boost::shared_ptr<DNSSDResolveServiceQuery> > ResolveQueryMap; +			ResolveQueryMap resolveQueries; +			typedef std::map<DNSSDServiceID, DNSSDResolveServiceQuery::Result> ServiceMap; +			ServiceMap services;  	};  } diff --git a/Swiften/LinkLocal/Makefile.inc b/Swiften/LinkLocal/Makefile.inc index 0980194..ac3d2a2 100644 --- a/Swiften/LinkLocal/Makefile.inc +++ b/Swiften/LinkLocal/Makefile.inc @@ -1,13 +1,11 @@  SWIFTEN_SOURCES += \ -	Swiften/LinkLocal/DNSSDServiceFactory.cpp \ +	Swiften/LinkLocal/LinkLocalServiceBrowser.cpp \  	Swiften/LinkLocal/DNSSDService.cpp \ -	Swiften/LinkLocal/PlatformDNSSDServiceFactory.cpp \  	Swiften/LinkLocal/LinkLocalRoster.cpp \  	Swiften/LinkLocal/LinkLocalServiceInfo.cpp \  	Swiften/LinkLocal/IncomingLinkLocalSession.cpp \  	Swiften/LinkLocal/OutgoingLinkLocalSession.cpp \  	Swiften/LinkLocal/LinkLocalConnector.cpp -#Swiften/LinkLocal/LinkLocalServiceBrowser.cpp   ifeq ($(HAVE_BONJOUR),yes)  SWIFTEN_SOURCES += \ diff --git a/Swiften/LinkLocal/PlatformDNSSDServiceFactory.cpp b/Swiften/LinkLocal/PlatformDNSSDServiceFactory.cpp deleted file mode 100644 index df70506..0000000 --- a/Swiften/LinkLocal/PlatformDNSSDServiceFactory.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "Swiften/LinkLocal/PlatformDNSSDServiceFactory.h" - -#include <cassert> - -#ifdef HAVE_SWIFTEN_CONFIG_H -#include "Swiften/config.h" -#endif -#if defined(HAVE_AVAHI) -#include "Swiften/LinkLocal/AvahiDNSSDService.h" -#elif defined(HAVE_BONJOUR) -#include "Swiften/LinkLocal/AppleDNSSDService.h" -#endif - -namespace Swift { - -PlatformDNSSDServiceFactory::PlatformDNSSDServiceFactory() { -} - -bool PlatformDNSSDServiceFactory::canCreate() const { -#if defined(HAVE_AVAHI) || defined(HAVE_BONJOUR) -	return true; -#else -	return false; -#endif -} - -boost::shared_ptr<DNSSDService> PlatformDNSSDServiceFactory::createDNSSDService() { -#if defined(HAVE_AVAHI) -	return boost::shared_ptr<DNSSDService>(new AvahiDNSSDService()); -#elif defined(HAVE_BONJOUR) -  return boost::shared_ptr<DNSSDService>(new AppleDNSSDService()); -#else -	assert(false); -	return boost::shared_ptr<DNSSDService>(); -#endif -} - -} diff --git a/Swiften/LinkLocal/PlatformDNSSDServiceFactory.h b/Swiften/LinkLocal/PlatformDNSSDServiceFactory.h deleted file mode 100644 index 9c4e4e6..0000000 --- a/Swiften/LinkLocal/PlatformDNSSDServiceFactory.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "Swiften/LinkLocal/DNSSDServiceFactory.h" - -namespace Swift { -	class PlatformDNSSDServiceFactory : public DNSSDServiceFactory { -		public: -			PlatformDNSSDServiceFactory(); - -			bool canCreate() const; -			virtual boost::shared_ptr<DNSSDService> createDNSSDService(); -	}; -} | 
 Swift
 Swift