def _onServiceAdded(self, zero_conf: Zeroconf, service_type: str, name: str) -> bool: # First try getting info from zero-conf cache info = ServiceInfo(service_type, name, properties={}) for record in zero_conf.cache.entries_with_name(name.lower()): info.update_record(zero_conf, time(), record) for record in zero_conf.cache.entries_with_name(info.server): info.update_record(zero_conf, time(), record) if info.address: break # Request more data if info is not complete if not info.address: info = zero_conf.get_service_info(service_type, name) if info: type_of_device = info.properties.get(b"type", None) if type_of_device: if type_of_device == b"printer": address = '.'.join(map(lambda n: str(n), info.address)) self.addedNetworkCluster.emit(str(name), address, info.properties) else: Logger.log( "w", "The type of the found device is '%s', not 'printer'." % type_of_device) else: Logger.log("w", "Could not get information about %s" % name) return False return True
def _onServiceChanged(self, zero_conf, service_type, name, state_change): if state_change == ServiceStateChange.Added: # First try getting info from zero-conf cache info = ServiceInfo(service_type, name, properties = {}) for record in zero_conf.cache.entries_with_name(name.lower()): info.update_record(zero_conf, time(), record) for record in zero_conf.cache.entries_with_name(info.server): info.update_record(zero_conf, time(), record) if info.address: break # Request more data if info is not complete if not info.address: info = zero_conf.get_service_info(service_type, name) if info: type_of_device = info.properties.get(b"type", None) if type_of_device: if type_of_device == b"printer": address = '.'.join(map(lambda n: str(n), info.address)) self.addDeviceSignal.emit(str(name), address, info.properties) else: Logger.log("w", "The type of the found device is '%s', not 'printer'! Ignoring.." % type_of_device) else: Logger.log("w", "Could not get information about %s" % name) return False elif state_change == ServiceStateChange.Removed: Logger.log("d", "Bonjour service removed: %s" % name) self.removeDeviceSignal.emit(str(name)) return True
def _onServiceChanged(self, zeroconf, service_type, name, state_change): if state_change == ServiceStateChange.Added: Logger.log("d", "Bonjour service added: %s" % name) # First try getting info from zeroconf cache info = ServiceInfo(service_type, name, properties = {}) for record in zeroconf.cache.entries_with_name(name.lower()): info.update_record(zeroconf, time.time(), record) for record in zeroconf.cache.entries_with_name(info.server): info.update_record(zeroconf, time.time(), record) if info.address: break # Request more data if info is not complete if not info.address: Logger.log("d", "Trying to get address of %s", name) info = zeroconf.get_service_info(service_type, name) if info: type_of_device = info.properties.get(b"type", None).decode("utf-8") if type_of_device == "printer": address = '.'.join(map(lambda n: str(n), info.address)) self.addPrinterSignal.emit(str(name), address, info.properties) else: Logger.log("w", "The type of the found device is '%s', not 'printer'! Ignoring.." %type_of_device ) else: Logger.log("w", "Could not get information about %s" % name) elif state_change == ServiceStateChange.Removed: Logger.log("d", "Bonjour service removed: %s" % name) self.removePrinterSignal.emit(str(name))
def _onServiceChanged(self, zeroconf, service_type, name, state_change): if state_change == ServiceStateChange.Added: Logger.log("d", "Bonjour service added: %s" % name) # First try getting info from zeroconf cache info = ServiceInfo(service_type, name, properties={}) for record in zeroconf.cache.entries_with_name(name.lower()): info.update_record(zeroconf, time.time(), record) for record in zeroconf.cache.entries_with_name(info.server): info.update_record(zeroconf, time.time(), record) if info.address: break # Request more data if info is not complete if not info.address: Logger.log("d", "Trying to get address of %s", name) info = zeroconf.get_service_info(service_type, name) if info: if info.properties.get(b"type", None) == b'printer': address = '.'.join(map(lambda n: str(n), info.address)) self.addPrinterSignal.emit(str(name), address, info.properties) else: Logger.log("w", "Could not get information about %s" % name) elif state_change == ServiceStateChange.Removed: Logger.log("d", "Bonjour service removed: %s" % name) self.removePrinterSignal.emit(str(name))
def _onServiceChanged(self, zeroconf, service_type, name, state_change): if state_change == ServiceStateChange.Added: key = name name = name.replace("OctoPrint instance ", "") Logger.log("d", "Bonjour service added: %s" % name) # First try getting info from zeroconf cache info = ServiceInfo(service_type, key, properties = {}) for record in zeroconf.cache.entries_with_name(key.lower()): info.update_record(zeroconf, time.time(), record) for record in zeroconf.cache.entries_with_name(info.server): info.update_record(zeroconf, time.time(), record) if info.address: break # Request more data if info is not complete if not info.address: Logger.log("d", "Trying to get address of %s", name) info = zeroconf.get_service_info(service_type, key) if not info: Logger.log("w", "Could not get information about %s" % name) return if info.address: address = '.'.join(map(lambda n: str(n), info.address)) self.addInstanceSignal.emit(name, address, info.properties) else: Logger.log("d", "Discovered instance named %s but received no address", name) elif state_change == ServiceStateChange.Removed: self.removeInstanceSignal.emit(str(name))
def _onServiceChanged(self, zeroconf: Zeroconf, service_type: str, name: str, state_change: ServiceStateChange) -> None: if state_change == ServiceStateChange.Added: key = name result = self._name_regex.match(name) if result: if result.group(1) == "on ": name = result.group(2) else: name = result.group(1) + result.group(2) Logger.log("d", "Bonjour service added: %s" % name) # First try getting info from zeroconf cache info = ServiceInfo(service_type, key) for record in zeroconf.cache.entries_with_name(key.lower()): info.update_record(zeroconf, time.time(), record) address = "" for record in zeroconf.cache.entries_with_name(info.server): info.update_record(zeroconf, time.time(), record) if not isinstance(record, DNSAddress): return ip = None # type: Optional[Union[ipaddress.IPv4Address, ipaddress.IPv6Address]] try: ip = ipaddress.IPv4Address(record.address) # IPv4 except ipaddress.AddressValueError: ip = ipaddress.IPv6Address(record.address) # IPv6 except: continue if ip and not ip.is_link_local: # don't accept 169.254.x.x address address = str(ip) if ip.version == 4 else "[%s]" % str(ip) break # Request more data if info is not complete if not address or not info.port: Logger.log("d", "Trying to get address of %s", name) requested_info = zeroconf.get_service_info(service_type, key) if not requested_info: Logger.log("w", "Could not get information about %s" % name) return info = requested_info if address and info.port: self.addInstanceSignal.emit(name, address, info.port, info.properties) else: Logger.log("d", "Discovered instance named %s but received no address", name) elif state_change == ServiceStateChange.Removed: self.removeInstanceSignal.emit(str(name))
def _onServiceChanged(self, zeroconf: Zeroconf, service_type: str, name: str, state_change: ServiceStateChange): if state_change == ServiceStateChange.Added: key = name result = self._name_regex.match(name) if result: if result.group(1) == "on ": name = result.group(2) else: name = result.group(1) + result.group(2) Logger.log("d", "Bonjour service added: %s" % name) # First try getting info from zeroconf cache info = ServiceInfo(service_type, key) for record in zeroconf.cache.entries_with_name(key.lower()): info.update_record(zeroconf, time.time(), record) for record in zeroconf.cache.entries_with_name(info.server): info.update_record(zeroconf, time.time(), record) if info.address and info.address[:2] != b'\xa9\xfe': # don't accept 169.254.x.x address break # Request more data if info is not complete if not info.address or not info.port: Logger.log("d", "Trying to get address of %s", name) info = zeroconf.get_service_info(service_type, key) if not info: Logger.log("w", "Could not get information about %s" % name) return if info.address and info.port: address = '.'.join(map(lambda n: str(n), info.address)) self.addInstanceSignal.emit(name, address, info.port, info.properties) else: Logger.log( "d", "Discovered instance named %s but received no address", name) elif state_change == ServiceStateChange.Removed: self.removeInstanceSignal.emit(str(name))