Struct devices::usb::backend::fido_backend::fido_transaction::TransactionManager
source · 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
impl TransactionManager
pub fn new() -> Result<TransactionManager>
pub fn pop_transaction(&mut self) -> Option<FidoTransaction>
sourcepub fn close_transaction(&mut self, cid: u32) -> bool
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.
sourcepub fn start_transaction(&mut self, cid: u32, nonce: [u8; 8]) -> bool
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.
sourcepub fn expire_transactions(&mut self) -> bool
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).
sourcepub fn update_transaction(&mut self, cid: u32, resp_bcnt: u16, resp_size: u16)
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.
sourcepub fn get_transaction(&mut self, cid: u32) -> Option<FidoTransaction>
pub fn get_transaction(&mut self, cid: u32) -> Option<FidoTransaction>
Returns the first transaction that matches the given CID.
sourcepub fn get_transaction_from_nonce(
&mut self,
nonce: [u8; 8]
) -> Option<FidoTransaction>
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§
impl RefUnwindSafe for TransactionManager
impl Send for TransactionManager
impl Sync for TransactionManager
impl Unpin for TransactionManager
impl UnwindSafe for TransactionManager
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.