Skip to content

Instantly share code, notes, and snippets.

@StefanD986
Created November 1, 2019 15:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save StefanD986/e8d7ca9814a070d7bba74044a7d28ae7 to your computer and use it in GitHub Desktop.
Save StefanD986/e8d7ca9814a070d7bba74044a7d28ae7 to your computer and use it in GitHub Desktop.
from unittest import TestCase
from tlv_debugging import TlvDebugging
class TestHeaderObj(TestCase):
def test_read(self):
tlv = TlvDebugging.from_bytes(bytearray([0x69, 0x01, 0x01, 0x5F, 0x00]))
assert tlv.file_hdr0[0].tag == 105
assert tlv.file_hdr0[0].length == 1
assert tlv.file_hdr0[0].body == False
assert tlv.file_hdr0[1].tag == 95
assert tlv.file_hdr0[1].length == 0
meta:
id: tlv_debugging
file-extension: hex
endian: le
encoding: ascii
seq:
- id: file_hdr0
type: header_obj
repeat: until
repeat-until: _.length == 0
types:
header_obj:
seq:
- id: tag
type: u1
- id: multi_byte_len_flag
type: b1
- id: length
type: b7
- id: body
size: length
type:
switch-on: tag
cases:
95: tb
105: b1
types:
tb:
seq:
- id: no_value
size: 0
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild
from pkg_resources import parse_version
from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO
if parse_version(ks_version) < parse_version('0.7'):
raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version))
class TlvDebugging(KaitaiStruct):
def __init__(self, _io, _parent=None, _root=None):
self._io = _io
self._parent = _parent
self._root = _root if _root else self
self._read()
def _read(self):
self.file_hdr0 = []
i = 0
while True:
_ = self._root.HeaderObj(self._io, self, self._root)
self.file_hdr0.append(_)
if _.length == 0:
break
i += 1
class HeaderObj(KaitaiStruct):
def __init__(self, _io, _parent=None, _root=None):
self._io = _io
self._parent = _parent
self._root = _root if _root else self
self._read()
def _read(self):
self.tag = self._io.read_u1()
self.multi_byte_len_flag = self._io.read_bits_int(1) != 0
self.length = self._io.read_bits_int(7)
self._io.align_to_byte()
_on = self.tag
if _on == 95:
self._raw_body = self._io.read_bytes(self.length)
io = KaitaiStream(BytesIO(self._raw_body))
self.body = self._root.HeaderObj.Tb(io, self, self._root)
elif _on == 105:
self.body = self._io.read_bits_int(1) != 0
else:
self.body = self._io.read_bytes(self.length)
class Tb(KaitaiStruct):
def __init__(self, _io, _parent=None, _root=None):
self._io = _io
self._parent = _parent
self._root = _root if _root else self
self._read()
def _read(self):
self.no_value = self._io.read_bytes(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment