Skip to content

Commit a4b08db

Browse files
authored
Merge pull request #107 from BiffoBear/raw_dns
Replaced socket.socket instance with calls to WIZNET5K in DNS.
2 parents b3e0c7e + 71e4ca3 commit a4b08db

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

adafruit_wiznet5k/adafruit_wiznet5k_dns.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import time
2727
from random import getrandbits
2828
from micropython import const
29-
import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket
3029

3130
_QUERY_FLAG = const(0x00)
3231
_OPCODE_STANDARD_QUERY = const(0x00)
@@ -229,10 +228,11 @@ def __init__(
229228
"""
230229
self._debug = debug
231230
self._iface = iface
232-
socket.set_interface(iface)
233-
self._sock = socket.socket(type=socket.SOCK_DGRAM)
234-
self._sock.settimeout(1)
235-
self._dns_server = dns_address
231+
self._dns_server = (
232+
self._iface.unpretty_ip(dns_address)
233+
if isinstance(dns_address, str)
234+
else dns_address
235+
)
236236
self._query_id = 0 # Request ID.
237237
self._query_length = 0 # Length of last query.
238238

@@ -251,31 +251,29 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
251251
self._query_id, self._query_length, buffer = _build_dns_query(hostname)
252252

253253
# Send DNS request packet
254-
self._sock.bind(("", _DNS_PORT))
255-
self._sock.connect((self._dns_server, _DNS_PORT))
254+
dns_socket = self._iface.get_socket()
255+
self._iface.socket_connect(
256+
dns_socket, bytes(self._dns_server), _DNS_PORT, conn_mode=0x02
257+
)
256258
_debug_print(debug=self._debug, message="* DNS: Sending request packet...")
257-
self._sock.send(buffer)
259+
self._iface.socket_write(dns_socket, buffer)
258260

259261
# Read and parse the DNS response
260262
ipaddress = -1
261263
for _ in range(5):
262264
# wait for a response
263265
socket_timeout = time.monotonic() + 1.0
264-
packet_size = self._sock._available() # pylint: disable=protected-access
265-
while packet_size == 0:
266-
packet_size = (
267-
self._sock._available() # pylint: disable=protected-access
268-
)
266+
while not self._iface.socket_available(dns_socket, 0x02):
269267
if time.monotonic() > socket_timeout:
270268
_debug_print(
271269
debug=self._debug,
272270
message="* DNS ERROR: Did not receive DNS response (socket timeout).",
273271
)
274-
self._sock.close()
275-
return -1
272+
self._iface.socket_close(dns_socket)
273+
raise RuntimeError("Failed to resolve hostname!")
276274
time.sleep(0.05)
277275
# recv packet into buf
278-
buffer = self._sock.recv(512) # > UDP payload length
276+
_, buffer = self._iface.read_udp(dns_socket, 512)
279277
_debug_print(
280278
debug=self._debug,
281279
message="DNS Packet Received: {}".format(buffer),
@@ -294,5 +292,5 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
294292
message="* DNS ERROR: Failed to resolve DNS response, retrying…\n"
295293
" ({}).".format(error.args[0]),
296294
)
297-
self._sock.close()
295+
self._iface.socket_close(dns_socket)
298296
return ipaddress

0 commit comments

Comments
 (0)