Skip to content

Commit f25989d

Browse files
andrewbonneyjstasiak
authored andcommitted
ttl: modify default used to respond to _services queries
1 parent 57310e1 commit f25989d

2 files changed

Lines changed: 17 additions & 16 deletions

File tree

test_zeroconf.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def test_dns_hinfo_repr_eq(self):
5959

6060
def test_dns_pointer_repr(self):
6161
pointer = r.DNSPointer(
62-
'irrelevant', r._TYPE_PTR, r._CLASS_IN, r._DNS_TTL, '123')
62+
'irrelevant', r._TYPE_PTR, r._CLASS_IN, r._DNS_HOST_TTL, '123')
6363
repr(pointer)
6464

6565
def test_dns_address_repr(self):
@@ -74,11 +74,11 @@ def test_dns_question_repr(self):
7474

7575
def test_dns_service_repr(self):
7676
service = r.DNSService(
77-
'irrelevant', r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL, 0, 0, 80, b'a')
77+
'irrelevant', r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL, 0, 0, 80, b'a')
7878
repr(service)
7979

8080
def test_dns_record_abc(self):
81-
record = r.DNSRecord('irrelevant', r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL)
81+
record = r.DNSRecord('irrelevant', r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL)
8282
self.assertRaises(r.AbstractMethodException, record.__eq__, record)
8383
self.assertRaises(r.AbstractMethodException, record.write, None)
8484

@@ -134,7 +134,7 @@ def test_parse_own_packet_question(self):
134134
def test_parse_own_packet_response(self):
135135
generated = r.DNSOutgoing(r._FLAGS_QR_RESPONSE)
136136
generated.add_answer_at_time(r.DNSService(
137-
"æøå.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL, 0, 0, 80, "foo.local."), 0)
137+
"æøå.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL, 0, 0, 80, "foo.local."), 0)
138138
parsed = r.DNSIncoming(generated.packet())
139139
self.assertEqual(len(generated.answers), 1)
140140
self.assertEqual(len(generated.answers), len(parsed.answers))
@@ -153,11 +153,11 @@ def test_suppress_answer(self):
153153
question = r.DNSQuestion("testname.local.", r._TYPE_SRV, r._CLASS_IN)
154154
query_generated.add_question(question)
155155
answer1 = r.DNSService(
156-
"testname1.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL, 0, 0, 80, "foo.local.")
156+
"testname1.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL, 0, 0, 80, "foo.local.")
157157
staleanswer2 = r.DNSService(
158-
"testname2.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL/2, 0, 0, 80, "foo.local.")
158+
"testname2.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL/2, 0, 0, 80, "foo.local.")
159159
answer2 = r.DNSService(
160-
"testname2.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_TTL, 0, 0, 80, "foo.local.")
160+
"testname2.local.", r._TYPE_SRV, r._CLASS_IN, r._DNS_HOST_TTL, 0, 0, 80, "foo.local.")
161161
query_generated.add_answer_at_time(answer1, 0)
162162
query_generated.add_answer_at_time(staleanswer2, 0)
163163
query = r.DNSIncoming(query_generated.packet())
@@ -441,10 +441,10 @@ def generate_host(zc, host_name, type_):
441441
out = r.DNSOutgoing(r._FLAGS_QR_RESPONSE | r._FLAGS_AA)
442442
out.add_answer_at_time(
443443
r.DNSPointer(type_, r._TYPE_PTR, r._CLASS_IN,
444-
r._DNS_TTL, name), 0)
444+
r._DNS_HOST_TTL, name), 0)
445445
out.add_answer_at_time(
446446
r.DNSService(type_, r._TYPE_SRV, r._CLASS_IN,
447-
r._DNS_TTL, 0, 0, 80,
447+
r._DNS_HOST_TTL, 0, 0, 80,
448448
name), 0)
449449
zc.send(out)
450450

@@ -609,7 +609,7 @@ def send(out, addr=r._MDNS_ADDR, port=r._MDNS_PORT):
609609
setattr(zc, "send", send)
610610

611611
# register service with default TTL
612-
expected_ttl = r._DNS_TTL
612+
expected_ttl = r._DNS_HOST_TTL
613613
zc.register_service(info)
614614
assert nbr_answers == 12 and nbr_additionals == 0 and nbr_authorities == 3
615615
nbr_answers = nbr_additionals = nbr_authorities = 0
@@ -631,8 +631,8 @@ def send(out, addr=r._MDNS_ADDR, port=r._MDNS_PORT):
631631
nbr_answers = nbr_additionals = nbr_authorities = 0
632632

633633
# register service with custom TTL
634-
expected_ttl = r._DNS_TTL * 2
635-
assert expected_ttl != r._DNS_TTL
634+
expected_ttl = r._DNS_HOST_TTL * 2
635+
assert expected_ttl != r._DNS_HOST_TTL
636636
zc.register_service(info, ttl=expected_ttl)
637637
assert nbr_answers == 12 and nbr_additionals == 0 and nbr_authorities == 3
638638
nbr_answers = nbr_additionals = nbr_authorities = 0
@@ -894,7 +894,7 @@ def current_time_millis():
894894
"""Current system time in milliseconds"""
895895
return time.time() * 1000 + time_offset * 1000
896896

897-
expected_ttl = r._DNS_TTL
897+
expected_ttl = r._DNS_HOST_TTL
898898

899899
nbr_answers = 0
900900

zeroconf.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@
7474
_MDNS_ADDR = '224.0.0.251'
7575
_MDNS_PORT = 5353
7676
_DNS_PORT = 53
77-
_DNS_TTL = 120 # two minutes default TTL as recommended by RFC6762
77+
_DNS_HOST_TTL = 120 # two minute for host records (A, SRV etc) as-per RFC6762
78+
_DNS_OTHER_TTL = 4500 # 75 minutes for non-host records (PTR, TXT etc) as-per RFC6762
7879

7980
_MAX_MSG_TYPICAL = 1460 # unused
8081
_MAX_MSG_ABSOLUTE = 8966
@@ -1835,7 +1836,7 @@ def remove_all_service_listeners(self) -> None:
18351836
self.remove_service_listener(listener)
18361837

18371838
def register_service(
1838-
self, info: ServiceInfo, ttl: int = _DNS_TTL, allow_name_change: bool = False,
1839+
self, info: ServiceInfo, ttl: int = _DNS_HOST_TTL, allow_name_change: bool = False,
18391840
) -> None:
18401841
"""Registers service information to the network with a default TTL
18411842
of 60 seconds. Zeroconf will then respond to requests for
@@ -2048,7 +2049,7 @@ def handle_query(self, msg: DNSIncoming, addr: str, port: int) -> None:
20482049
out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
20492050
out.add_answer(msg, DNSPointer(
20502051
"_services._dns-sd._udp.local.", _TYPE_PTR,
2051-
_CLASS_IN, _DNS_TTL, stype))
2052+
_CLASS_IN, _DNS_OTHER_TTL, stype))
20522053
for service in self.services.values():
20532054
if question.name == service.type:
20542055
if out is None:

0 commit comments

Comments
 (0)