Skip to content

Commit c8fabd0

Browse files
authored
Merge pull request #87 from BiffoBear/Standardise_Sockets
Standardise sockets
2 parents f71584b + bb60e7c commit c8fabd0

7 files changed

+382
-293
lines changed

adafruit_wiznet5k/adafruit_wiznet5k.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@
8484
SNSR_SOCK_ESTABLISHED = const(0x17)
8585
SNSR_SOCK_FIN_WAIT = const(0x18)
8686
_SNSR_SOCK_CLOSING = const(0x1A)
87-
_SNSR_SOCK_TIME_WAIT = const(0x1B)
88-
_SNSR_SOCK_CLOSE_WAIT = const(0x1C)
87+
SNSR_SOCK_TIME_WAIT = const(0x1B)
88+
SNSR_SOCK_CLOSE_WAIT = const(0x1C)
8989
_SNSR_SOCK_LAST_ACK = const(0x1D)
9090
_SNSR_SOCK_UDP = const(0x22)
9191
_SNSR_SOCK_IPRAW = const(0x32)
@@ -266,11 +266,13 @@ def get_host_by_name(self, hostname: str) -> bytes:
266266
:return Union[int, bytes]: a 4 bytearray.
267267
"""
268268
if self._debug:
269-
print("* Get host by name")
269+
print(f"* Get host by name : {hostname}")
270270
if isinstance(hostname, str):
271271
hostname = bytes(hostname, "utf-8")
272272
# Return IP assigned by DHCP
273-
_dns_client = dns.DNS(self, self._dns, debug=self._debug)
273+
_dns_client = dns.DNS(
274+
self, self.pretty_ip(bytearray(self._dns)), debug=self._debug
275+
)
274276
ret = _dns_client.gethostbyname(hostname)
275277
if self._debug:
276278
print("* Resolved IP: ", ret)
@@ -824,9 +826,9 @@ def socket_open(self, socket_num: int, conn_mode: int = _SNMR_TCP) -> int:
824826
status = self._read_snsr(socket_num)[0]
825827
if status in (
826828
SNSR_SOCK_CLOSED,
827-
_SNSR_SOCK_TIME_WAIT,
829+
SNSR_SOCK_TIME_WAIT,
828830
SNSR_SOCK_FIN_WAIT,
829-
_SNSR_SOCK_CLOSE_WAIT,
831+
SNSR_SOCK_CLOSE_WAIT,
830832
_SNSR_SOCK_CLOSING,
831833
_SNSR_SOCK_UDP,
832834
):
@@ -904,7 +906,7 @@ def socket_read( # pylint: disable=too-many-branches
904906
if ret == 0:
905907
# no data on socket?
906908
status = self._read_snmr(socket_num)
907-
if status in (SNSR_SOCK_LISTEN, SNSR_SOCK_CLOSED, _SNSR_SOCK_CLOSE_WAIT):
909+
if status in (SNSR_SOCK_LISTEN, SNSR_SOCK_CLOSED, SNSR_SOCK_CLOSE_WAIT):
908910
# remote end closed its side of the connection, EOF state
909911
ret = 0
910912
resp = 0
@@ -991,9 +993,6 @@ def socket_write(
991993
if not self.link_status:
992994
raise ConnectionError("Ethernet cable disconnected!")
993995
assert socket_num <= self.max_sockets, "Provided socket exceeds max_sockets."
994-
status = 0
995-
ret = 0
996-
free_size = 0
997996
if len(buffer) > _SOCK_SIZE:
998997
ret = _SOCK_SIZE
999998
else:
@@ -1005,7 +1004,7 @@ def socket_write(
10051004
while free_size < ret:
10061005
free_size = self._get_tx_free_size(socket_num)
10071006
status = self.socket_status(socket_num)[0]
1008-
if status not in (SNSR_SOCK_ESTABLISHED, _SNSR_SOCK_CLOSE_WAIT) or (
1007+
if status not in (SNSR_SOCK_ESTABLISHED, SNSR_SOCK_CLOSE_WAIT) or (
10091008
timeout and time.monotonic() - stamp > timeout
10101009
):
10111010
ret = 0
@@ -1050,9 +1049,9 @@ def socket_write(
10501049
) != _SNIR_SEND_OK:
10511050
if self.socket_status(socket_num)[0] in (
10521051
SNSR_SOCK_CLOSED,
1053-
_SNSR_SOCK_TIME_WAIT,
1052+
SNSR_SOCK_TIME_WAIT,
10541053
SNSR_SOCK_FIN_WAIT,
1055-
_SNSR_SOCK_CLOSE_WAIT,
1054+
SNSR_SOCK_CLOSE_WAIT,
10561055
_SNSR_SOCK_CLOSING,
10571056
) or (timeout and time.monotonic() - stamp > timeout):
10581057
# self.socket_close(socket_num)

adafruit_wiznet5k/adafruit_wiznet5k_dhcp.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,9 @@ def parse_dhcp_response(
264264
265265
:return Tuple[int, bytearray]: DHCP packet type and ID.
266266
"""
267+
global _BUFF # pylint: disable=global-statement
267268
# store packet in buffer
268-
_BUFF = self._sock.recv()
269+
_BUFF = bytearray(self._sock.recv(len(_BUFF)))
269270
if self._debug:
270271
print("DHCP Response: ", _BUFF)
271272

