From 945f85c2a34f36506c4f770d26024b4e5d965e94 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Tue, 26 Nov 2024 22:21:06 -0500 Subject: [PATCH] A much more sane buffer implementation --- lib/nntp/tiny/buffer.py | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/lib/nntp/tiny/buffer.py b/lib/nntp/tiny/buffer.py index cb224f4..997d0ad 100644 --- a/lib/nntp/tiny/buffer.py +++ b/lib/nntp/tiny/buffer.py @@ -15,27 +15,28 @@ class OutputBuffer(): self.sock: socket.socket = sock self.offset: int = 0 + def write(self, data: bytes): + count = len(data) + remaining = count + + while remaining > 0: + if self.offset >= self.size: + self.offset = 0 + + needed = self.size - self.offset + copy = min(needed, remaining) + + self.buf[self.offset:self.offset+copy] = data[0:copy] + + remaining -= copy + self.offset += copy + + if self.offset >= self.size: + self.sock.send(self.buf) + self.offset = 0 + def print(self, text: str, end: str="\r\n"): - data = bytes(text + end, 'utf-8') - count = len(data) - - if count > self.size: - return self.sock.send(data) - - if count + self.offset > self.size: - to_fill = self.size - self.offset - left = count - to_fill - - self.buf[self.offset:self.size] = data[0:to_fill] - - self.sock.send(self.buf) - - self.offset = 0 - - self.buf[0:left] = data[to_fill:to_fill+left] - else: - self.buf[self.offset:self.offset+count] = data - self.offset += count + return self.write(bytes(text + end, 'utf-8')) def flush(self): self.sock.send(self.buf[0:self.offset])