From 21fa4486519d7f297ca2f069e2ed7d5dfaa0ae0f Mon Sep 17 00:00:00 2001
From: phil <phil@secdev.org>
Date: Mon, 20 Mar 2017 15:33:40 +0100
Subject: [PATCH] Made TCPListenPipe queue messages until a client connects

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

diff --git a/scapy/scapypipes.py b/scapy/scapypipes.py
index 4924b0cb..6a4bd506 100644
--- a/scapy/scapypipes.py
+++ b/scapy/scapypipes.py
@@ -182,12 +182,18 @@ class TCPListenPipe(TCPConnectPipe):
     def __init__(self, addr="", port=0, name=None):
         TCPConnectPipe.__init__(self, addr, port, name)
         self.connected = False
+        self.q = Queue.Queue()
     def start(self):
         self.connected = False
         self.fd = socket.socket()
         self.fd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         self.fd.bind((self.addr,self.port))
         self.fd.listen(1)
+    def push(self, msg):
+        if self.connected:
+            self.fd.send(msg)
+        else:
+            self.q.put(msg)
     def deliver(self):
         if self.connected:
             self._send(self.fd.recv(65536))
@@ -197,6 +203,12 @@ class TCPListenPipe(TCPConnectPipe):
             self.fd.close()
             self.fd = fd
             self.connected = True
+            while True:
+                try:
+                    self.fd.send(self.q.get(block=False))
+                except Queue.Empty:
+                    break
+
 
 class TriggeredMessage(Drain):
     """Send a preloaded message when triggered and trigger in chain
-- 
GitLab