avahi_dispatcher.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <gui_utils/avahi_dispatcher.h>
00025 #include <netcomm/service_discovery/service.h>
00026
00027 namespace fawkes {
00028 #if 0
00029 }
00030 #endif
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 AvahiDispatcher::AvahiDispatcher()
00042 {
00043 __dispatcher_all_for_now.connect(sigc::mem_fun(*this, &AvahiDispatcher::on_all_for_now));
00044 __dispatcher_cache_exhausted.connect(sigc::mem_fun(*this, &AvahiDispatcher::on_cache_exhausted));
00045 __dispatcher_browse_failed.connect(sigc::mem_fun(*this, &AvahiDispatcher::on_browse_failed));
00046 __dispatcher_service_added.connect(sigc::mem_fun(*this, &AvahiDispatcher::on_service_added));
00047 __dispatcher_service_removed.connect(sigc::mem_fun(*this, &AvahiDispatcher::on_service_removed));
00048 }
00049
00050
00051
00052
00053
00054 sigc::signal<void>
00055 AvahiDispatcher::signal_all_for_now()
00056 {
00057 return __signal_all_for_now;
00058 }
00059
00060
00061
00062
00063
00064 sigc::signal<void>
00065 AvahiDispatcher::signal_cache_exhausted()
00066 {
00067 return __signal_cache_exhausted;
00068 }
00069
00070
00071
00072
00073
00074 sigc::signal<void>
00075 AvahiDispatcher::signal_browse_failed()
00076 {
00077 return __signal_browse_failed;
00078 }
00079
00080
00081
00082
00083
00084 sigc::signal<void, NetworkService *>
00085 AvahiDispatcher::signal_service_added()
00086 {
00087 return __signal_service_added;
00088 }
00089
00090
00091
00092
00093
00094 sigc::signal<void, NetworkService *>
00095 AvahiDispatcher::signal_service_removed()
00096 {
00097 return __signal_service_removed;
00098 }
00099
00100
00101 void
00102 AvahiDispatcher::all_for_now()
00103 {
00104 __dispatcher_all_for_now();
00105 }
00106
00107
00108 void
00109 AvahiDispatcher::cache_exhausted()
00110 {
00111 __dispatcher_cache_exhausted();
00112 }
00113
00114
00115 void
00116 AvahiDispatcher::browse_failed(const char *name,
00117 const char *type,
00118 const char *domain)
00119 {
00120 __dispatcher_browse_failed();
00121 }
00122
00123
00124 void
00125 AvahiDispatcher::service_added(const char *name,
00126 const char *type,
00127 const char *domain,
00128 const char *host_name,
00129 const struct sockaddr *addr,
00130 const socklen_t addr_size,
00131 uint16_t port,
00132 std::list<std::string> &txt,
00133 int flags)
00134 {
00135 NetworkService *s = new NetworkService(name, type, domain, host_name, port,
00136 addr, addr_size, txt);
00137 __queue_service_added.push_locked(s);
00138 __dispatcher_service_added();
00139 }
00140
00141
00142 void
00143 AvahiDispatcher::service_removed(const char *name,
00144 const char *type,
00145 const char *domain)
00146 {
00147 NetworkService *s = new NetworkService(name, type, domain);
00148 __queue_service_removed.push_locked(s);
00149 __dispatcher_service_removed();
00150 }
00151
00152
00153 void
00154 AvahiDispatcher::on_all_for_now()
00155 {
00156 __signal_all_for_now.emit();
00157 }
00158
00159 void
00160 AvahiDispatcher::on_cache_exhausted()
00161 {
00162 __signal_cache_exhausted.emit();
00163 }
00164
00165 void
00166 AvahiDispatcher::on_browse_failed()
00167 {
00168 __signal_browse_failed.emit();
00169 }
00170
00171 void
00172 AvahiDispatcher::on_service_added()
00173 {
00174 __queue_service_added.lock();
00175 while (! __queue_service_added.empty()) {
00176 NetworkService *s = __queue_service_added.front();
00177 __signal_service_added.emit(s);
00178 delete s;
00179 __queue_service_added.pop();
00180 }
00181 __queue_service_added.unlock();
00182 }
00183
00184 void
00185 AvahiDispatcher::on_service_removed()
00186 {
00187 __queue_service_removed.lock();
00188 while (! __queue_service_removed.empty()) {
00189 NetworkService *s = __queue_service_removed.front();
00190 __signal_service_removed.emit(s);
00191 delete s;
00192 __queue_service_removed.pop();
00193 }
00194 __queue_service_removed.unlock();
00195 }
00196
00197 }