pub struct TransactionManager {
    transactions: VecDeque<FidoTransaction>,
    last_transaction_time: Instant,
    pub transaction_timer: PollTimer,
    clock: Clock,
}
Expand description

Struct to keep track of all active transactions. It cycles through them, starts, stops and removes outdated ones as they expire.

Fields§

§transactions: VecDeque<FidoTransaction>

Sorted (by age) list of transactions.

§last_transaction_time: Instant

Timestamp of the latest transaction.

§transaction_timer: PollTimer

Timer used to poll for expired transactions.

§clock: Clock

Clock representation, overridden for testing.

Implementations§

source§

impl TransactionManager

source

pub fn new() -> Result<TransactionManager>

source

pub fn pop_transaction(&mut self) -> Option<FidoTransaction>

source

pub fn close_transaction(&mut self, cid: u32) -> bool

Attempts to close a transaction if it exists. Otherwise it silently drops it. It returns true to signal that there’s no more transactions active and the device can return to an idle state.

source

pub fn start_transaction(&mut self, cid: u32, nonce: [u8; 8]) -> bool

Starts a new transaction in the queue. Returns true if it is the first transaction, signaling that the device would have to transition from idle to active state.

source

pub fn expire_transactions(&mut self) -> bool

Tests the transaction expiration time. If the latest transaction time is beyond the acceptable timeout, it removes all transactions and signals to reset the device (returns true).

source

pub fn reset(&mut self)

Resets the TransactionManager, dropping all pending transactions.

source

pub fn update_transaction(&mut self, cid: u32, resp_bcnt: u16, resp_size: u16)

Updates the bcnt and size of the first transaction that matches the given CID.

source

pub fn get_transaction(&mut self, cid: u32) -> Option<FidoTransaction>

Returns the first transaction that matches the given CID.

source

pub fn get_transaction_from_nonce( &mut self, nonce: [u8; 8] ) -> Option<FidoTransaction>

Returns the first broadcast transaction that matches the given nonce.

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
§

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

§

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.
§

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.
§

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.
§

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.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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>,

§

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>,

§

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V