From 4100861570271d8b33fbb6a9355abb813f55694d Mon Sep 17 00:00:00 2001 From: siddacious Date: Thu, 27 Feb 2020 19:43:42 -0800 Subject: [PATCH 1/2] trying to hack in support for the requests lib --- adafruit_wiznet5k/adafruit_wiznet5k.py | 4 +++- adafruit_wiznet5k/adafruit_wiznet5k_socket.py | 24 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/adafruit_wiznet5k/adafruit_wiznet5k.py b/adafruit_wiznet5k/adafruit_wiznet5k.py index 99dd729..d83d345 100755 --- a/adafruit_wiznet5k/adafruit_wiznet5k.py +++ b/adafruit_wiznet5k/adafruit_wiznet5k.py @@ -147,7 +147,9 @@ class WIZNET5K: :param bool debug: Enable debugging output. """ - + TCP_MODE = const(0) + UDP_MODE = const(1) + TLS_MODE = const(2) # pylint: disable=too-many-arguments, too-many-public-methods def __init__(self, spi_bus, cs, reset=None, is_dhcp=True, mac=DEFAULT_MAC, debug=False): diff --git a/adafruit_wiznet5k/adafruit_wiznet5k_socket.py b/adafruit_wiznet5k/adafruit_wiznet5k_socket.py index bac517e..61b26cd 100755 --- a/adafruit_wiznet5k/adafruit_wiznet5k_socket.py +++ b/adafruit_wiznet5k/adafruit_wiznet5k_socket.py @@ -35,9 +35,14 @@ from adafruit_wiznet5k import adafruit_wiznet5k _the_interface = None # pylint: disable=invalid-name + + + + def set_interface(iface): """Helper to set the global internet interface.""" global _the_interface # pylint: disable=global-statement, invalid-name + print("Setting interface to:", iface) _the_interface = iface def htonl(x): @@ -58,7 +63,14 @@ def htons(x): # keep track of sockets we allocate SOCKETS = [] - +# pylint: disable=too-many-arguments, unused-argument +def getaddrinfo(host, port, family=0, socktype=SOCK_STREAM, proto=0, flags=0): + """Given a hostname and a port name, return a 'socket.getaddrinfo' + compatible list of tuples. Honestly, we ignore anything but host & port""" + if not isinstance(port, int): + raise RuntimeError("Port must be an integer") + ipaddr = host + return [(AF_INET, socktype, proto, '', (ipaddr, port))] #pylint: disable=invalid-name class socket: """A simplified implementation of the Python 'socket' class @@ -69,7 +81,8 @@ class socket: """ # pylint: disable=redefined-builtin - def __init__(self, family=AF_INET, type=SOCK_STREAM): + # addr_info[0], addr_info[1], addr_info[2] + def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=None): if family != AF_INET: raise RuntimeError("Only AF_INET family supported by W5K modules.") self._sock_type = type @@ -110,7 +123,7 @@ def gethostbyname(self, address): """Translate a host name to IPv4 address format.""" raise NotImplementedError("Not implemented in this version of Wiznet5k.") - def connect(self, address): + def connect(self, address, conntype=None): """Connect to a remote socket at address. (The format of address depends on the address family — see above.) :param tuple address: Remote socket as a (host, port) tuple. @@ -198,7 +211,10 @@ def readline(self): while b'\n' not in self._buffer: if self._sock_type == SOCK_STREAM: avail = self.available() - self._buffer += _the_interface.read(self.socknum, avail)[1] + reading = _the_interface.read(self.socknum, avail) + print("reading:", reading) + # self._buffer += reading[1] + self._buffer += reading#[0] #bsedit elif self._sock_type == SOCK_DGRAM: avail = _the_interface.udp_remaining() self._buffer += _the_interface.read_udp(self.socknum, avail)[1] From e55125f568d24ea1f01496aeab5047b9a60aade0 Mon Sep 17 00:00:00 2001 From: siddacious Date: Fri, 28 Feb 2020 08:40:16 -0800 Subject: [PATCH 2/2] hackity hack hack --- adafruit_wiznet5k/adafruit_wiznet5k_socket.py | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/adafruit_wiznet5k/adafruit_wiznet5k_socket.py b/adafruit_wiznet5k/adafruit_wiznet5k_socket.py index 61b26cd..a25e5d9 100755 --- a/adafruit_wiznet5k/adafruit_wiznet5k_socket.py +++ b/adafruit_wiznet5k/adafruit_wiznet5k_socket.py @@ -203,7 +203,28 @@ def recv(self, bufsize=0): #pylint: disable=too-many-branches self._buffer = self._buffer[bufsize:] gc.collect() return ret + def readlines(self): + """Attempt to return as many bytes as we can up to + but not including \n""" + stamp = time.monotonic() + while b'\n' not in self._buffer: + if self._sock_type == SOCK_STREAM: + avail = self.available() + reading = _the_interface.socket_read(self.socknum, avail) + self._buffer += reading[1] + # self._buffer += reading#[0] #bsedit + elif self._sock_type == SOCK_DGRAM: + avail = _the_interface.udp_remaining() + self._buffer += _the_interface.read_udp(self.socknum, avail)[1] + elif self._timeout > 0 and time.monotonic() - stamp > self._timeout: + self.close() + raise RuntimeError("Didn't receive response, failing out...") + lines = self._buffer.split(b'\n') + gc.collect() + # clear tmp data buffer + self._buffer = b'' + return lines def readline(self): """Attempt to return as many bytes as we can up to but not including \n""" @@ -211,10 +232,8 @@ def readline(self): while b'\n' not in self._buffer: if self._sock_type == SOCK_STREAM: avail = self.available() - reading = _the_interface.read(self.socknum, avail) - print("reading:", reading) - # self._buffer += reading[1] - self._buffer += reading#[0] #bsedit + reading = _the_interface.socket_read(self.socknum, avail) + self._buffer += reading[1] elif self._sock_type == SOCK_DGRAM: avail = _the_interface.udp_remaining() self._buffer += _the_interface.read_udp(self.socknum, avail)[1]