chiark / gitweb /
move sigint
[hippotat.git] / hippotat / __init__.py
index 2b13003994fa6bf3464e8f039df0aa2d81f82736..d25ff06d9a1a6580e8ce9a1888938bbd2b789f5a 100644 (file)
@@ -1,5 +1,8 @@
 # -*- python -*-
 
+import signal
+signal.signal(signal.SIGINT, signal.SIG_DFL)
+
 import twisted
 from twisted.internet import reactor
 
@@ -73,3 +76,31 @@ def queue_inbound(packet):
   ipif.transport.write(slip.encode(packet))
   ipif.transport.write(slip.delimiter)
 
+#---------- packet queue ----------
+
+class PacketQueue():
+  def __init__(self, max_queue_time):
+    self._max_queue_time = max_queue_time
+    self._pq = collections.deque() # packets
+
+  def append(self, packet):
+    self._pq.append((time.monotonic(), packet))
+
+  def nonempty(self):
+    while True:
+      try: (queuetime, packet) = self._pq[0]
+      except IndexError: return False
+
+      age = time.monotonic() - queuetime
+      if age > self.max_queue_time:
+        # strip old packets off the front
+        self._pq.popleft()
+        continue
+
+      return True
+
+  def popleft(self):
+    # caller must have checked nonempty
+    try: (dummy, packet) = self._pq[0]
+    except IndexError: return None
+    return packet