[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 ]