DestinationHandler

Struct DestinationHandler 

Source
pub struct DestinationHandler { /* private fields */ }
Available on crate features alloc and std only.
Expand description

This is the primary CFDP destination handler. It models the CFDP destination entity, which is primarily responsible for receiving files sent from another CFDP entity. It performs the reception side of File Copy Operations.

The DestinationHandler::state_machine function is the primary function to drive the destination handler. It can be used to insert packets into the destination handler and driving the state machine, which might generate new packets to be sent to the remote entity. Please note that the destination handler can also only process Metadata, EOF and Prompt PDUs in addition to ACK PDUs where the acknowledged PDU is the Finished PDU.

All generated packets are sent via the CfdpPacketSender trait, which is implemented by the user and passed as a constructor parameter. The number of generated packets is returned by the state machine call.

Implementations§

Source§

impl DestinationHandler

Source

pub fn new( local_cfg: LocalEntityConfig, max_packet_len: usize, packet_sender: Box<dyn CfdpPacketSender>, vfs: Box<dyn VirtualFilestore>, remote_cfg_table: Box<dyn RemoteEntityConfigProvider>, check_timer_creator: Box<dyn CheckTimerCreator>, ) -> Self

Constructs a new destination handler.

§Arguments
  • local_cfg - The local CFDP entity configuration, consisting of the local entity ID, the indication configuration, and the fault handlers.
  • max_packet_len - The maximum expected generated packet size in bytes. Each time a packet is sent, it will be buffered inside an internal buffer. The length of this buffer will be determined by this parameter. This parameter can either be a known upper bound, or it can specifically be determined by the largest packet size parameter of all remote entity configurations in the passed remote_cfg_table.
  • packet_sender - All generated packets are sent via this abstraction.
  • vfs - Virtual filestore implementation to decouple the CFDP implementation from the underlying filestore/filesystem. This allows to use this handler for embedded systems where a standard runtime might not be available.
  • remote_cfg_table - A table of all expected remote entities this entity will communicate with. It contains various configuration parameters required for file transfers.
  • check_timer_creator - This is used by the CFDP handler to generate timers required by various tasks.
Source

pub fn state_machine( &mut self, cfdp_user: &mut impl CfdpUser, packet_to_insert: Option<&PacketInfo<'_>>, ) -> Result<u32, DestError>

This is the core function to drive the destination handler. It is also used to insert packets into the destination handler.

The state machine should either be called if a packet with the appropriate destination ID is received, or periodically in IDLE periods to perform all CFDP related tasks, for example checking for timeouts or missed file segments.

Source

pub fn transmission_mode(&self) -> Option<TransmissionMode>

Returns None if the state machine is IDLE, and the transmission mode of the current request otherwise.

Source

pub fn transaction_id(&self) -> Option<TransactionId>

Source

pub fn handle_prompt_pdu(&mut self, _raw_packet: &[u8]) -> Result<(), DestError>

Source

pub fn step(&self) -> TransactionStep

Get the step, which denotes the exact step of a pending CFDP transaction when applicable.

Source

pub fn state(&self) -> State

Get the step, which denotes whether the CFDP handler is active, and which CFDP class is used if it is active.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.