Also set length of binary blocks correctly when compiling new GCD.

This commit is contained in:
Markus Birth 2018-10-23 01:23:16 +02:00
parent b985f4b6a5
commit d37ec0752d
Signed by: mbirth
GPG Key ID: A9928D7A098C3A9A
2 changed files with 20 additions and 0 deletions

View File

@ -196,15 +196,18 @@ class Gcd:
filename = rcp[s]["from_file"]
file_type_id = tlv7.binary_type_id
running_count = 0
with open(filename, "rb") as bf:
while True:
read_bytes = bf.read(0xff00)
btlv = TLVbinary(file_type_id, len(read_bytes))
btlv.value = read_bytes
gcd.struct.append(btlv)
running_count += len(read_bytes)
if len(read_bytes) < 0xff00:
break
bf.close()
tlv7.set_binary_length(running_count)
else:
tlv = TLV.create_from_dump(params)
gcd.struct.append(tlv)

View File

@ -200,6 +200,9 @@ class TLV6(TLV):
if len(self.value) % 2 != 0:
raise Exception("Invalid TLV6 payload length!")
self.fids = []
self.format = ""
self.fields = []
for i in range(0, len(self.value), 2):
fid = unpack("<H", self.value[i:i+2])[0]
self.add_fid(fid)
@ -247,6 +250,7 @@ class TLV7(TLV):
if not self.tlv6.is_parsed:
# Make sure we have the structure analysed
self.tlv6.parse()
self.attr = []
values = unpack("<" + self.tlv6.format, self.value)
for i, v in enumerate(values):
fid = self.tlv6.fids[i]
@ -270,6 +274,19 @@ class TLV7(TLV):
txt += "\n - Field {:d}: {:>20}: 0x{:04x} / {:d}".format(i+1, fdesc, v, v)
return txt
def set_binary_length(self, new_length):
self.tlv6.parse()
values = unpack("<" + self.tlv6.format, self.value)
new_values = []
for i, v in enumerate(values):
fid = self.tlv6.fids[i]
if fid == 0x2015:
new_values.append(new_length)
else:
new_values.append(v)
self.value = pack("<" + self.tlv6.format, *new_values)
self.is_parsed = False
def dump(self):
# Dump nothing as important info will be chained in binary dump
return []