[Pcsclite-cvs-commit] PCSC/src winscard.c,1.33,1.34
rousseau@haydn.debian.org
rousseau@haydn.debian.org
- Previous message: [Pcsclite-cvs-commit] PCSC/src prothandler.c,1.11,1.12 prothandler.h,1.4,1.5
- Next message: [Pcsclite-cvs-commit] PCSC/src atrhandler.c,1.10,1.11 dyn_hpux.c,1.8,1.9 dyn_unix.c,1.10,1.11 ifdwrapper.c,1.20,1.21 readerfactory.c,1.55,1.56 winscard.c,1.34,1.35 winscard_clnt.c,1.38,1.39
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pcsclite/PCSC/src
In directory haydn:/tmp/cvs-serv12431
Modified Files:
winscard.c
Log Message:
rewrite the parts managing the protocol in SCardConnect() and
SCardReconnect() to use the new PHSetProtocol() prototype and simplify
the code
Index: winscard.c
===================================================================
RCS file: /cvsroot/pcsclite/PCSC/src/winscard.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- winscard.c 18 Jun 2004 14:37:28 -0000 1.33
+++ winscard.c 18 Jun 2004 14:48:58 -0000 1.34
@@ -103,23 +103,8 @@
LPDWORD pdwActiveProtocol)
{
LONG rv;
- PREADER_CONTEXT rContext;
- UCHAR pucAtr[MAX_ATR_SIZE], ucAvailable;
- DWORD dwAtrLength, dwState, dwStatus;
- DWORD dwReaderLen, dwProtocol;
-
- /*
- * Zero out everything
- */
- rv = 0;
- rContext = 0;
- ucAvailable = 0;
- dwAtrLength = 0;
- dwState = 0;
- dwStatus = 0;
- dwReaderLen = 0;
- dwProtocol = 0;
- memset(pucAtr, 0x00, MAX_ATR_SIZE);
+ PREADER_CONTEXT rContext = NULL;
+ DWORD dwStatus;
/*
* Check for NULL parameters
@@ -201,35 +186,26 @@
{
if (dwShareMode != SCARD_SHARE_DIRECT)
{
- memcpy(pucAtr, rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
- dwAtrLength = rContext->readerState->cardAtrLength;
- if (rContext->readerState->cardAtrLength > 0)
- DebugXxd("Card ATR: ", rContext->readerState->cardAtr,
- rContext->readerState->cardAtrLength);
+ UCHAR ucAvailable, ucDefault;
- rContext->readerState->cardProtocol =
- PHGetDefaultProtocol(pucAtr, dwAtrLength);
- ucAvailable = PHGetAvailableProtocols(pucAtr, dwAtrLength);
+ 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 it is set to ANY let it do any of the protocols
*/
if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
- {
- rContext->readerState->cardProtocol = PHSetProtocol(rContext,
- ucAvailable, ucAvailable);
- }
- else
- {
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
- ucAvailable);
- if (rContext->readerState->cardProtocol == -1)
- {
- return SCARD_E_PROTO_MISMATCH;
- }
- }
+ dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
+
+ rContext->readerState->cardProtocol =
+ PHSetProtocol(rContext, dwPreferredProtocols,
+ ucAvailable, ucDefault);
+
+ if (rContext->readerState->cardProtocol == -1)
+ return SCARD_E_PROTO_MISMATCH;
}
}
@@ -312,21 +288,10 @@
LPDWORD pdwActiveProtocol)
{
LONG rv;
- PREADER_CONTEXT rContext;
- UCHAR pucAtr[MAX_ATR_SIZE], ucAvailable;
- DWORD dwAtrLength;
+ PREADER_CONTEXT rContext = NULL;
DebugLogA("Attempting reconnect to token.");
- /*
- * Zero out everything
- */
- rv = 0;
- rContext = 0;
- ucAvailable = 0;
- dwAtrLength = 0;
- memset(pucAtr, 0x00, MAX_ATR_SIZE);
-
if (hCard == 0)
return SCARD_E_INVALID_HANDLE;
@@ -484,44 +449,36 @@
*/
}
- /*
- * Handle the dwActive/Preferred Protocols
- */
+ /*******************************************
+ *
+ * This section tries to decode the ATR
+ * and set up which protocol to use
+ *
+ *******************************************/
if (dwPreferredProtocols & SCARD_PROTOCOL_RAW)
- {
rContext->readerState->cardProtocol = -1;
- }
else
{
if (dwShareMode != SCARD_SHARE_DIRECT)
{
- dwAtrLength = rContext->readerState->cardAtrLength;
- memcpy(pucAtr, rContext->readerState->cardAtr, dwAtrLength);
+ UCHAR ucAvailable, ucDefault;
- rContext->readerState->cardProtocol =
- PHGetDefaultProtocol(pucAtr, dwAtrLength);
- ucAvailable = PHGetAvailableProtocols(pucAtr, dwAtrLength);
+ 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 it is set to ANY let it do any of the protocols */
if (dwPreferredProtocols & SCARD_PROTOCOL_ANY)
- {
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext,
- SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, ucAvailable);
- }
- else
- {
- rContext->readerState->cardProtocol =
- PHSetProtocol(rContext, dwPreferredProtocols,
- ucAvailable);
+ dwPreferredProtocols = SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1;
- if (rContext->readerState->cardProtocol == -1)
- {
- return SCARD_E_PROTO_MISMATCH;
- }
- }
+ rContext->readerState->cardProtocol =
+ PHSetProtocol(rContext, dwPreferredProtocols,
+ ucAvailable, ucDefault);
+
+ if (rContext->readerState->cardProtocol == -1)
+ return SCARD_E_PROTO_MISMATCH;
}
}
- Previous message: [Pcsclite-cvs-commit] PCSC/src prothandler.c,1.11,1.12 prothandler.h,1.4,1.5
- Next message: [Pcsclite-cvs-commit] PCSC/src atrhandler.c,1.10,1.11 dyn_hpux.c,1.8,1.9 dyn_unix.c,1.10,1.11 ifdwrapper.c,1.20,1.21 readerfactory.c,1.55,1.56 winscard.c,1.34,1.35 winscard_clnt.c,1.38,1.39
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]