Skip to content

Commit eed76d9

Browse files
committed
Dry
1 parent 43d42e8 commit eed76d9

1 file changed

Lines changed: 16 additions & 12 deletions

File tree

zeroconf/_protocol.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import enum
2424
import struct
25-
from typing import Any, Dict, List, Optional, Sequence, Set, TYPE_CHECKING, Tuple, Union, cast
25+
from typing import Any, Callable, Dict, List, Optional, Sequence, Set, TYPE_CHECKING, Tuple, Union, cast
2626

2727

2828
from ._dns import DNSAddress, DNSHinfo, DNSNsec, DNSPointer, DNSQuestion, DNSRecord, DNSService, DNSText
@@ -106,24 +106,28 @@ def __init__(self, data: bytes, scope_id: Optional[int] = None, now: Optional[fl
106106
self._read_others = False
107107
self.now = now or current_time_millis()
108108
self.scope_id = scope_id
109-
109+
self._parse_data(self._initial_parse)
110+
111+
def _initial_parse(self) -> None:
112+
"""Parse the data needed to initalize the packet object."""
113+
self.read_header()
114+
self.read_questions()
115+
if not self.num_questions:
116+
self.read_others()
117+
self.valid = True
118+
119+
def _parse_data(self, parser_call: Callable) -> None:
120+
"""Parse part of the packet and catch exceptions."""
110121
try:
111-
self.read_header()
112-
self.read_questions()
113-
if not self.num_questions:
114-
self.read_others()
115-
self.valid = True
122+
parser_call()
116123
except DECODE_EXCEPTIONS:
117-
self.log_exception_warning('Choked at offset %d while unpacking %r', self.offset, data)
124+
self.log_exception_warning('Choked at offset %d while unpacking %r', self.offset, self.data)
118125

119126
@property
120127
def answers(self) -> List[DNSRecord]:
121128
"""Answers in the packet."""
122129
if not self._read_others:
123-
try:
124-
self.read_others()
125-
except DECODE_EXCEPTIONS:
126-
self.log_exception_warning('Choked at offset %d while unpacking %r', self.offset, data)
130+
self._parse_data(self.read_others)
127131
return self._answers
128132

129133
def __repr__(self) -> str:

0 commit comments

Comments
 (0)