X-Git-Url: http://average.org/gitweb/?a=blobdiff_plain;f=gps303%2Fcollector.py;h=9d694b0ae4c83180a7a718aa21be5daa4e7fe6f4;hb=945c7abb8b29898f46db4ad2833428d6db588a63;hp=ef80cc534c0a9683f5219fc676fddb0bd0708d69;hpb=b955a03a2d2146a705ac4d19047cc26b38cdd878;p=loctrkd.git diff --git a/gps303/collector.py b/gps303/collector.py index ef80cc5..9d694b0 100644 --- a/gps303/collector.py +++ b/gps303/collector.py @@ -105,11 +105,18 @@ class Client: break packet = self.buffer[2:frameend] self.buffer = self.buffer[frameend + 2 :] + if len(packet) < 2: # frameend comes too early + log.warning("Packet too short: %s", packet) + break if proto_of_message(packet) == LOGIN.PROTO: - self.imei = parse_message(packet).imei - log.info( - "LOGIN from fd %d (IMEI %s)", self.sock.fileno(), self.imei - ) + msg = parse_message(packet) + if isinstance(msg, LOGIN): # Can be unparseable + self.imei = msg.imei + log.info( + "LOGIN from fd %d (IMEI %s)", + self.sock.fileno(), + self.imei, + ) msgs.append((when, self.addr, packet)) return msgs @@ -119,7 +126,7 @@ class Client: except OSError as e: log.error( "Sending to fd %d (IMEI %s): %s", - self.sock.fileno, + self.sock.fileno(), self.imei, e, ) @@ -247,9 +254,6 @@ def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: else: log.debug("Stray event: %s on socket %s", fl, sk) # poll queue consumed, make changes now - for fd in tostop: - poller.unregister(fd) # type: ignore - clients.stop(fd) for zmsg in tosend: zpub.send( Bcast( @@ -262,6 +266,9 @@ def runserver(conf: ConfigParser, handle_hibernate: bool = True) -> None: ) log.debug("Sending to the client: %s", zmsg) clients.response(zmsg) + for fd in tostop: + poller.unregister(fd) # type: ignore + clients.stop(fd) for clntsock, clntaddr in topoll: fd = clients.add(clntsock, clntaddr) poller.register(fd, flags=zmq.POLLIN)