use a transation while sending and receiving data

This commit is contained in:
Klas Lindfors
2015-05-08 09:57:51 +02:00
parent df018b24b4
commit bf3fcc77fe
+15
View File
@@ -230,8 +230,16 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ,
const unsigned char *in_ptr = in_data;
unsigned long max_out = *out_len;
ykpiv_rc res;
long rc;
*out_len = 0;
rc = SCardBeginTransaction(state->card);
if(rc != SCARD_S_SUCCESS) {
if(state->verbose) {
fprintf(stderr, "error: Failed to being pcsc transaction, rc=%08lx\n", rc);
}
return YKPIV_PCSC_ERROR;
}
do {
size_t this_size = 0xff;
unsigned long recv_len = 0xff;
@@ -291,6 +299,13 @@ ykpiv_rc ykpiv_transfer_data(ykpiv_state *state, const unsigned char *templ,
out_data += recv_len - 2;
*out_len += recv_len - 2;
}
rc = SCardEndTransaction(state->card, SCARD_LEAVE_CARD);
if(rc != SCARD_S_SUCCESS) {
if(state->verbose) {
fprintf(stderr, "error: Failed to end pcsc transaction, rc=%08lx\n", rc);
}
return YKPIV_PCSC_ERROR;
}
return YKPIV_OK;
}