@@ -567,8 +567,6 @@ def __non_idle_fsm(self, packet: GenericPduPacket | None) -> None:
567567 if self .states .step == TransactionStep .WAITING_FOR_MISSING_DATA :
568568 if packet is not None and pdu_holder .pdu_type == PduType .FILE_DATA :
569569 self ._handle_fd_pdu (pdu_holder .to_file_data_pdu ())
570- if self ._params .acked_params .deferred_lost_segment_detection_active :
571- self ._reset_nak_activity_parameters ()
572570 if self ._params .acked_params .deferred_lost_segment_detection_active :
573571 self ._deferred_lost_segment_handling ()
574572 if self .states .step == TransactionStep .TRANSFER_COMPLETION :
@@ -779,10 +777,12 @@ def _handle_waiting_for_missing_metadata(self, packet_holder: PduHolder) -> None
779777 self ._handle_file_data_without_previous_metadata (packet_holder .to_file_data_pdu ())
780778 elif packet_holder .pdu_directive_type == DirectiveType .METADATA_PDU :
781779 self ._handle_metadata_packet (packet_holder .to_metadata_pdu ())
780+ # Reception of missing segments resets the NAK activity parameters. See CFDP 4.6.4.7.
782781 if self ._params .acked_params .deferred_lost_segment_detection_active :
783782 self ._reset_nak_activity_parameters ()
784783 elif packet_holder .pdu_directive_type == DirectiveType .EOF_PDU : # type: ignore
785784 self ._handle_eof_without_previous_metadata (packet_holder .to_eof_pdu ())
785+ # Reception of missing segments resets the NAK activity parameters. See CFDP 4.6.4.7.
786786 if self ._params .acked_params .deferred_lost_segment_detection_active :
787787 self ._reset_nak_activity_parameters ()
788788
@@ -908,9 +908,13 @@ def _lost_segment_handling(self, offset: int, data_len: int) -> None:
908908 self ._params .acked_params .last_end_offset = offset + data_len
909909 if offset + data_len <= self ._params .acked_params .last_start_offset :
910910 # Might be a re-requested FD PDU.
911- _ = self ._params .acked_params .lost_seg_tracker .remove_lost_segment (
911+ removed = self ._params .acked_params .lost_seg_tracker .remove_lost_segment (
912912 (offset , offset + data_len )
913913 )
914+ # Reception of missing segments resets the NAK activity parameters.
915+ # See CFDP 4.6.4.7.
916+ if removed and self ._params .acked_params .deferred_lost_segment_detection_active :
917+ self ._reset_nak_activity_parameters ()
914918
915919 @staticmethod
916920 def _iter_segment_requests (
0 commit comments