예제 #1
0
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]
예제 #2
0
 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())
예제 #3
0
파일: zeroconf.py 프로젝트: zackoch/pyvizio
    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)