00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "service_browse_handler.h"
00024
00025 #include <utils/logging/logger.h>
00026
00027 using namespace fawkes;
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 WebviewServiceBrowseHandler::WebviewServiceBrowseHandler(fawkes::Logger *logger,
00043 fawkes::NetworkService *webview_service)
00044 {
00045 __logger = logger;
00046 __webview_service = webview_service;
00047 }
00048
00049
00050 void
00051 WebviewServiceBrowseHandler::all_for_now()
00052 {
00053
00054 }
00055
00056
00057 void
00058 WebviewServiceBrowseHandler::cache_exhausted()
00059 {
00060
00061 }
00062
00063
00064 void
00065 WebviewServiceBrowseHandler::browse_failed(const char *name,
00066 const char *type,
00067 const char *domain)
00068 {
00069 __logger->log_warn("WebviewServiceBrowseHandler", "Browsing for %s.%s in domain %s failed",
00070 name, type, domain);
00071 }
00072
00073
00074 void
00075 WebviewServiceBrowseHandler::service_added(const char *name,
00076 const char *type,
00077 const char *domain,
00078 const char *host_name,
00079 const struct sockaddr *addr,
00080 const socklen_t addr_size,
00081 uint16_t port,
00082 std::list<std::string> &txt,
00083 int flags)
00084 {
00085 if (__service_list.find(name) != __service_list.end()) {
00086 delete __service_list[name];
00087 __service_list.erase(name);
00088 }
00089
00090 for (std::list<std::string>::iterator i = txt.begin(); i != txt.end(); ++i) {
00091 std::string::size_type eqind = i->find("=");
00092 if (eqind != std::string::npos) {
00093 std::string key = i->substr(0, eqind);
00094 std::string val = i->substr(eqind + 1);
00095 if (key == "fawkesver") {
00096 NetworkService *s = new NetworkService(name, type, domain, host_name, port,
00097 addr, addr_size, txt);
00098
00099 if (! (*s == *__webview_service)) {
00100 __logger->log_debug("WebviewServiceBrowseHandler", "Service %s.%s on %s:%u added",
00101 name, type, host_name, port);
00102 __service_list[name] = s;
00103 } else {
00104 delete s;
00105 }
00106 break;
00107 }
00108 }
00109 }
00110 }
00111
00112
00113 void
00114 WebviewServiceBrowseHandler::service_removed(const char *name,
00115 const char *type,
00116 const char *domain)
00117 {
00118 if (__service_list.find(name) != __service_list.end()) {
00119 delete __service_list[name];
00120 __service_list.erase(name);
00121 }
00122 __logger->log_debug("WebviewServiceBrowseHandler", "Service %s.%s has been removed",
00123 name, type);
00124 }
00125
00126
00127
00128
00129
00130 WebviewServiceBrowseHandler::ServiceList &
00131 WebviewServiceBrowseHandler::service_list()
00132 {
00133 return __service_list;
00134 }