Changeset 3221

Show
Ignore:
Timestamp:
07/26/08 03:30:11 (5 years ago)
Author:
getxsick
Message:

Implemented Padding in IP protocol.

New class PaddingField? (subclass of Field).
_value keeps length of padding, and padding bits are 0.

Location:
branch/UMPA/umpa/protocols
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branch/UMPA/umpa/protocols/IP.py

    r3219 r3221  
    134134        pass 
    135135 
    136 class HPadding(IntField): 
     136class HPadding(PaddingField): 
    137137    """The internet header padding is used to ensure that the internet header 
    138138    ends on a 32 bit boundary. 
     
    142142    bits = 0 
    143143    auto = True 
    144     def _generate_value(self): 
    145         pass 
     144 
     145    def __init__(self, *args, **kwds): 
     146        super(HIHL, self).__init__(*args, **kwds) 
     147        self._temp_value = 0 
     148 
     149    def _generate_value(self): 
     150        return (32 - (self._temp_value % 32)) % 32 
    146151 
    147152# main IP class 
     
    216221        raw_value = 0 
    217222 
     223        # Padding 
     224        self._fields['_padding']._temp_value = self._fields['options'].bits 
     225 
    218226        # IHL 
    219227        # we store sum of option and padding bits in the _temp_value 
  • branch/UMPA/umpa/protocols/_.py

    r3220 r3221  
    9393        """Check if a value is not bigger than expected. 
    9494        """ 
     95 
    9596        if 2**self.bits > val: 
    9697            return True 
     
    131132        return raw 
    132133 
     134class PaddingField(IntField): 
     135    def _is_valid(self, val): 
     136        if isinstance(val, int): 
     137            return True 
     138        return False 
     139 
     140    def fillout(self): 
     141        self._pre_fillout() 
     142 
     143        if not self._value: 
     144            self.bits = self._generate_value() 
     145        else: 
     146            self.bits = self._value 
     147        return self._raw_value() 
     148     
     149    def _raw_value(self): 
     150        return 0 
    133151 
    134152class Flags(Field):