Add $reselect parameter to start_tx! that specifies if the card should be re-selected if it was reset

This commit is contained in:
Heiko Schaefer 2022-01-14 23:16:35 +01:00
parent f4eaca229d
commit c43b53d210
No known key found for this signature in database
GPG key ID: 4A849A1904CCBD7D
2 changed files with 9 additions and 6 deletions

View file

@ -706,8 +706,9 @@ pub fn run_test(
let card_caps = card_client.card_caps(); let card_caps = card_client.card_caps();
let mut tx: Transaction = openpgp_card_pcsc::start_tx!(card_client.card()) let mut tx: Transaction =
.map_err(|e| anyhow!(e))?; openpgp_card_pcsc::start_tx!(card_client.card(), true)
.map_err(|e| anyhow!(e))?;
let mut txc = PcscTxClient::new(&mut tx, card_caps); let mut txc = PcscTxClient::new(&mut tx, card_caps);
t(&mut txc, param) t(&mut txc, param)

View file

@ -19,7 +19,7 @@ const FEATURE_MODIFY_PIN_DIRECT: u8 = 0x07;
#[macro_export] #[macro_export]
macro_rules! start_tx { macro_rules! start_tx {
($card:expr) => {{ ($card:expr, $reselect:expr) => {{
use pcsc::{Disposition, Protocols, ShareMode}; use pcsc::{Disposition, Protocols, ShareMode};
let mut was_reset = false; let mut was_reset = false;
@ -37,7 +37,9 @@ macro_rules! start_tx {
); );
let mut txc = PcscTxClient::new(&mut tx, None); let mut txc = PcscTxClient::new(&mut tx, None);
PcscTxClient::select(&mut txc)?; if $reselect {
PcscTxClient::select(&mut txc)?;
}
} }
break Ok(tx); break Ok(tx);
@ -260,7 +262,7 @@ impl PcscClient {
{ {
// start transaction // start transaction
log::debug!("1"); log::debug!("1");
let mut tx: Transaction = start_tx!(card)?; let mut tx: Transaction = start_tx!(card, false)?;
let mut txc = PcscTxClient::new(&mut tx, None); let mut txc = PcscTxClient::new(&mut tx, None);
log::debug!("3"); log::debug!("3");
@ -430,7 +432,7 @@ impl CardClient for PcscClient {
let stat = self.card.status2_owned(); let stat = self.card.status2_owned();
log::debug!("PcscClient transmit - status2: {:x?}", stat); log::debug!("PcscClient transmit - status2: {:x?}", stat);
let mut tx: Transaction = start_tx!(self.card)?; let mut tx: Transaction = start_tx!(self.card, true)?;
log::debug!("PcscClient transmit 2"); log::debug!("PcscClient transmit 2");
let mut txc = PcscTxClient::new(&mut tx, self.card_caps); let mut txc = PcscTxClient::new(&mut tx, self.card_caps);