From 31d7e201f7aa5e52bc8fc94fe0e98d4945db5699 Mon Sep 17 00:00:00 2001 From: Phil <phil@secdev.org> Date: Sat, 1 Mar 2008 18:24:12 +0100 Subject: [PATCH] Added ASN1F_field.is_empty() method --- scapy.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/scapy.py b/scapy.py index e0d24264..feec0b4e 100755 --- a/scapy.py +++ b/scapy.py @@ -4848,6 +4848,10 @@ class ASN1F_optionnal(ASN1F_element): except BER_Decoding_Error: self._field.set_val(pkt,None) return s + def build(self, pkt): + if self._field.is_empty(pkt): + return "" + return self._field.build(pkt) class ASN1F_field(ASN1F_element): holds_packets=0 @@ -4867,8 +4871,6 @@ class ASN1F_field(ASN1F_element): x = 0 return repr(x) def i2h(self, pkt, x): - if x is None: - x = 0 return x def any2i(self, pkt, x): return x @@ -4902,6 +4904,8 @@ class ASN1F_field(ASN1F_element): def set_val(self, pkt, val): setattr(pkt, self.name, val) + def is_empty(self, pkt): + return getattr(pkt,self.name) is None def dissect(self, pkt, s): v,s = self.m2i(pkt, s) @@ -4993,6 +4997,11 @@ class ASN1F_SEQUENCE(ASN1F_field): def set_val(self, pkt, val): for f in self.seq: f.set_val(pkt,val) + def is_empty(self, pkt): + for f in self.seq: + if not f.is_empty(pkt): + return False + return True def get_fields_list(self): return reduce(lambda x,y: x+y.get_fields_list(), self.seq, []) def build(self, pkt): @@ -5021,22 +5030,26 @@ class ASN1F_SEQUENCE_OF(ASN1F_SEQUENCE): self.tag = chr(ASN1_tag) self.name = name self.default = default - def i2m(self, pkt, i): + def i2repr(self, pkt, i): if i is None: return [] return i def get_fields_list(self): return [self] + def set_val(self, pkt, val): + ASN1F_field.set_val(self, pkt, val) + def is_empty(self, pkt): + return ASN1F_field.is_empty(self, pkt) def build(self, pkt): val = getattr(pkt, self.name) if isinstance(val, ASN1_Object) and val.tag == ASN1_Class_UNIVERSAL.RAW: s = val + elif val is None: + s = "" else: s = "".join(map(str, val )) return self.i2m(pkt, s) def set_val(self, pkt, val): - if val is None: - val = [] ASN1F_field.set_val(self, pkt, val) def dissect(self, pkt, s): codec = self.ASN1_tag.get_codec(pkt.ASN1_codec) -- GitLab