Destination handler now answers a retransmitted EOF PDU instead of silently reprocessing it.
Per CFDP 4.7.2 every EOF PDU must be acknowledged, and a retransmission means our previous ACK
was lost. It used to be handled like a brand new EOF regardless of transaction state, which
re-ran completion, re-sent a fresh Finished PDU, and restarted its positive ACK procedure on
every retransmission the sender made.
- Fix destination and source handler TransactionParams::reset only
clearing 2 of ~11-18 fields. Stale state broke every transaction
after the first one on a reused handler instance.
- Fix metadata-only transactions (e.g. a Proxy Put Request) to
correctly send and expect an EOF PDU per CCSDS 727.0-B-5 4.6.1.1.9.
The source handler no longer checksums a nonexistent source file,
and the destination handler no longer touches a destination file
that was never named.
- Fix a panic when a metadata PDU's Message To User TLVs overflow the
destination handler's internal buffer. Return
DestError::MsgsToUserBufferTooSmall instead, and bump the buffer
from 1024 to 2048 bytes.
- Add regression tests for all of the above.
- Update the changelog.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012A4YswnSmvS9Y56WZAG9PQ
- Remove FinishedParams::reset, now dead code since
TransactionParams::reset does a full struct reset instead of
calling it
- Drop the transaction_id() comparison from the two completion
indication test helpers. transaction_id() now correctly returns
None once the handler is back to Idle, so comparing it against the
finished indication's id after completion no longer holds. The
remaining file_status/delivery_code/condition_code checks are the
ones that actually mattered.
- TransactionParams::reset only cleared two of its fields, leaving
stale acknowledged-mode state behind between transactions
- That state made the next transaction's Metadata PDU look like a
duplicate, so it was silently dropped and the transfer never
created its destination file