| 43 |
|
|
| 44 |
static SCARDCONTEXT localHContext = 0; |
static SCARDCONTEXT localHContext = 0; |
| 45 |
static ULONG blockingContext = MSC_BLOCKSTATUS_RESUME; |
static ULONG blockingContext = MSC_BLOCKSTATUS_RESUME; |
| 46 |
|
static pthread_t callbackThread; |
| 47 |
|
|
| 48 |
/* |
/* |
| 49 |
* internal function |
* internal function |
| 50 |
*/ |
*/ |
| 398 |
(strcmp(slotName, tokenStruct->slotName) != 0) || |
(strcmp(slotName, tokenStruct->slotName) != 0) || |
| 399 |
(memcmp(tokenId, tokenStruct->tokenId, tokenIdLength) != 0)) |
(memcmp(tokenId, tokenStruct->tokenId, tokenIdLength) != 0)) |
| 400 |
{ |
{ |
| 401 |
|
DebugLogA("Internal inconsistent values, ID, slotName\n"); |
| 402 |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
| 403 |
pConnection->hCard = 0; |
pConnection->hCard = 0; |
| 404 |
return MSC_INCONSISTENT_STATUS; |
return MSC_INCONSISTENT_STATUS; |
| 461 |
|
|
| 462 |
if (rv != MSC_SUCCESS) |
if (rv != MSC_SUCCESS) |
| 463 |
{ |
{ |
| 464 |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
| 465 |
if (pConnection->tokenLibHandle != 0) |
if (pConnection->tokenLibHandle != 0) |
| 466 |
{ |
{ |
| 467 |
TPUnloadToken(pConnection); |
TPUnloadToken(pConnection); |
| 468 |
pConnection->tokenLibHandle = 0; |
pConnection->tokenLibHandle = 0; |
| 469 |
} |
} |
| 470 |
pConnection->hCard = 0; |
pConnection->hCard = 0; |
| 471 |
} |
} |
| 472 |
|
|
| 473 |
if ((applicationName == 0) || (nameSize == 0)) |
if (sharingMode != MSC_SHARE_DIRECT) |
|
{ |
|
|
/* |
|
|
* Use the default AID given by the Info.plist |
|
|
*/ |
|
|
rv = (*libPL_MSCIdentifyToken) (pConnection); |
|
|
} else |
|
| 474 |
{ |
{ |
| 475 |
pConnection->tokenInfo.tokenAppLen = nameSize; |
|
| 476 |
memcpy(pConnection->tokenInfo.tokenApp, applicationName, nameSize); |
if ((applicationName == 0) || (nameSize == 0)) |
| 477 |
rv = (*libPL_MSCIdentifyToken) (pConnection); |
{ |
| 478 |
} |
/* |
| 479 |
|
* Use the default AID given by the Info.plist |
| 480 |
|
*/ |
| 481 |
|
|
| 482 |
|
rv = (*libPL_MSCIdentifyToken) (pConnection); |
| 483 |
|
} else |
| 484 |
|
{ |
| 485 |
|
pConnection->tokenInfo.tokenAppLen = nameSize; |
| 486 |
|
memcpy(pConnection->tokenInfo.tokenApp, |
| 487 |
|
applicationName, nameSize); |
| 488 |
|
rv = (*libPL_MSCIdentifyToken) (pConnection); |
| 489 |
|
} |
| 490 |
|
|
| 491 |
#ifdef MSC_DEBUG |
#ifdef MSC_DEBUG |
| 492 |
DebugLogC("MSCIdentifyToken returns %s\n", msc_error(rv)); |
DebugLogC("MSCIdentifyToken returns %s\n", msc_error(rv)); |
| 493 |
#endif |
#endif |
| 494 |
|
|
|
if (sharingMode != MSC_SHARE_DIRECT) |
|
|
{ |
|
| 495 |
if (rv != MSC_SUCCESS) |
if (rv != MSC_SUCCESS) |
| 496 |
{ |
{ |
| 497 |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
SCardDisconnect(pConnection->hCard, SCARD_LEAVE_CARD); |
| 796 |
{ |
{ |
| 797 |
MSCLPEventWaitInfo evlist; |
MSCLPEventWaitInfo evlist; |
| 798 |
MSCULong32 curToken; |
MSCULong32 curToken; |
|
pthread_t newThread; |
|
| 799 |
|
|
| 800 |
/* |
/* |
| 801 |
* Create the event wait list |
* Create the event wait list |
| 839 |
} |
} |
| 840 |
mscUnLockThread(); |
mscUnLockThread(); |
| 841 |
|
|
| 842 |
if (pthread_create(&newThread, NULL, _MSCEventThread, (void *) evlist)) |
if (pthread_create(&callbackThread, NULL, _MSCEventThread, |
| 843 |
|
(void *) evlist)) |
| 844 |
{ |
{ |
| 845 |
return MSC_INTERNAL_ERROR; |
return MSC_INTERNAL_ERROR; |
| 846 |
} |
} |
| 859 |
blockingContext = MSC_BLOCKSTATUS_CANCELLING; |
blockingContext = MSC_BLOCKSTATUS_CANCELLING; |
| 860 |
rv = MSCCancelEventWait(); |
rv = MSCCancelEventWait(); |
| 861 |
|
|
| 862 |
|
pthread_join(&callbackThread, 0); |
| 863 |
|
|
| 864 |
|
/* |
| 865 |
while (1) { |
while (1) { |
| 866 |
if (blockingContext == MSC_BLOCKSTATUS_RESUME) |
if (blockingContext == MSC_BLOCKSTATUS_RESUME) |
| 867 |
{ |
{ |
| 868 |
break; |
break; |
| 869 |
} |
} |
| 870 |
} |
} |
| 871 |
|
*/ |
| 872 |
} |
} |
| 873 |
|
|
| 874 |
return MSC_SUCCESS; |
return MSC_SUCCESS; |