@@ -401,8 +402,10 @@ def _dhcp_state_machine(self) -> None:
401402
self._dhcp_state = _STATE_DHCP_WAIT
402403
else:
403404
self._sock.settimeout(self._response_timeout)
404-
self._sock.bind((None, 68))
405-
self._sock.connect((self.dhcp_server_ip, _DHCP_SERVER_PORT))
405+
self._sock.bind(("", 68))
406+
self._sock.connect(
407+
(".".join(map(str, self.dhcp_server_ip)), _DHCP_SERVER_PORT)
408+
)
406409
if self._last_lease_time == 0 or time.monotonic() > (
407410
self._last_lease_time + self._lease_time
408411
):
@@ -421,7 +424,7 @@ def _dhcp_state_machine(self) -> None:
421424
self._dhcp_state = _STATE_DHCP_REQUEST
422425

423426
elif self._dhcp_state == _STATE_DHCP_DISCOVER:
424-
if self._sock.available():
427+
if self._sock._available(): # pylint: disable=protected-access
425428
if self._debug:
426429
print("* DHCP: Parsing OFFER")
427430
try:
@@ -455,7 +458,7 @@ def _dhcp_state_machine(self) -> None:
455458
print("* DHCP: Received DHCP Message is not OFFER")
456459

457460
elif self._dhcp_state == _STATE_DHCP_REQUEST:
458-
if self._sock.available():
461+
if self._sock._available(): # pylint: disable=protected-access
459462
if self._debug:
460463
print("* DHCP: Parsing ACK")
461464
try:

adafruit_wiznet5k/adafruit_wiznet5k_dns.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,6 @@ def __init__(
232232
socket.set_interface(iface)
233233
self._sock = socket.socket(type=socket.SOCK_DGRAM)
234234
self._sock.settimeout(1)
235-
236235
self._dns_server = dns_address
237236
self._query_id = 0 # Request ID.
238237
self._query_length = 0 # Length of last query.
@@ -245,13 +244,14 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
245244
246245
:return Union[int, bytes] The IPv4 address if successful, -1 otherwise.
247246
"""
247+
248248
if self._dns_server is None:
249249
return _INVALID_SERVER
250250
# build DNS request packet
251251
self._query_id, self._query_length, buffer = _build_dns_query(hostname)
252252

253253
# Send DNS request packet
254-
self._sock.bind((None, _DNS_PORT))
254+
self._sock.bind(("", _DNS_PORT))
255255
self._sock.connect((self._dns_server, _DNS_PORT))
256256
_debug_print(debug=self._debug, message="* DNS: Sending request packet...")
257257
self._sock.send(buffer)
@@ -261,9 +261,11 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
261261
for _ in range(5):
262262
# wait for a response
263263
socket_timeout = time.monotonic() + 1.0
264-
packet_size = self._sock.available()
264+
packet_size = self._sock._available() # pylint: disable=protected-access
265265
while packet_size == 0:
266-
packet_size = self._sock.available()
266+
packet_size = (
267+
self._sock._available() # pylint: disable=protected-access
268+
)
267269
if time.monotonic() > socket_timeout:
268270
_debug_print(
269271
debug=self._debug,
@@ -273,7 +275,7 @@ def gethostbyname(self, hostname: bytes) -> Union[int, bytes]:
273275
return -1
274276
time.sleep(0.05)
275277
# recv packet into buf
276-
buffer = self._sock.recv()
278+
buffer = self._sock.recv(512) # > UDP payload length
277279
_debug_print(
278280
debug=self._debug,
279281
message="DNS Packet Received: {}".format(buffer),

adafruit_wiznet5k/adafruit_wiznet5k_ntp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def get_time(self) -> time.struct_time:
7474
self._sock.sendto(self._pkt_buf_, (self._ntp_server, 123))
7575
end_time = time.monotonic() + 0.2 * 2**retry
7676
while time.monotonic() < end_time:
77-
data = self._sock.recv()
77+
data = self._sock.recv(64) # NTP returns a 48 byte message.
7878
if data:
7979
sec = data[40:44]
8080
int_cal = int.from_bytes(sec, "big")

0 commit comments

Comments
 (0)