From 0a8e10db909b3127efebf9c511f36df22154eebf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Thu, 28 May 2020 20:43:36 +0300 Subject: [PATCH] Improve logging of dead connections that didn't make a request --- neomi.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/neomi.py b/neomi.py index 430f835..f3c4ad4 100644 --- a/neomi.py +++ b/neomi.py @@ -123,8 +123,8 @@ def drop_privileges(): class CommandError(OneArgumentException): text = 'Error with command: %s' -class SocketReadError(OneArgumentException): - text = 'Error reading socket: %s' +class SocketTimeoutError(Exception): + pass class ReaderCommands(enum.Enum): stop = range(1) @@ -147,8 +147,8 @@ def SocketReader(sock): try: chunk = sock.recv(1024) - except socket.timeout: - raise SocketReadError('Error reading socket: Remote end timed out') + except socket.timeout as err: + raise SocketTimeoutError('Remote end timed out') from err if not chunk: break @@ -243,7 +243,10 @@ def normalize_path(path, *, config): return '/'.join(normalized_components) class RequestError(OneArgumentException): - text = 'Error with handling request: %s' + text = 'Error when handling request: %s' + +class EmptyRequestError(OneArgumentException): + text = 'Got an empty request: %s' class Protocol(enum.Enum): gopher, gopherplus, http = range(3) @@ -262,7 +265,17 @@ def get_request(sockreader, *, config): try: request.append(next(sockreader)) except StopIteration: # Other end hung up before sending a full header - raise RequestError('Remote end hung up unexpectedly') + if len(request) == 0: + raise EmptyRequestError('Remote end hung up unexpectedly') + else: + print('request:', request)#debg + raise RequestError('Remote end hung up unexpectedly') + except SocketTimeoutError as err: + if len(request) == 0: + raise EmptyRequestError('Remote end timed out') from err + else: + print('request:', request)#debg + raise err if len(request) >= config.request_max_size: raise RequestError('Request too long') @@ -798,8 +811,8 @@ def read_blacklist(blacklist_file): try: ip_range = ipaddress.ip_network(line) - except ValueError: - raise IPParseError('Invalid format: ' + line) + except ValueError as err: + raise IPParseError('Invalid format: ' + line) from err blacklist.append(ip_range) @@ -810,8 +823,8 @@ def read_blacklist(blacklist_file): def ip_in_ranges(ip, ip_ranges): try: ip = ipaddress.ip_address(ip) - except ValueError: - raise IPParseError('Invalid format: ' + line) + except ValueError as err: + raise IPParseError('Invalid format: ' + line) from err for ip_range in ip_ranges: if ip in ip_range: