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)
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):
.replace(esc, esc + esc_esc)
.replace(end, esc + esc_end))
-def decode(data):
+def decode(data, keep_tail=False):
#print('DECODE ', repr(data))
out = []
- for packet in data.split(end):
+ inp = data.split(end)
+ tail = []
+ if keep_tail:
+ tail.append(inp.pop())
+ for packet in inp:
pdata = b''
while True:
eix = packet.find(esc)
packet = packet[eix+2 : ]
out.append(pdata)
#print('DECODED ', repr(out))
+ out += tail
return out
# -*- python -*-