Merge pull request 'better error handling' (#161) from better-nak-error into main
Reviewed-on: #161
This commit was merged in pull request #161.
This commit is contained in:
@@ -52,13 +52,21 @@ fn write_start_and_end_of_scope(
|
|||||||
current_index
|
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
|
/// 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
|
/// configuration to stay below a certain maximum packet size. This is useful to calculate how many
|
||||||
/// NAK PDUs are required inside a NAK sequence.
|
/// 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(
|
pub fn calculate_max_segment_requests(
|
||||||
mut max_packet_size: usize,
|
mut max_packet_size: usize,
|
||||||
pdu_header: &PduHeader,
|
pdu_header: &PduHeader,
|
||||||
) -> Result<usize, usize> {
|
) -> Result<usize, TooSmallForPduHeaderError> {
|
||||||
let mut decrement = pdu_header.header_len() + 1;
|
let mut decrement = pdu_header.header_len() + 1;
|
||||||
if pdu_header.common_pdu_conf().crc_flag == CrcFlag::WithCrc {
|
if pdu_header.common_pdu_conf().crc_flag == CrcFlag::WithCrc {
|
||||||
decrement += 2;
|
decrement += 2;
|
||||||
@@ -69,7 +77,7 @@ pub fn calculate_max_segment_requests(
|
|||||||
decrement += 16;
|
decrement += 16;
|
||||||
}
|
}
|
||||||
if max_packet_size < decrement {
|
if max_packet_size < decrement {
|
||||||
return Err(max_packet_size);
|
return Err(TooSmallForPduHeaderError);
|
||||||
}
|
}
|
||||||
max_packet_size -= decrement;
|
max_packet_size -= decrement;
|
||||||
Ok(
|
Ok(
|
||||||
@@ -332,7 +340,7 @@ impl<'buf> NakPduCreatorWithReservedSeqReqsBuf<'buf> {
|
|||||||
pub fn calculate_max_segment_requests(
|
pub fn calculate_max_segment_requests(
|
||||||
max_packet_size: usize,
|
max_packet_size: usize,
|
||||||
pdu_header: &PduHeader,
|
pdu_header: &PduHeader,
|
||||||
) -> Result<usize, usize> {
|
) -> Result<usize, TooSmallForPduHeaderError> {
|
||||||
calculate_max_segment_requests(max_packet_size, pdu_header)
|
calculate_max_segment_requests(max_packet_size, pdu_header)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user