From ba597eaf7f15cf4be664fc5aa1594abd3801146e Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Wed, 4 Dec 2024 21:43:39 -0500 Subject: [PATCH] Ensure server welcome message is read on client connect --- lib/nntp/tiny/client.py | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/lib/nntp/tiny/client.py b/lib/nntp/tiny/client.py index d164dd7..76e2d0e 100644 --- a/lib/nntp/tiny/client.py +++ b/lib/nntp/tiny/client.py @@ -6,7 +6,27 @@ from nntp.tiny.socket import Connection from nntp.tiny.host import Host from nntp.tiny.response import Response, ResponseCode +class ClientException(Exception): + pass + class Client(Connection): + RE_SPLIT = re.compile(r'\s+') + + def _read_response(self): + line = self.readline() + + if line == '': + return + + parts = self.RE_SPLIT.split(line.rstrip(), 1) + + if len(parts) == 0: + return + elif len(parts) == 1: + return Response(ResponseCode(int(parts[0]))) + else: + return Response(ResponseCode(int(parts[0])), parts[1]) + def __init__(self, host: str, port: int, tls: bool=False): sock = socket.create_connection((host, port)) @@ -26,21 +46,12 @@ class Client(Connection): super().__init__(sock) - RE_SPLIT = re.compile(r'\s+') + response = self._read_response() + + if response is None: + raise ClientException('Server not ready') def request(self, *args): self.print(' '.join(args)) - line = self.readline() - - if line == '': - return - - parts = self.RE_SPLIT.split(line.rstrip(), 1) - - if len(parts) == 0: - return - elif len(parts) == 1: - return Response(ResponseCode(int(parts[0]))) - else: - return Response(ResponseCode(int(parts[0])), parts[1]) + return self._read_response()