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