chiark
/
gitweb
/
~ian
/
hippotat.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wip
[hippotat.git]
/
hippotat
/
__init__.py
diff --git
a/hippotat/__init__.py
b/hippotat/__init__.py
index 3f62113b90f439f64aa4708002908c2d1bedca52..8694e978a436efc06effbbb5b4e3b81c5868d06f 100644
(file)
--- a/
hippotat/__init__.py
+++ b/
hippotat/__init__.py
@@
-68,7
+68,7
@@
target_requests_outstanding = 10 # used by server
cfg = ConfigParser()
optparser = OptionParser()
cfg = ConfigParser()
optparser = OptionParser()
-_mimetrans =
str.maketrans(b'-'+slip.esc, slip.esc+
'-')
+_mimetrans =
bytes.maketrans(b'-'+slip.esc, slip.esc+b
'-')
def mime_translate(s):
# SLIP-encoded packets cannot contain ESC ESC.
# Swap `-' and ESC. The result cannot contain `--'
def mime_translate(s):
# SLIP-encoded packets cannot contain ESC ESC.
# Swap `-' and ESC. The result cannot contain `--'
@@
-123,29
+123,36
@@
def ipnetwork(input):
#---------- ipif (SLIP) subprocess ----------
#---------- ipif (SLIP) subprocess ----------
-class Slip
Protocol(twisted.internet.protocol.ProcessProtocol
):
- # caller must define method receivedPacket(packet)
- def __init__(self):
+class Slip
StreamDecoder(
):
+ def __init__(self, on_packet):
+ # we will call packet(<packet>)
self._buffer = b''
self._buffer = b''
- def connectionMade(self): pass
- def outReceived(self, data):
+ self._on_packet = on_packet
+
+ def inputdata(self, data):
#print('SLIP-GOT ', repr(data))
self._buffer += data
packets = slip.decode(self._buffer)
self._buffer = packets.pop()
for packet in packets:
#print('SLIP-GOT ', repr(data))
self._buffer += data
packets = slip.decode(self._buffer)
self._buffer = packets.pop()
for packet in packets:
- if not len(packet): continue
- self.receivedPacket(packet)
+ self._maybe_packet(packet)
+
+ def _maybe_packet(self, packet):
+ if len(packet):
+ self._on_packet(packet)
+
def flush(self):
def flush(self):
- if len(self._buffer):
- self.receivedPacket(self._buffer)
- self._buffer = ''
+ self._maybe_packet(self._buffer)
+ self._buffer = b''
-class _IpifProcessProtocol(
Slip
Protocol):
+class _IpifProcessProtocol(
twisted.internet.protocol.Process
Protocol):
def __init__(self, router):
self._router = router
def __init__(self, router):
self._router = router
- super.__init__()
- def receivedPacket(self, packet):
+ self._decoder = SlipStreamDecoder(self.slip_on_packet)
+ def connectionMade(self): pass
+ def outReceived(self, data):
+ self._decoder.inputdata(data)
+ def slip_on_packet(self, packet):
(saddr, daddr) = packet_addrs(packet)
if saddr.is_link_local or daddr.is_link_local:
log_discard(packet, saddr, daddr, 'link-local')
(saddr, daddr) = packet_addrs(packet)
if saddr.is_link_local or daddr.is_link_local:
log_discard(packet, saddr, daddr, 'link-local')
@@
-217,7
+224,7
@@
def crash(err):
def crash_on_defer(defer):
defer.addErrback(lambda err: crash(err))
def crash_on_defer(defer):
defer.addErrback(lambda err: crash(err))
-
v
def crash_on_critical(event):
+def crash_on_critical(event):
if event.get('log_level') >= LogLevel.critical:
crash(twisted.logger.formatEvent(event))
if event.get('log_level') >= LogLevel.critical:
crash(twisted.logger.formatEvent(event))