rework TCP spacepackets validation process
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit

This commit is contained in:
2024-04-15 18:43:11 +02:00
parent 31b208737e
commit ca6e4816ab
8 changed files with 206 additions and 116 deletions

View File

@ -7,14 +7,35 @@ use std::{
use log::{info, warn};
use satrs::{
encoding::ccsds::{SpacePacketValidation, SpacePacketValidator},
hal::std::tcp_server::{HandledConnectionHandler, ServerConfig, TcpSpacepacketsServer},
spacepackets::PacketId,
spacepackets::{CcsdsPacket, PacketId},
tmtc::{PacketSenderRaw, PacketSource},
};
#[derive(Default)]
pub struct ConnectionFinishedHandler {}
pub struct SimplePacketValidator {
pub valid_ids: HashSet<PacketId>,
}
impl SpacePacketValidator for SimplePacketValidator {
fn validate(
&self,
sp_header: &satrs::spacepackets::SpHeader,
_raw_buf: &[u8],
) -> satrs::encoding::ccsds::SpacePacketValidation {
if self.valid_ids.contains(&sp_header.packet_id()) {
return SpacePacketValidation::Valid;
}
log::warn!("ignoring space packet with header {:?}", sp_header);
// We could perform a CRC check.. but lets keep this simple and assume that TCP ensures
// data integrity.
SpacePacketValidation::Ignore
}
}
impl HandledConnectionHandler for ConnectionFinishedHandler {
fn handled_connection(&mut self, info: satrs::hal::std::tcp_server::HandledConnectionInfo) {
info!(
@ -83,7 +104,7 @@ impl PacketSource for SyncTcpTmSource {
pub type TcpServer<ReceivesTc, SendError> = TcpSpacepacketsServer<
SyncTcpTmSource,
ReceivesTc,
HashSet<PacketId>,
SimplePacketValidator,
ConnectionFinishedHandler,
(),
SendError,
@ -101,14 +122,14 @@ impl<TcSender: PacketSenderRaw<Error = SendError>, SendError: Debug + 'static>
cfg: ServerConfig,
tm_source: SyncTcpTmSource,
tc_sender: TcSender,
packet_id_lookup: HashSet<PacketId>,
valid_ids: HashSet<PacketId>,
) -> Result<Self, std::io::Error> {
Ok(Self(
TcpSpacepacketsServer::new(
cfg,
tm_source,
tc_sender,
packet_id_lookup,
SimplePacketValidator { valid_ids },
ConnectionFinishedHandler::default(),
None,
)?,