1 #ifndef _SERVICE_DISCOVERY_SERVICEBROWSER_H_
2 #define _SERVICE_DISCOVERY_SERVICEBROWSER_H_
4 namespace servicediscovery {
16 #include <boost/thread.hpp>
17 #include <sigc++/sigc++.h>
18 #include <avahi-client/client.h>
19 #include <service_discovery/impl/avahi/RemoteService.hpp>
20 #include <service_discovery/impl/avahi/Client.hpp>
21 #include <service_discovery/utils/List.hpp>
22 #include <service_discovery/impl/avahi/Service.hpp>
24 namespace servicediscovery {
49 AvahiIfIndex interface;
51 AvahiProtocol protocol;
55 AvahiLookupFlags flags;
59 AvahiServiceBrowser *browser;
65 boost::mutex mServicesMutex;
67 const char* getInType() {
71 const char* getInDomain() {
75 return domain.c_str();
81 sigc::signal<void, RemoteService> ServiceAdded;
84 sigc::signal<void, RemoteService> ServiceRemoved;
87 sigc::signal<void, RemoteService> ServiceUpdated;
89 boost::mutex mServiceAddedMutex;
90 boost::mutex mServiceRemovedMutex;
91 boost::mutex mServiceUpdateMutex;
120 AvahiIfIndex interface,
121 AvahiProtocol protocol,
124 AvahiLookupFlags flags,
144 boost::unique_lock<boost::mutex> lock(mServiceAddedMutex);
145 ServiceAdded.connect(slot_);
149 boost::unique_lock<boost::mutex> lock(mServiceAddedMutex);
150 ServiceAdded.emit(rms);
155 boost::unique_lock<boost::mutex> lock(mServiceRemovedMutex);
156 ServiceRemoved.connect(slot_);
160 boost::unique_lock<boost::mutex> lock(mServiceRemovedMutex);
161 ServiceRemoved.emit(rms);
165 boost::unique_lock<boost::mutex> lock(mServiceUpdateMutex);
166 ServiceUpdated.connect(slot_);
170 boost::unique_lock<boost::mutex> lock(mServiceUpdateMutex);
171 ServiceUpdated.emit(rms);
176 boost::unique_lock<boost::mutex> lock(mServicesMutex);
189 return mServicesMutex;
205 static void browseCallback(AvahiServiceBrowser *sb, AvahiIfIndex interface, AvahiProtocol protocol,
206 AvahiBrowserEvent event,
const char *name,
const char *type,
const char *domain,
207 AvahiLookupResultFlags flags,
void *userdata);
209 static void resolveCallback(AvahiServiceResolver *sr, AvahiIfIndex interface, AvahiProtocol protocol,
210 AvahiResolverEvent event,
const char *name,
const char *type,
const char *domain,
const char *host,
211 const AvahiAddress *address, uint16_t port, AvahiStringList *list, AvahiLookupResultFlags flags,
void *userdata);
List< RemoteService > getServices()
Definition: ServiceBrowser.hpp:174
Client represent a wrapper to access the avahi_client (a singleton). Every avahi program must set up ...
Definition: Client.hpp:64
ServiceBrowser * serviceBrowser
Definition: ServiceBrowser.hpp:32
virtual ~ServiceBrowser()
Definition: ServiceBrowser.cpp:70
class for handling service that are found and resolved by the service browsers
Definition: RemoteService.hpp:31
ServiceBrowser(Client *client, std::string type)
Definition: ServiceBrowser.cpp:42
struct used to count failed attempts of service resolution
Definition: ServiceBrowser.hpp:31
const static int MAX_RESOLVER_TRIES
Definition: ServiceBrowser.hpp:98
Client * getClient()
Definition: ServiceBrowser.hpp:199
AvahiServiceBrowser * getAvahiBrowser()
Definition: ServiceBrowser.hpp:194
void serviceAddedConnect(const sigc::slot< void, RemoteService > &slot_)
Definition: ServiceBrowser.hpp:143
List< RemoteService > * getInternalServices()
Definition: ServiceBrowser.hpp:182
void serviceRemovedEmit(RemoteService rms)
Definition: ServiceBrowser.hpp:159
Definition: ServiceBrowser.hpp:42
void serviceAddedEmit(RemoteService rms)
Definition: ServiceBrowser.hpp:148
void serviceUpdatedEmit(RemoteService rms)
Definition: ServiceBrowser.hpp:169
static void browseCallback(AvahiServiceBrowser *sb, AvahiIfIndex interface, AvahiProtocol protocol, AvahiBrowserEvent event, const char *name, const char *type, const char *domain, AvahiLookupResultFlags flags, void *userdata)
Definition: ServiceBrowser.cpp:157
static void resolveCallback(AvahiServiceResolver *sr, AvahiIfIndex interface, AvahiProtocol protocol, AvahiResolverEvent event, const char *name, const char *type, const char *domain, const char *host, const AvahiAddress *address, uint16_t port, AvahiStringList *list, AvahiLookupResultFlags flags, void *userdata)
Definition: ServiceBrowser.cpp:76
void serviceUpdatedConnect(const sigc::slot< void, RemoteService > &slot_)
Definition: ServiceBrowser.hpp:164
boost::mutex & getServicesMutex()
Definition: ServiceBrowser.hpp:187
int count
Definition: ServiceBrowser.hpp:33
void cleanup()
Definition: ServiceBrowser.cpp:53
void serviceRemovedConnect(const sigc::slot< void, RemoteService > &slot_)
Definition: ServiceBrowser.hpp:154