qa_avahi_browser.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
00025
00026 #include <netcomm/dns-sd/avahi_thread.h>
00027 #include <netcomm/service_discovery/browse_handler.h>
00028
00029 #include <core/exception.h>
00030 #include <utils/system/signal.h>
00031
00032 #include <cstdio>
00033
00034 using namespace fawkes;
00035
00036 class QAAvahiBrowserMain : public SignalHandler, public ServiceBrowseHandler
00037 {
00038 public:
00039 QAAvahiBrowserMain()
00040 {
00041 at = new AvahiThread();;
00042 at->watch_service("_fawkes._udp", this);
00043 }
00044
00045 ~QAAvahiBrowserMain()
00046 {
00047 delete at;
00048 }
00049
00050 void handle_signal(int signum)
00051 {
00052 at->cancel();
00053 }
00054
00055 void run()
00056 {
00057 at->start();
00058 at->join();
00059 }
00060
00061 virtual void all_for_now()
00062 {
00063 printf("ALL_FOR_NOW\n");
00064 }
00065
00066 virtual void cache_exhausted()
00067 {
00068 printf("CACHE_EXHAUSTED\n");
00069 }
00070
00071 virtual void browse_failed(const char *name,
00072 const char *type,
00073 const char *domain)
00074 {
00075 printf("FAILED: name=%s type=%s domain=%s\n", name, type, domain);
00076 }
00077
00078 virtual void service_added(const char *name,
00079 const char *type,
00080 const char *domain,
00081 const char *host_name,
00082 const struct sockaddr *addr,
00083 const socklen_t addr_size,
00084 uint16_t port,
00085 std::list<std::string> &txt,
00086 int flags
00087 )
00088 {
00089 printf("SERVICE_ADDED: name=%s type=%s domain=%s hostname=%s\n",
00090 name, type, domain, host_name);
00091 }
00092
00093 virtual void service_removed(const char *name,
00094 const char *type,
00095 const char *domain)
00096 {
00097 printf("SERVICE_REMOVED: name=%s type=%s domain=%s\n", name, type, domain);
00098 }
00099
00100 private:
00101 AvahiThread *at;
00102
00103 };
00104
00105 int
00106 main(int argc, char **argv)
00107 {
00108 try {
00109
00110 QAAvahiBrowserMain m;
00111 SignalManager::register_handler(SIGINT, &m);
00112
00113 m.run();
00114
00115 } catch (Exception &e) {
00116 e.print_trace();
00117 }
00118
00119 SignalManager::finalize();
00120 }
00121
00122