[Pcsclite-cvs-commit] PCSC/src winscard.c,1.41,1.42
rousseau@haydn.debian.org
rousseau@haydn.debian.org
Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv20158
Modified Files:
winscard.c
Log Message:
perform a PPS (PHSetProtocol()) only if the current protocol is
SCARD_PROTOCOL_UNSET otherwise only check that the requested protocol is
available.
This will avoid generating a PPS request that would not be just after a
power up. The previous code worked only when the card was reseted at
SCardDisconnect() but not when SCARD_LEAVE_CARD was used.
Index: winscard.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/winscard.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- winscard.c 2 Aug 2004 20:12:44 -0000 1.41
+++ winscard.c 2 Aug 2004 20:21:10 -0000 1.42
@@ -179,29 +179,38 @@
{
if (dwShareMode != SCARD_SHARE_DIRECT)
{
- UCHAR ucAvailable, ucDefault;
+ /* the protocol is not yet set (no PPS yet) */
+ if (SCARD_PROTOCOL_UNSET == rContext->readerState->cardProtocol)
+ {
+ UCHAR ucAvailable, ucDefault;
- ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
- ucAvailable =
- PHGetAvailableProtocols(rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
+ ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
+ rContext->readerState->cardAtrLength);
+ ucAvailable =
+ PHGetAvailableProtocols(rContext->readerState->cardAtr,
+ rContext->readerState->cardAtrLength);
- /*
- * If it is set to ANY let it do any of the protocols
- */
- if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
- dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
+ /*
+ * If it is set to ANY let it do any of the protocols
+ */
+ if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
+ dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
- ucAvailable, ucDefault);
+ rContext->readerState->cardProtocol =
+ PHSetProtocol(rContext, dwPreferredProtocols,
+ ucAvailable, ucDefault);
- if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
- return SCARD_W_UNRESPONSIVE_CARD;
+ if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
+ return SCARD_W_UNRESPONSIVE_CARD;
- if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
- return SCARD_E_PROTO_MISMATCH;
+ if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
+ return SCARD_E_PROTO_MISMATCH;
+ }
+ else
+ {
+ if (! (dwPreferredProtocols & rContext->readerState->cardProtocol))
+ return SCARD_E_PROTO_MISMATCH;
+ }
}
}
@@ -469,27 +478,36 @@
{
if (dwShareMode != SCARD_SHARE_DIRECT)
{
- UCHAR ucAvailable, ucDefault;
+ /* the protocol is not yet set (no PPS yet) */
+ if (SCARD_PROTOCOL_UNSET == rContext->readerState->cardProtocol)
+ {
+ UCHAR ucAvailable, ucDefault;
- ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
- ucAvailable =
- PHGetAvailableProtocols(rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
+ ucDefault = PHGetDefaultProtocol(rContext->readerState->cardAtr,
+ rContext->readerState->cardAtrLength);
+ ucAvailable =
+ PHGetAvailableProtocols(rContext->readerState->cardAtr,
+ rContext->readerState->cardAtrLength);
- /* If it is set to ANY let it do any of the protocols */
- if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
- dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
+ /* If it is set to ANY let it do any of the protocols */
+ if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
+ dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
- ucAvailable, ucDefault);
+ rContext->readerState->cardProtocol =
+ PHSetProtocol(rContext, dwPreferredProtocols,
+ ucAvailable, ucDefault);
- if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
- return SCARD_W_UNRESPONSIVE_CARD;
+ if (SET_PROTOCOL_PPS_FAILED == rContext->readerState->cardProtocol)
+ return SCARD_W_UNRESPONSIVE_CARD;
- if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
- return SCARD_E_PROTO_MISMATCH;
+ if (SET_PROTOCOL_WRONG_ARGUMENT == rContext->readerState->cardProtocol)
+ return SCARD_E_PROTO_MISMATCH;
+ }
+ else
+ {
+ if (! (dwPreferredProtocols & rContext->readerState->cardProtocol))
+ return SCARD_E_PROTO_MISMATCH;
+ }
}
}