From: John Runyon Date: Sun, 26 Nov 2023 00:07:03 +0000 (-0700) Subject: some socket fixes X-Git-Url: https://jfr.im/git/erebus.git/commitdiff_plain/867df3938aa231509618fafcbb7989329f352304 some socket fixes --- diff --git a/modlib.py b/modlib.py index eeb7c4e..91e0584 100644 --- a/modlib.py +++ b/modlib.py @@ -258,8 +258,7 @@ class _ListenSocket(object): def _make_closer(self, obj, client): def close(): - print(repr(self), repr(obj)) - self.lib.parent.log(repr(self), '?', 'Closing child socket %d' % (client.fileno())) + self.lib.parent.log(repr(self), '?', 'Closing child socket #%d' % (client.fileno())) try: obj.closing() except AttributeError: @@ -274,7 +273,7 @@ class _ListenSocket(object): client, addr = self.sock.accept() obj = self.cls(client) obj.close = self._make_closer(obj, client) - self.lib.parent.log(repr(self), '?', 'New connection %d from %s' % (client.fileno(), addr)) + self.lib.parent.log(repr(self), '?', 'New connection #%d from %s' % (client.fileno(), addr)) self.clients.append((client,obj)) self.lib.parent.newfd(obj, client.fileno()) return [] diff --git a/modules/basic_socket.py b/modules/basic_socket.py index bfd6b72..03f7323 100644 --- a/modules/basic_socket.py +++ b/modules/basic_socket.py @@ -8,7 +8,7 @@ modinfo = { 'license': 'public domain', 'compatible': [0], 'depends': [], - 'softdeps': ['help'], + 'softdeps': [], } # preamble @@ -43,7 +43,7 @@ class BasicServer(object): def getdata(self): recvd = self.sock.recv(8192) - if recvd == b"": + if recvd == b"": # EOF if len(self.buffer) != 0: # Process what's left in the buffer. We'll get called again after. remaining_buf = self.buffer.decode('utf-8', 'backslashreplace') @@ -67,10 +67,13 @@ class BasicServer(object): peer = self.sock.getpeername() bot = lib.parent.randbot() maxlen = bot.maxmsglen() - len("PRIVMSG :") - len(self.chan) - bot.msg(self.chan, "%s:%d says:" % peer) + lib.parent.log(str(self), 'I', line) while len(line) > maxlen: - bot.msg(self.chan, line[0:maxlen]) - line = line[maxlen:] + cutat = line.rfind(' ', 0, maxlen) + if cutat == -1: + cutat = maxlen + bot.msg(self.chan, line[0:cutat]) + line = line[cutat:].strip() bot.msg(self.chan, line) def send(self, line): @@ -81,3 +84,8 @@ class BasicServer(object): return self.socket.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR) except: return None + + def __str__(self): + return '%s#%d' % (__name__, self.sock.fileno()) + def __repr__(self): + return '<%s #%d %s:%d>' % ((__name__, self.sock.fileno())+self.sock.getpeername())