* add TaZmen Sniffer Protocol (TZSP) layer #1000
* add tests for TZSP layer #1000
* cleanups from PR reviews #1000
* fix ranges used in state tags #1000
* add some corner case tests #1000
* add support for unknown tag type #1000
use type TZSPTagUnknown if tag type is not known.
+ related tests
* fixing a nasty grammar bug #1000
* add YesNoByteField #1000
+ tests
* use YesNoByteField instead of generated dicts for conditional tags #1000
* use orb instead of unpack for accessing payload bytes #1000
- this feature adds the ability to have a PacketListField
of heterogeneous Packet types with dynamic discovery
of the next type. This discovery can be based on any elements
including previously parsed packets, underlayers, remaining
bytes (look ahead), and last parsed packet.
- this feature also adds the ability to parse PacketListFields
where neither the length nor the number of elements can be
predicted before parsing. This could be done previously using
a length_from callback that did significant peeks into the
string to parse, but it felt clumsy.
- this feature allows conversion of large ranges where
all entries coalesce to the same representation without bloating
a dict. For instance, 0x0 to 0xffff all display as "toto" except
a few odds 0x2 which are displayed as "tutu".
Before this feature, you needed to write
enum = {x: 'toto' for x in xrange(0, 0xffff)
enum[2] = 'tutu'
XShortEnumField('test', 0, enum)