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