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: InstantTimestamp of the latest transaction.
transaction_timer: PollTimerTimer used to poll for expired transactions.
clock: ClockClock 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: [u8; 4]) -> bool
pub fn close_transaction(&mut self, cid: [u8; 4]) -> 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: [u8; 4], nonce: [u8; 8]) -> bool
pub fn start_transaction(&mut self, cid: [u8; 4], 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: [u8; 4],
resp_bcnt: u16,
resp_size: u16,
)
pub fn update_transaction( &mut self, cid: [u8; 4], 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: [u8; 4]) -> Option<FidoTransaction>
pub fn get_transaction(&mut self, cid: [u8; 4]) -> 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.