Changeset 868:665fbb6f809c
- Timestamp:
- 08/14/08 02:09:49
(5 months ago)
- Author:
- Phil <phil@secdev.org>
- Message:
Renamed FloatField? into FixedPointField? and fixed it (inspired by wam patch, ticket #119)
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r862 |
r868 |
|
| 804 | 804 | |
|---|
| 805 | 805 | |
|---|
| 806 | | class FloatField(BitField): |
|---|
| 807 | | def getfield(self, pkt, s): |
|---|
| 808 | | s,b = BitField.getfield(self, pkt, s) |
|---|
| 809 | | |
|---|
| 810 | | # fraction point between bits 15 and 16. |
|---|
| 811 | | sec = b >> 16 |
|---|
| 812 | | frac = b & (1L << (32+1)) - 1 |
|---|
| 813 | | frac /= 65536.0 |
|---|
| 814 | | b = sec+frac |
|---|
| 815 | | return s,b |
|---|
| | 806 | class FixedPointField(BitField): |
|---|
| | 807 | def __init__(self, name, default, size, frac_bits=16): |
|---|
| | 808 | self.frac_bits = frac_bits |
|---|
| | 809 | BitField.__init__(self, name, default, size) |
|---|
| | 810 | |
|---|
| | 811 | def any2i(self, pkt, val): |
|---|
| | 812 | if val is None: |
|---|
| | 813 | return val |
|---|
| | 814 | ival = int(val) |
|---|
| | 815 | fract = int( (val-ival) * 2**self.frac_bits ) |
|---|
| | 816 | return (ival << self.frac_bits) | fract |
|---|
| | 817 | |
|---|
| | 818 | def i2h(self, pkt, val): |
|---|
| | 819 | int_part = val >> self.frac_bits |
|---|
| | 820 | frac_part = val & (1L << self.frac_bits) - 1 |
|---|
| | 821 | frac_part /= 2.0**self.frac_bits |
|---|
| | 822 | return int_part+frac_part |
|---|
| | 823 | def i2repr(self, pkt, val): |
|---|
| | 824 | return self.i2h(pkt, val) |
|---|
| r862 |
r868 |
|
| 68 | 68 | BitField('poll', 0xa, 8), ### XXX : it's a signed int |
|---|
| 69 | 69 | BitField('precision', 0, 8), ### XXX : it's a signed int |
|---|
| 70 | | FloatField('delay', 0, 32), |
|---|
| 71 | | FloatField('dispersion', 0, 32), |
|---|
| | 70 | FixedPointField('delay', 0, size=32, frac_bits=16), |
|---|
| | 71 | FixedPointField('dispersion', 0, size=32, frac_bits=16), |
|---|
| 72 | 72 | IPField('id', "127.0.0.1"), |
|---|
| 73 | 73 | TimeStampField('ref', 0, 64), |
|---|