in transcoder/source/file/CmeBinaryPacketFileMessageSource.py [0:0]
def get_message_iterator(self):
# pylint: disable=duplicate-code
while True:
if self.message_skip_bytes > 0:
# Skip the channel id 2 bytes
skipped_bytes = self.file_handle.read(self.message_skip_bytes)
if not skipped_bytes:
break
# Read the parent message length 2 bytes
parent_msg_bytes = self.file_handle.read(self.prefix_length)
if not parent_msg_bytes:
break
message_length = int.from_bytes(parent_msg_bytes, self.endian)
remaining_message_length = message_length
# Skip binary packet header 12 bytes
# Unable seek on a stream,
# self.file_handle.seek(12, 1)
packet_header_bytes = self.file_handle.read(12)
if not packet_header_bytes:
break
# Read message header message size 2 bytes
msg_len_bytes = self.file_handle.read(self.prefix_length)
if not msg_len_bytes:
break
child_message_length = int.from_bytes(msg_len_bytes, self.endian)
remainder = child_message_length - self.prefix_length
self.increment_count()
first_msg_bytes = self.file_handle.read(remainder)
if not first_msg_bytes:
break
# print(''.join('{:02x}'.format(x) for x in result))
yield first_msg_bytes
# Subtract out the binary packet header 12 bytes
remaining_message_length = remaining_message_length - child_message_length - 12
while remaining_message_length > 0:
child_msg_len_bytes = self.file_handle.read(self.prefix_length)
if not child_msg_len_bytes:
break
child_message_length = int.from_bytes(child_msg_len_bytes, self.endian)
remainder = child_message_length - self.prefix_length
self.increment_count()
child_msg_bytes = self.file_handle.read(remainder)
if not child_msg_bytes:
break
yield child_msg_bytes
remaining_message_length = remaining_message_length - child_message_length
self._log_percentage_read()