Skip to content

Commit 90543d8

Browse files
committed
more simplications
1 parent b7c5a07 commit 90543d8

File tree

3 files changed

+20
-21
lines changed

3 files changed

+20
-21
lines changed

src/cfdppy/handler/dest.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ class CompletionDisposition(enum.Enum):
8181
@dataclass
8282
class _DestFileParams(_FileParamsBase):
8383
file_name: Path
84-
file_size_eof: int | None
8584

8685
@classmethod
8786
def empty(cls) -> _DestFileParams:
@@ -91,14 +90,13 @@ def empty(cls) -> _DestFileParams:
9190
crc32=b"",
9291
file_size=None,
9392
file_name=Path(),
94-
file_size_eof=None,
93+
# file_size_eof=None,
9594
metadata_only=False,
9695
)
9796

9897
def reset(self) -> None:
9998
super().reset()
10099
self.file_name = Path()
101-
self.file_size_eof = None
102100

103101

104102
class TransactionStep(enum.Enum):
@@ -221,6 +219,8 @@ def remove_lost_segment(self, segment_to_remove: tuple[int, int]) -> bool:
221219
@dataclass
222220
class _AckedModeParams:
223221
lost_seg_tracker: LostSegmentTracker = field(default=LostSegmentTracker())
222+
# Extra parameter: Missing metadata is not tracked inside the lost segment tracker, so we
223+
# need an extra parameter for this.
224224
metadata_missing: bool = False
225225
last_start_offset: int = 0
226226
last_end_offset: int = 0
@@ -596,7 +596,7 @@ def _start_transaction_missing_metadata_recv_eof(self, eof_pdu: EofPdu) -> None:
596596

597597
def _handle_eof_without_previous_metadata(self, eof_pdu: EofPdu) -> None:
598598
self._params.fp.progress = eof_pdu.file_size
599-
self._params.fp.file_size_eof = eof_pdu.file_size
599+
self._params.fp.file_size = eof_pdu.file_size
600600
self._params.acked_params.metadata_missing = True
601601
if self._params.fp.progress > 0:
602602
# Clear old list, deferred procedure for the whole file is now active.
@@ -829,8 +829,8 @@ def _handle_fd_pdu(self, file_data_pdu: FileDataPdu) -> None:
829829
self._params.finished_params.file_status = FileStatus.FILE_RETAINED
830830

831831
if (
832-
self._params.fp.file_size_eof is not None
833-
and (offset + len(file_data_pdu.file_data) > self._params.fp.file_size_eof)
832+
self._params.fp.file_size is not None
833+
and (offset + len(file_data_pdu.file_data) > self._params.fp.file_size)
834834
and (
835835
self._declare_fault(ConditionCode.FILE_SIZE_ERROR)
836836
!= FaultHandlerCode.IGNORE_ERROR
@@ -892,7 +892,7 @@ def _deferred_lost_segment_handling(self) -> None:
892892
if not self._params.acked_params.deferred_lost_segment_detection_active:
893893
return
894894
assert self._params.remote_cfg is not None
895-
assert self._params.fp.file_size_eof is not None
895+
assert self._params.fp.file_size is not None
896896
if (
897897
self._params.acked_params.lost_seg_tracker.num_lost_segments == 0
898898
and not self._params.acked_params.metadata_missing
@@ -938,7 +938,7 @@ def _deferred_lost_segment_handling(self) -> None:
938938
NakPdu(
939939
self._params.pdu_conf,
940940
0,
941-
self._params.fp.file_size_eof,
941+
self._params.fp.file_size,
942942
next_segment_reqs,
943943
)
944944
)
@@ -948,7 +948,7 @@ def _deferred_lost_segment_handling(self) -> None:
948948
NakPdu(
949949
self._params.pdu_conf,
950950
0,
951-
self._params.fp.file_size_eof,
951+
self._params.fp.file_size,
952952
next_segment_reqs,
953953
)
954954
)
@@ -959,7 +959,7 @@ def _deferred_lost_segment_handling(self) -> None:
959959
def _handle_eof_pdu(self, eof_pdu: EofPdu) -> bool | None:
960960
"""Returns whether to exit the FSM prematurely."""
961961
self._params.fp.crc32 = eof_pdu.file_checksum
962-
self._params.fp.file_size_eof = eof_pdu.file_size
962+
self._params.fp.file_size = eof_pdu.file_size
963963
if self.cfg.indication_cfg.eof_recv_indication_required:
964964
assert self._params.transaction_id is not None
965965
self.user.eof_recv_indication(self._params.transaction_id)
@@ -975,30 +975,26 @@ def _handle_eof_pdu(self, eof_pdu: EofPdu) -> bool | None:
975975
EntityIdTlv(self._params.remote_cfg.entity_id.as_bytes),
976976
)
977977
# Store this as progress for the checksum calculation.
978-
self._params.fp.progress = self._params.fp.file_size_eof
978+
self._params.fp.progress = self._params.fp.file_size
979979
self._params.finished_params.delivery_code = DeliveryCode.DATA_INCOMPLETE
980980
self._file_transfer_complete_transition()
981981
return False
982982

