From 3d77f99ce85b72627d80224ec185a7b96a46fa98 Mon Sep 17 00:00:00 2001
From: Phil <phil@secdev.org>
Date: Thu, 6 Dec 2007 18:56:43 +0100
Subject: [PATCH] Moved a part of the Packet.__iter__() inner loop into new
 Packet.clone_with() method

---
 scapy.py | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/scapy.py b/scapy.py
index 9e90ed62..be97b9b7 100755
--- a/scapy.py
+++ b/scapy.py
@@ -5623,6 +5623,18 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
                     del(self.fields[k])
         self.payload.hide_defaults()
             
+    def clone_with(self, payload=None, **kargs):
+        pkt = self.__class__()
+        pkt.explicit = 1
+        pkt.fields = kargs
+        pkt.time = self.time
+        pkt.underlayer = self.underlayer
+        pkt.overload_fields = self.overload_fields.copy()
+        pkt.post_transforms = self.post_transforms
+        if payload is not None:
+            pkt.add_payload(payload)
+        return pkt
+        
 
     def __iter__(self):
         def loop(todo, done, self=self):
@@ -5648,15 +5660,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
                     for k in done2:
                         if isinstance(done2[k], VolatileValue):
                             done2[k] = done2[k]._fix()
-                    pkt = self.__class__()
-                    pkt.explicit = 1
-                    pkt.fields = done2
-                    pkt.time = self.time
-                    pkt.underlayer = self.underlayer
-                    pkt.overload_fields = self.overload_fields.copy()
-                    pkt.post_transforms = self.post_transforms
-                    if payl is not None:
-                        pkt.add_payload(payl)
+                    pkt = self.clone_with(payload=payl, **done2)
                     yield pkt
 
         if self.explicit:
-- 
GitLab