reset the card before disconnecting to unpower and reset the secure messaging status

git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@265 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
frankmorgner
2010-09-15 09:49:10 +00:00
parent 8623c7fe6e
commit 1a31d39d02
2 changed files with 8 additions and 3 deletions

View File

@@ -116,10 +116,12 @@ detect_card_presence(int slot)
if (sc_result == 0
&& card_in_slot[slot]
&& sc_card_valid(card_in_slot[slot])) {
sc_reset(card_in_slot[slot]);
sc_disconnect_card(card_in_slot[slot], 0);
sc_debug(ctx, "Card removed from slot %d", slot);
}
if (sc_result & SC_SLOT_CARD_CHANGED) {
sc_reset(card_in_slot[slot]);
sc_disconnect_card(card_in_slot[slot], 0);
sc_debug(ctx, "Card exchanged in slot %d", slot);
}
@@ -164,6 +166,7 @@ void ccid_shutdown()
int i;
for (i = 0; i < sizeof *card_in_slot; i++) {
if (card_in_slot[i] && sc_card_valid(card_in_slot[i])) {
sc_reset(card_in_slot[i]);
sc_disconnect_card(card_in_slot[i], 0);
}
}
@@ -412,6 +415,7 @@ perform_PC_to_RDR_IccPowerOn(const __u8 *in, size_t inlen, __u8 **out, size_t *o
if (request->bSlot < sizeof *card_in_slot) {
if (card_in_slot[request->bSlot]
&& sc_card_valid(card_in_slot[request->bSlot])) {
sc_reset(card_in_slot[request->bSlot]);
sc_disconnect_card(card_in_slot[request->bSlot], 0);
}
sc_result = sc_connect_card(reader, request->bSlot,
@@ -457,8 +461,10 @@ perform_PC_to_RDR_IccPowerOff(const __u8 *in, size_t inlen, __u8 **out, size_t *
if (request->bSlot > sizeof *card_in_slot)
sc_result = SC_ERROR_INVALID_DATA;
else
else {
sc_reset(card_in_slot[request->bSlot]);
sc_result = sc_disconnect_card(card_in_slot[request->bSlot], 0);
}
return get_RDR_to_PC_SlotStatus(request->bSlot, request->bSeq, sc_result,
out, outlen, NULL, 0);
@@ -855,8 +861,6 @@ perform_PC_to_RDR_Secure_EstablishPACEChannel(sc_card_t *card,
pace_input.certificate_description_length);
/*if (sc_reset(card) < 0)*/
/*sc_error(ctx, "Could not reset card, will continue anyway");*/
#ifdef BUERGERCLIENT_WORKAROUND
pace_output.ef_cardaccess_length = ef_cardaccess_length;
pace_output.ef_cardaccess = ef_cardaccess;

View File

@@ -515,6 +515,7 @@ err:
if (pace_output.id_pcd)
free(pace_output.id_pcd);
sc_reset(card);
sc_disconnect_card(card, 0);
sc_release_context(ctx);