983983
def _handle_no_error_eof(self) -> bool:
984984
"""Returns whether the transfer can be completed regularly."""
985985
# CFDP 4.6.1.2.9: Declare file size error if progress exceeds file size
986-
if self._params.fp.progress > self._params.fp.file_size_eof: # type: ignore
986+
if self._params.fp.progress > self._params.fp.file_size: # type: ignore
987987
if self._declare_fault(ConditionCode.FILE_SIZE_ERROR) != FaultHandlerCode.IGNORE_ERROR:
988988
return False
989989
elif (
990-
self._params.fp.progress < self._params.fp.file_size_eof # type: ignore
990+
self._params.fp.progress < self._params.fp.file_size # type: ignore
991991
) and self.transmission_mode == TransmissionMode.ACKNOWLEDGED:
992992
# CFDP 4.6.4.3.1: The end offset of the last received file segment and the file
993993
# size as stated in the EOF PDU is not the same, so we need to add that segment to
994994
# the lost segments for the deferred lost segment detection procedure.
995995
self._params.acked_params.lost_seg_tracker.add_lost_segment(
996-
(self._params.fp.progress, self._params.fp.file_size_eof) # type: ignore
996+
(self._params.fp.progress, self._params.fp.file_size) # type: ignore
997997
)
998-
if self._params.fp.file_size_eof != self._params.fp.file_size:
999-
# Can or should this ever happen for a No Error EOF? Treat this like a non-fatal
1000-
# error for now.
1001-
_LOGGER.warning("missmatch of EOF file size and Metadata File Size for success EOF")
1002998
if (
1003999
self.transmission_mode == TransmissionMode.UNACKNOWLEDGED
10041000
and not self._checksum_verify()
@@ -1019,8 +1015,8 @@ def _start_deferred_lost_segment_handling(self) -> None:
10191015
self.states.step = TransactionStep.WAITING_FOR_MISSING_DATA
10201016
self._params.acked_params.deferred_lost_segment_detection_active = True
10211017
self._params.acked_params.lost_seg_tracker.coalesce_lost_segments()
1022-
self._params.acked_params.last_start_offset = self._params.fp.file_size_eof # type: ignore
1023-
self._params.acked_params.last_end_offset = self._params.fp.file_size_eof # type: ignore
1018+
self._params.acked_params.last_start_offset = self._params.fp.file_size # type: ignore
1019+
self._params.acked_params.last_end_offset = self._params.fp.file_size # type: ignore
10241020
self._deferred_lost_segment_handling()
10251021

10261022
def _prepare_eof_ack_packet(self) -> None:

tests/test_dest_handler.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ def _generic_transfer_init(
171171
expected_init_packets: int,
172172
expected_init_state: CfdpState,
173173
expected_init_step: TransactionStep,
174+
expected_file_size: None | int = None,
174175
expected_originating_id: TransactionId | None = None,
175176
) -> FsmResult:
176177
checksum_type = ChecksumType.NULL_CHECKSUM
@@ -185,7 +186,7 @@ def _generic_transfer_init(
185186
)
186187
file_transfer_init = MetadataPdu(params=metadata_params, pdu_conf=self.src_pdu_conf)
187188
self._state_checker(None, expected_init_packets, expected_init_state, expected_init_step)
188-
self.assertEqual(self.dest_handler.file_size, None)
189+
self.assertEqual(self.dest_handler.file_size, expected_file_size)
189190
fsm_res = self.dest_handler.state_machine(file_transfer_init)
190191
self.assertEqual(self.dest_handler.file_size, file_size)
191192
return fsm_res

tests/test_dest_handler_acked.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,11 +331,13 @@ def test_metadata_eof_only_missing_metadata(self):
331331
self.dest_handler.state_machine()
332332
self._state_checker(fsm_res, 1, CfdpState.BUSY, TransactionStep.WAITING_FOR_METADATA)
333333
self._generic_verify_missing_segment_requested(0, 0, [(0, 0)])
334+
# The EOF has a file size of 0, so the file size parameter is already set.
334335
fsm_res = self._generic_transfer_init(
335336
0,
336337
expected_init_packets=0,
337338
expected_init_state=CfdpState.BUSY,
338339
expected_init_step=TransactionStep.WAITING_FOR_METADATA,
340+
expected_file_size=0
339341
)
340342
self._state_checker(fsm_res, 1, CfdpState.BUSY, TransactionStep.WAITING_FOR_FINISHED_ACK)
341343
finished_pdu = self._generic_no_error_finished_pdu_check_acked(fsm_res)

0 commit comments

Comments
 (0)