From: p15692025051 <846603105@qq.com> Date: Tue, 31 Dec 2024 02:13:38 +0000 (+0800) Subject: 备份 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=e12f87c34f2092d4f3de56543cdb1629d8cce7da;p=mirrors%2FASR1603_G5.git 备份 --- diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py index 258d5f1d..a781f4d6 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py @@ -10,7 +10,7 @@ import usocket as socket from ucollections import namedtuple import websocket_mask LOGGER = log.getLogger(__name__) - +import usys # Opcodes OP_CONT = 0x0 OP_TEXT = 0x1 @@ -210,7 +210,7 @@ class Websocket(object): return data elif opcode == OP_CLOSE: self._close() - return + return "websocket close" elif opcode == OP_PONG: # Ignore this frame, keep waiting for a data frame continue @@ -248,10 +248,12 @@ class Websocket(object): """Close the websocket.""" if not self.open: return + try: + buf = struct.pack('!H', code) + reason.encode('utf-8') - buf = struct.pack('!H', code) + reason.encode('utf-8') - - self.write_frame(OP_CLOSE, buf) + self.write_frame(OP_CLOSE, buf) + except Exception as e: + usys.print_exception(e) self._close() def _close(self): @@ -287,40 +289,45 @@ class Client(object): uri.hostname, uri.port) sock = socket.socket() + sock.settimeout(6) addr = socket.getaddrinfo(uri.hostname, uri.port) sock.connect(addr[0][4]) + + try: + if uri.protocol == 'wss': + import ussl + sock = ussl.wrap_socket(sock) + + def send_header(header, *args): + if debug: LOGGER.info(str(header), *args) + sock.write(header % args + '\r\n') + + # Sec-WebSocket-Key is 16 bytes of random base64 encoded + key = binascii.b2a_base64(bytes(random.getrandbits(8) for _ in range(16)))[:-1] + send_header(b'GET %s HTTP/1.1', uri.path or '/') + send_header(b'Host: %s:%s', uri.hostname, uri.port) + send_header(b'Connection: Upgrade') + send_header(b'Upgrade: websocket') + send_header(b'Sec-WebSocket-Key: %s', key) + send_header(b'Sec-WebSocket-Version: 13') + send_header(b'Origin: http://{hostname}:{port}'.format( + hostname=uri.hostname, + port=uri.port) + ) + for k, v in headers.items(): + send_header('{}:{}'.format(k, v).encode()) + send_header(b'') - if uri.protocol == 'wss': - import ussl - sock = ussl.wrap_socket(sock) - - def send_header(header, *args): - if debug: LOGGER.info(str(header), *args) - sock.write(header % args + '\r\n') - - # Sec-WebSocket-Key is 16 bytes of random base64 encoded - key = binascii.b2a_base64(bytes(random.getrandbits(8) for _ in range(16)))[:-1] - send_header(b'GET %s HTTP/1.1', uri.path or '/') - send_header(b'Host: %s:%s', uri.hostname, uri.port) - send_header(b'Connection: Upgrade') - send_header(b'Upgrade: websocket') - send_header(b'Sec-WebSocket-Key: %s', key) - send_header(b'Sec-WebSocket-Version: 13') - send_header(b'Origin: http://{hostname}:{port}'.format( - hostname=uri.hostname, - port=uri.port) - ) - for k, v in headers.items(): - send_header('{}:{}'.format(k, v).encode()) - send_header(b'') - - header = sock.readline()[:-2] - assert header.startswith(b'HTTP/1.1 101 '), header - - # We don't (currently) need these headers - # FIXME: should we check the return key? - while header: - if debug: LOGGER.info(str(header)) header = sock.readline()[:-2] - + assert header.startswith(b'HTTP/1.1 101 '), header + + # We don't (currently) need these headers + # FIXME: should we check the return key? + while header: + if debug: LOGGER.info(str(header)) + header = sock.readline()[:-2] + except Exception as e: + usys.print_exception(e) + sock.close() + return return WebsocketClient(sock, debug)