+++ /dev/null
-# SLIP handling
-
-end = b'\300'
-esc = b'\333'
-esc_end = b'\334'
-esc_esc = b'\335'
-delimiter = end
-
-def encode(packet):
- return (packet
- .replace(esc, esc + esc_esc)
- .replace(end, esc + esc_end))
-
-def decode(data, keep_tail=False):
- #print('DECODE ', repr(data))
- out = []
- inp = data.split(end)
- tail = []
- if keep_tail:
- tail.append(inp.pop())
- for packet in inp:
- pdata = b''
- while True:
- eix = packet.find(esc)
- if eix == -1:
- pdata += packet
- break
- #print('ESC ', repr((pdata, packet, eix)))
- pdata += packet[0 : eix]
- ck = packet[eix+1]
- #print('ESC... %o' % ck)
- if ck == esc_esc[0]: pdata += esc
- elif ck == esc_end[0]: pdata += end
- else: raise ValueError('invalid SLIP escape 0%o %#x' % (ck, ck))
- packet = packet[eix+2 : ]
- out.append(pdata)
- #print('DECODED ', repr(out))
- out += tail
- return out
-# -*- python -*-
-