MCPcopy
hub / github.com/USArmyResearchLab/Dshell / segments

Method segments

dshell/core.py:1614–1649  ·  view source on GitHub ↗

List of valid (sequence number, packet) tuples in order by sequence number.

(self)

Source from the content-addressed store, hash-verified

1612
1613 @property
1614 def segments(self) -> List[Tuple[int, "Packet"]]:
1615 """
1616 List of valid (sequence number, packet) tuples in order by sequence number.
1617 """
1618 if self._segments is not None:
1619 return self._segments
1620
1621 segments = []
1622 # Iterate through segments, ignoring segments that cause overlap in data.
1623 expected_seq = None
1624 prev_packet = None
1625 for seq, packet in sorted(self._seq_map.items()):
1626 if expected_seq is None:
1627 expected_seq = seq
1628
1629 # If the sequence is greater than or equal to the expected sequence, this segment is valid.
1630 if seq >= expected_seq:
1631 segments.append((seq, packet))
1632 missing_num_bytes = seq - expected_seq
1633 if missing_num_bytes:
1634 logger.debug(
1635 f"Missing {missing_num_bytes} bytes of data between packets "
1636 f"{prev_packet.frame} and {packet.frame}"
1637 )
1638 expected_seq += missing_num_bytes + len(packet.data)
1639 prev_packet = packet
1640
1641 # TODO: Support rollover sequence numbers.
1642 # Otherwise, we have some overlap in data and need to remove the invalid segment/packet
1643 # and ignoring adding it to the segments list.
1644 else:
1645 logger.debug(f"Packet {packet.frame} contains overlapped data. Removing...")
1646 self._remove_packet(packet)
1647
1648 self._segments = segments # cache for next time.
1649 return segments
1650
1651 @property
1652 def data(self):

Callers

nothing calls this directly

Calls 2

_remove_packetMethod · 0.95
debugMethod · 0.80

Tested by

no test coverage detected