def test_multiple_addresses(): type_ = "_http._tcp.local." registration_name = "xxxyyy.%s" % type_ desc = {'path': '/~paulsm/'} address_parsed = "10.0.1.2" address = socket.inet_aton(address_parsed) # Old way info = ServiceInfo(type_, registration_name, address, 80, 0, 0, desc, "ash-2.local.") assert info.address == address assert info.addresses == [address] # Updating works address2 = socket.inet_aton("10.0.1.3") info.address = address2 assert info.address == address2 assert info.addresses == [address2] info.address = None assert info.address is None assert info.addresses == [] info.addresses = [address2] assert info.address == address2 assert info.addresses == [address2] # Compatibility way info = ServiceInfo(type_, registration_name, [address, address], 80, 0, 0, desc, "ash-2.local.") assert info.addresses == [address, address] # New kwarg way info = ServiceInfo( type_, registration_name, None, 80, 0, 0, desc, "ash-2.local.", addresses=[address, address] ) assert info.addresses == [address, address] if socket.has_ipv6: address_v6_parsed = "2001:db8::1" address_v6 = socket.inet_pton(socket.AF_INET6, address_v6_parsed) info = ServiceInfo(type_, registration_name, [address, address_v6], 80, 0, 0, desc, "ash-2.local.") assert info.addresses == [address] assert info.addresses_by_version(r.IPVersion.All) == [address, address_v6] assert info.addresses_by_version(r.IPVersion.V4Only) == [address] assert info.addresses_by_version(r.IPVersion.V6Only) == [address_v6] assert info.parsed_addresses() == [address_parsed, address_v6_parsed] assert info.parsed_addresses(r.IPVersion.V4Only) == [address_parsed] assert info.parsed_addresses(r.IPVersion.V6Only) == [address_v6_parsed]
def on_add_snapserver(info: ServiceInfo): snap_server = Snapserver(ioloop, host=info.parsed_addresses()[0], port=info.port, reconnect=True) snap_servers[info_to_name(info)] = snap_server ioloop.create_task(snap_server.start())
def append_service(info: ServiceInfo) -> None: name = info.name[:-(len(info.type) + 1)] ip = info.parsed_addresses(IPVersion.V4Only)[0] port = info.port model = info.properties.get(b"name", "").decode("utf-8") id = info.properties.get(b"id") # handle id decode for various discovered use cases if isinstance(id, bytes): try: int(id, 16) except Exception: id = id.hex() else: id = None service = ZeroconfDevice(name, ip, port, model, id) services.append(service)