diff --git a/src/cfdp/pdu/nak.rs b/src/cfdp/pdu/nak.rs index ab3ff34..a55a9b9 100644 --- a/src/cfdp/pdu/nak.rs +++ b/src/cfdp/pdu/nak.rs @@ -52,13 +52,21 @@ fn write_start_and_end_of_scope( current_index } +#[derive(Debug, PartialEq, Eq, Copy, Clone, thiserror::Error)] +#[error("packet buffer too small for PDU header")] +#[cfg_attr(feature = "defmt", derive(defmt::Format))] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct TooSmallForPduHeaderError; + /// This function can be used to retrieve the maximum amount of segment request given a PDU /// configuration to stay below a certain maximum packet size. This is useful to calculate how many /// NAK PDUs are required inside a NAK sequence. +/// +/// Returns an error if the packet buffer can not even hold the PDU header. pub fn calculate_max_segment_requests( mut max_packet_size: usize, pdu_header: &PduHeader, -) -> Result { +) -> Result { let mut decrement = pdu_header.header_len() + 1; if pdu_header.common_pdu_conf().crc_flag == CrcFlag::WithCrc { decrement += 2; @@ -69,7 +77,7 @@ pub fn calculate_max_segment_requests( decrement += 16; } if max_packet_size < decrement { - return Err(max_packet_size); + return Err(TooSmallForPduHeaderError); } max_packet_size -= decrement; Ok( @@ -330,7 +338,7 @@ impl<'buf> NakPduCreatorWithReservedSeqReqsBuf<'buf> { pub fn calculate_max_segment_requests( max_packet_size: usize, pdu_header: &PduHeader, - ) -> Result { + ) -> Result { calculate_max_segment_requests(max_packet_size, pdu_header) }