diff options
author | Yuval Kashtan <ykashtan@redhat.com> | 2010-07-07 20:17:11 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2010-07-07 20:35:21 +0300 |
commit | 4a9450095700865359184aa7f0944a7608062f04 (patch) | |
tree | b7db56bc0a113abd8f8e9789f84db02b2e749b90 | |
parent | 4641d7b8a72a4ff5a35e60cf9048b4535ad3ab18 (diff) |
support reader from commandlien (and whitespace)
-rw-r--r-- | SCClient.c | 91 |
1 files changed, 60 insertions, 31 deletions
@@ -17,7 +17,10 @@ #define ReaderName "Athena ASE IIIe 00 00" int sock; +SCARDHANDLE hCard; +char *szReaderName; SCARDCONTEXT hContext; +DWORD dwActiveProtocol; int PrintByteArray ( @@ -108,6 +111,21 @@ printf ("Waiting for card!\n"); } } + rv = SCardConnect ( + hContext, + szReaderName, + SCARD_SHARE_SHARED, + SCARD_PROTOCOL_T0, + &hCard, + &dwActiveProtocol + ); + if (rv != SCARD_S_SUCCESS) { + printf ("SCardConnect Error (%d)\n", rv); + exit (1); + } else { + printf ("!hCard=%x!\n", hCard); + } + SendMsg ( SCard_ATR, rgReaderStates[0].rgbAtr, @@ -126,16 +144,27 @@ main ( SCRMsgHeader mhHeader; LONG rv; - SCARDHANDLE hCard; SCARD_READERSTATE_A rgReaderStates[1]; - DWORD dwActiveProtocol, dwSendLength, dwRecvLength; + DWORD dwSendLength; + DWORD dwRecvLength; SCARD_IO_REQUEST pioRecvPci; BYTE pbRecvBuffer[APDUBufSize]; BYTE pbSendBuffer[APDUBufSize]; - - if (argc != 3) { - PrintUsage(); - exit (4); + + if (argc == 4) { + szReaderName = argv[2]; + } else { + szReaderName = (char *) malloc (strlen (ReaderName)); + strncpy ( + szReaderName, + ReaderName, + strlen (ReaderName) + ); + + if (argc != 3) { + PrintUsage(); + exit (4); + } } sock = socket ( @@ -144,7 +173,7 @@ main ( 0 ); if (sock < 0) { - // Error + // Error printf ("Error opening socket!\n"); } @@ -167,16 +196,16 @@ main ( printf ("Connected (sizeof Header=%d)!\n", sizeof (mhHeader)); rv = SCardEstablishContext ( - SCARD_SCOPE_SYSTEM, - NULL, - NULL, + SCARD_SCOPE_SYSTEM, + NULL, + NULL, &hContext ); if (rv != SCARD_S_SUCCESS) { printf ("SCardEstablishContext error (%d)\n", rv); } - rgReaderStates[0].szReader = ReaderName; + rgReaderStates[0].szReader = szReaderName; rgReaderStates[0].dwCurrentState = SCARD_STATE_UNAWARE; rv = SCardGetStatusChange ( @@ -214,11 +243,11 @@ PrintByteArray (rgReaderStates[0].rgbAtr, rgReaderStates[0].cbAtr); ); rv = SCardConnect ( - hContext, - ReaderName, + hContext, + szReaderName, SCARD_SHARE_SHARED, - SCARD_PROTOCOL_T0, - &hCard, + SCARD_PROTOCOL_T0, + &hCard, &dwActiveProtocol ); if (rv != SCARD_S_SUCCESS) { @@ -259,12 +288,12 @@ PrintByteArray (pbSendBuffer, mhHeader.nLength); dwSendLength = mhHeader.nLength; dwRecvLength = sizeof(pbRecvBuffer); rv = SCardTransmit ( - hCard, - SCARD_PCI_T0, - pbSendBuffer, + hCard, + SCARD_PCI_T0, + pbSendBuffer, dwSendLength, - &pioRecvPci, - pbRecvBuffer, + &pioRecvPci, + pbRecvBuffer, &dwRecvLength ); if (rv == SCARD_S_SUCCESS) { @@ -277,12 +306,6 @@ PrintByteArray (pbRecvBuffer, mhHeader.nLength); dwRecvLength ); } else { - SendMsg ( - SCard_Error, - &rv, - sizeof (LONG) - ); - if (rv == SCARD_W_REMOVED_CARD) { // Card removed SendMsg ( @@ -291,6 +314,12 @@ PrintByteArray (pbRecvBuffer, mhHeader.nLength); 0 ); WaitForCardInsert (); + } else { + SendMsg ( + SCard_Error, + &rv, + sizeof (LONG) + ); } } break; @@ -303,12 +332,12 @@ PrintByteArray (pbRecvBuffer, mhHeader.nLength); dwSendLength = sizeof(pbSendBuffer); dwRecvLength = sizeof(pbRecvBuffer); rv = SCardTransmit ( - hCard, - SCARD_PCI_T0, - pbSendBuffer, + hCard, + SCARD_PCI_T0, + pbSendBuffer, dwSendLength, - &pioRecvPci, - pbRecvBuffer, + &pioRecvPci, + pbRecvBuffer, &dwRecvLength ); if (rv != SCARD_S_SUCCESS) { |