improved impl, added reset method for handler
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit

This commit is contained in:
Robin Müller 2023-08-11 12:17:41 +02:00
parent c8c18c54df
commit f3d862ac19
Signed by: muellerr
GPG Key ID: A649FB78196E3849

View File

@ -149,9 +149,7 @@ impl DestinationHandler {
return Ok(None); return Ok(None);
} }
let directive = self.packets_to_send_ctx.directive.unwrap(); let directive = self.packets_to_send_ctx.directive.unwrap();
let mut written_size = 0; let written_size = match directive {
match directive {
FileDirectiveType::EofPdu => todo!(),
FileDirectiveType::FinishedPdu => { FileDirectiveType::FinishedPdu => {
let pdu_header = PduHeader::new_no_file_data(self.pdu_conf, 0); let pdu_header = PduHeader::new_no_file_data(self.pdu_conf, 0);
let finished_pdu = if self.transaction_params.condition_code let finished_pdu = if self.transaction_params.condition_code
@ -175,14 +173,16 @@ impl DestinationHandler {
entity_id, entity_id,
) )
}; };
written_size = finished_pdu.write_to_bytes(buf)?; finished_pdu.write_to_bytes(buf)?
} }
FileDirectiveType::AckPdu => todo!(), FileDirectiveType::AckPdu => todo!(),
FileDirectiveType::MetadataPdu => todo!(),
FileDirectiveType::NakPdu => todo!(), FileDirectiveType::NakPdu => todo!(),
FileDirectiveType::PromptPdu => todo!(),
FileDirectiveType::KeepAlivePdu => todo!(), FileDirectiveType::KeepAlivePdu => todo!(),
} _ => {
// This should never happen and is considered an internal impl error
panic!("invalid file directive {directive:?} for dest handler send packet");
}
};
Ok(Some((directive, written_size))) Ok(Some((directive, written_size)))
} }
@ -306,6 +306,7 @@ impl DestinationHandler {
todo!(); todo!();
} }
if self.step == TransactionStep::SendingFinishedPdu { if self.step == TransactionStep::SendingFinishedPdu {
self.reset();
return Ok(()); return Ok(());
} }
Ok(()) Ok(())
@ -360,6 +361,13 @@ impl DestinationHandler {
Ok(()) Ok(())
} }
fn reset(&mut self) {
self.step = TransactionStep::Idle;
self.state = State::Idle;
self.packets_to_send_ctx.packet_available = false;
self.transaction_params.reset();
}
fn prepare_finished_pdu(&mut self) -> Result<(), DestError> { fn prepare_finished_pdu(&mut self) -> Result<(), DestError> {
self.packets_to_send_ctx.packet_available = true; self.packets_to_send_ctx.packet_available = true;
self.packets_to_send_ctx.directive = Some(FileDirectiveType::FinishedPdu); self.packets_to_send_ctx.directive = Some(FileDirectiveType::FinishedPdu);