@@ -227,6 +227,19 @@ def _has_mcast_record_in_last_second(self, record: DNSRecord) -> bool:
227227 return bool (maybe_entry and self ._now - maybe_entry .created < _ONE_SECOND )
228228
229229
230+ def _get_address_and_nsec_records (service : ServiceInfo , now : float ) -> Set [DNSRecord ]:
231+ """Build a set of address records and NSEC records for non-present record types."""
232+ seen_types : Set [int ] = set ()
233+ records : Set [DNSRecord ] = set ()
234+ for dns_address in service .dns_addresses (created = now ):
235+ seen_types .add (dns_address .type )
236+ records .add (dns_address )
237+ missing_types : Set [int ] = _ADDRESS_RECORD_TYPES - seen_types
238+ if missing_types :
239+ records .add (construct_nsec_record (service .server , list (missing_types ), now ))
240+ return records
241+
242+
230243class QueryHandler :
231244 """Query the ServiceRegistry."""
232245
@@ -261,21 +274,9 @@ def _add_pointer_answers(
261274 if known_answers .suppresses (dns_pointer ):
262275 continue
263276 additionals : Set [DNSRecord ] = {service .dns_service (created = now ), service .dns_text (created = now )}
264- additionals |= self . _get_address_and_nsec_records (service , now )
277+ additionals |= _get_address_and_nsec_records (service , now )
265278 answer_set [dns_pointer ] = additionals
266279
267- def _get_address_and_nsec_records (self , service : ServiceInfo , now : float ) -> Set [DNSRecord ]:
268- """Build a set of address records and NSEC records for non-present record types."""
269- seen_types : Set [int ] = set ()
270- records : Set [DNSRecord ] = set ()
271- for dns_address in service .dns_addresses (created = now ):
272- seen_types .add (dns_address .type )
273- records .add (dns_address )
274- missing_types : Set [int ] = _ADDRESS_RECORD_TYPES - seen_types
275- if missing_types :
276- records .add (construct_nsec_record (service .server , list (missing_types ), now ))
277- return records
278-
279280 def _add_address_answers (
280281 self ,
281282 name : str ,
@@ -332,7 +333,7 @@ def _answer_question(
332333 # https://tools.ietf.org/html/rfc6763#section-12.2.
333334 dns_service = service .dns_service (created = now )
334335 if not known_answers .suppresses (dns_service ):
335- answer_set [dns_service ] = self . _get_address_and_nsec_records (service , now )
336+ answer_set [dns_service ] = _get_address_and_nsec_records (service , now )
336337 if type_ in (_TYPE_TXT , _TYPE_ANY ):
337338 dns_text = service .dns_text (created = now )
338339 if not known_answers .suppresses (dns_text ):
0 commit comments