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):
status.raiseException()
def start_ipif(command, router):
- global ipif
ipif = _IpifProcessProtocol(router)
reactor.spawnProcess(ipif,
'/bin/sh',['sh','-xc', command],
childFDs={0:'w', 1:'r', 2:2},
env=None)
+ return ipif
-def queue_inbound(packet):
+def queue_inbound(ipif, packet):
log_debug(DBG.FLOW, "queue_inbound", d=packet)
ipif.transport.write(slip.delimiter)
ipif.transport.write(slip.encode(packet))
return (servers, clients)
-def cfg_process_common(ss):
+def cfg_process_common(c, ss):
c.mtu = cfg.getint(ss, 'mtu')
def cfg_process_saddrs(c, ss):