- framestart = self.buffer.find(b"xx")
- if framestart == -1: # No frames, return whatever we have
- break
- if framestart > 0: # Should not happen, report
- log.warning("Undecodable data \"%s\" from fd %d (IMEI %s)",
- self.buffer[:framestart].hex(), self.sock.fileno(), self.imei)
- self.buffer = self.buffer[framestart:]
- # At this point, buffer starts with a packet
- frameend = self.buffer.find(b"\r\n", 4)
- if frameend == -1: # Incomplete frame, return what we have
- break
- msg = parse_message(self.buffer[2:frameend])
- self.buffer = self.buffer[frameend+2:]
- if isinstance(msg, LOGIN):
- self.imei = msg.imei
- log.info("LOGIN from fd %d: IMEI %s",
- self.sock.fileno(), self.imei)
- msgs.append(msg)
- return msgs
-
- def send(self, buffer):
+ try:
+ return [
+ (when, self.addr, packet)
+ for packet in self.stream.recv(segment)
+ ]
+ except StreamError as e:
+ log.warning(
+ "%s from fd %d (IMEI %s)", e, self.sock.fileno(), self.imei
+ )
+
+ def send(self, buffer: bytes) -> None: