Ticket #119: scapy-FloatField.patch

File scapy-FloatField.patch, 1.0 kB (added by wam@cisco.com, 4 months ago)

patch for this bug

  • scapy.py

    old new  
    48094815        return val 
    48104816 
    48114817class FloatField(BitField): 
     4818    def __init__(self, name, default, size, decimal_bits=16): 
     4819        BitField.__init__(self, name, default, size) 
     4820        self.decimal_bits = decimal_bits 
     4821 
     4822    def addfield(self, pkt, s, val): 
     4823        fract = int((val - int(val)) * 2**self.decimal_bits) 
     4824        new = (int(val) << self.decimal_bits) | fract 
     4825        return BitField.addfield(self, pkt, s, new) 
     4826 
    48124827    def getfield(self, pkt, s): 
    48134828        s,b = BitField.getfield(self, pkt, s) 
    4814          
    4815         # fraction point between bits 15 and 16. 
    4816         sec = b >> 16 
    4817         frac = b & (1L << (32+1)) - 1 
    4818         frac /= 65536.0 
    4819         b = sec+frac 
     4829        int_part = b >> self.decimal_bits 
     4830        frac_part = b & (1L << self.decimal_bits) - 1 
     4831        frac_part /= 2.0**self.decimal_bits 
     4832        b = int_part+frac_part 
    48204833        return s,b     
    48214834 
    48224835class Dot11SCField(LEShortField):