From 93d06b6015ae2f67b33082d2f935a00653cb881f Mon Sep 17 00:00:00 2001
From: phil <phil@secdev.org>
Date: Mon, 20 Mar 2017 13:31:14 +0100
Subject: [PATCH] Added new pipe: TriggeredSwitch

---
 scapy/scapypipes.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/scapy/scapypipes.py b/scapy/scapypipes.py
index fcc1d772..4924b0cb 100644
--- a/scapy/scapypipes.py
+++ b/scapy/scapypipes.py
@@ -294,3 +294,24 @@ class TriggeredQueueingValve(Drain):
                     self._send(msg)
                 else:
                     self._high_send(msg)
+
+class TriggeredSwitch(Drain):
+    """Let messages alternatively high or low, changing on trigger
+     +------^------+
+  >>-|-\    |    /-|->>
+     |  [up/down]  |
+   >-|-/    |    \-|->
+     +------^------+
+"""
+    def __init__(self, start_state=True, name=None):
+        Drain.__init__(self, name=name)
+        self.low = start_state
+    def push(self, msg):
+        if self.low:
+            self._send(msg)
+        else:
+            self._high_send(msg)
+    high_push = push
+    def on_trigger(self, msg):
+        self.low ^= True
+        self._trigger(msg)
-- 
GitLab