From 89a731d160c8eda22f39f08677cd4004a7ba4c5a Mon Sep 17 00:00:00 2001
From: Phil <phil@secdev.org>
Date: Thu, 29 Oct 2009 15:31:16 +0100
Subject: [PATCH] Reworked config.Resolve() classes and created conf.emph

---
 scapy/config.py | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/scapy/config.py b/scapy/config.py
index 44a73edd..5e80beb3 100644
--- a/scapy/config.py
+++ b/scapy/config.py
@@ -60,21 +60,35 @@ class ProgPath(ConfClass):
     tcpreplay = "tcpreplay"
     hexedit = "hexer"
     wireshark = "wireshark"
-    
-class Resolve:
+
+
+class ConfigFieldList:
     def __init__(self):
-        self.fields = {}
+        self.fields = set()
+        self.layers = set()
+    @staticmethod
+    def _is_field(f):
+        return hasattr(f, "owners")
+    def _recalc_layer_list(self):
+        self.layers = set([owner for f in self.fields for owner in f.owners])
     def add(self, *flds):
-        for fld in flds:
-            self.fields[fld]=None
+        self.fields |= set([f for f in flds if self._is_field(f)])
+        self._recalc_layer_list()
     def remove(self, *flds):
-        for fld in flds:
-            if fld in self.fields:
-                del(self.fields[fld])
+        self.fields -= set(flds)
+        self._recalc_layer_list()
     def __contains__(self, elt):
+        if isinstance(elt, base_classes.Packet_metaclass):
+            return elt in self.layers
         return elt in self.fields
     def __repr__(self):
-        return "<Resolve [%s]>" %  " ".join(str(x) for x in self.fields)
+        return "<%s [%s]>" %  (self.__class__.__name__," ".join(str(x) for x in self.fields))
+
+class Emphasize(ConfigFieldList):
+    pass
+
+class Resolve(ConfigFieldList):
+    pass
     
 
 class Num2Layer:
@@ -336,6 +350,7 @@ extensions_paths: path or list of paths where extensions are to be looked for
     prog = ProgPath()
     resolve = Resolve()
     noenum = Resolve()
+    emph = Emphasize()
     use_pcap = False
     use_dnet = False
     ipv6_enabled = socket.has_ipv6
-- 
GitLab