chiark / gitweb /
slip fix
[hippotat.git] / hippotat / __init__.py
index cc77cf6f91e1c3c1bfee3fb038fa1b7a3d6c21de..654a5c5f52fe2bccfd9d043d2acb3185e68a81cd 100644 (file)
@@ -206,8 +206,9 @@ class SlipStreamDecoder():
 
   def inputdata(self, data):
     self._log('inputdata', d=data)
-    packets = slip.decode(data)
-    packets[0] = self._buffer + packets[0]
+    data = self._buffer + data
+    self._buffer = b''
+    packets = slip.decode(data, True)
     self._buffer = packets.pop()
     for packet in packets:
       self._maybe_packet(packet)
@@ -220,8 +221,11 @@ class SlipStreamDecoder():
 
   def flush(self):
     self._log('flush')
-    self._maybe_packet(self._buffer)
+    data = self._buffer
     self._buffer = b''
+    packets = slip.decode(data)
+    assert(len(packets) == 1)
+    self._maybe_packet(packets[0])
 
 class _IpifProcessProtocol(twisted.internet.protocol.ProcessProtocol):
   def __init__(self, router):