2024-12-05 21:56:58 -05:00
|
|
|
from nntp.tiny.buffer import OutputBuffer, LineBuffer
|
|
|
|
from nntp.tiny.message import Message, MessagePart, each_line
|
2024-12-04 18:13:38 -05:00
|
|
|
|
|
|
|
class Connection():
|
|
|
|
def __init__(self, sock):
|
|
|
|
self.sock = sock
|
|
|
|
self.output = OutputBuffer(sock)
|
|
|
|
self.buf = LineBuffer()
|
|
|
|
|
|
|
|
def print(self, text: str, end: str="\r\n"):
|
|
|
|
return self.output.print(text, end)
|
|
|
|
|
|
|
|
def flush(self):
|
|
|
|
return self.output.flush()
|
|
|
|
|
|
|
|
def readline(self):
|
|
|
|
self.flush()
|
|
|
|
return self.buf.readline(self.sock)
|
|
|
|
|
|
|
|
def end(self):
|
|
|
|
return self.print('.')
|
2024-12-05 21:56:58 -05:00
|
|
|
|
|
|
|
def message_send_headers(self, message: Message):
|
|
|
|
for name in message.headers:
|
|
|
|
self.print("%s: %s" % (
|
|
|
|
name, message.headers[name]
|
|
|
|
))
|
|
|
|
|
|
|
|
def message_send_body(self, body: str):
|
|
|
|
for line in each_line(body):
|
|
|
|
stripped = line.rstrip()
|
|
|
|
|
|
|
|
if stripped == '.':
|
|
|
|
self.print('..')
|
|
|
|
else:
|
|
|
|
self.print(stripped)
|
|
|
|
|
|
|
|
def message_send(self, message: Message, part: MessagePart):
|
|
|
|
if part is MessagePart.HEAD or part is MessagePart.WHOLE:
|
|
|
|
self.message_send_headers(message)
|
|
|
|
|
|
|
|
if part is MessagePart.WHOLE:
|
|
|
|
self.print('')
|
|
|
|
|
|
|
|
if part is MessagePart.BODY or part is MessagePart.WHOLE:
|
|
|
|
self.message_send_body(message.body)
|