Merge branch 'issues/154' into issues/199

pull/200/head
Andrew Mirsky 2025-06-08 07:57:51 -04:00
commit 69f6114830
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: A98E67635CDF2C39
2 zmienionych plików z 9 dodań i 2 usunięć

Wyświetl plik

@ -2,7 +2,7 @@ import asyncio
from struct import pack, unpack from struct import pack, unpack
from amqtt.adapters import ReaderAdapter from amqtt.adapters import ReaderAdapter
from amqtt.errors import NoDataError from amqtt.errors import NoDataError, ZeroLengthReadError
def bytes_to_hex_str(data: bytes | bytearray) -> str: def bytes_to_hex_str(data: bytes | bytearray) -> str:
@ -59,7 +59,7 @@ async def read_or_raise(reader: ReaderAdapter | asyncio.StreamReader, n: int = -
data = await reader.read(n) data = await reader.read(n)
except (asyncio.IncompleteReadError, ConnectionResetError, BrokenPipeError): except (asyncio.IncompleteReadError, ConnectionResetError, BrokenPipeError):
data = None data = None
if not data: if data is None:
msg = "No more data" msg = "No more data"
raise NoDataError(msg) raise NoDataError(msg)
return data return data
@ -72,6 +72,8 @@ async def decode_string(reader: ReaderAdapter | asyncio.StreamReader) -> str:
:return: string read from stream. :return: string read from stream.
""" """
length_bytes = await read_or_raise(reader, 2) length_bytes = await read_or_raise(reader, 2)
if len(length_bytes) < 1:
raise ZeroLengthReadError
str_length = unpack("!H", length_bytes)[0] str_length = unpack("!H", length_bytes)[0]
if str_length: if str_length:
byte_str = await read_or_raise(reader, str_length) byte_str = await read_or_raise(reader, str_length)
@ -90,6 +92,8 @@ async def decode_data_with_length(reader: ReaderAdapter | asyncio.StreamReader)
:return: bytes read from stream (without length). :return: bytes read from stream (without length).
""" """
length_bytes = await read_or_raise(reader, 2) length_bytes = await read_or_raise(reader, 2)
if len(length_bytes) < 1:
raise ZeroLengthReadError
bytes_length = unpack("!H", length_bytes)[0] bytes_length = unpack("!H", length_bytes)[0]
return await read_or_raise(reader, bytes_length) return await read_or_raise(reader, bytes_length)

Wyświetl plik

@ -13,6 +13,9 @@ class CodecError(Exception):
class NoDataError(Exception): class NoDataError(Exception):
"""Exceptions thrown by packet encode/decode functions.""" """Exceptions thrown by packet encode/decode functions."""
class ZeroLengthReadError(NoDataError):
def __init__(self) -> None:
super().__init__("Decoding a string of length zero.")
class BrokerError(Exception): class BrokerError(Exception):
"""Exceptions thrown by broker.""" """Exceptions thrown by broker."""