components/coolkey/patches/14-cky_card.c.patch
author Ronald Jordan <ron.jordan@oracle.com>
Mon, 01 Aug 2016 12:38:38 -0700
branchs11u3-sru
changeset 6535 8f23248b161c
permissions -rw-r--r--
22017764 Add Coolkey v1.1.0 to Userland consolidation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6535
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     1
Upstream fixes already included in the latest community updates to coolkey v1.1.0
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     2
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     3
Addresses various SCARD API and APDU issues.
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     4
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     5
--- ORIGINAL/./src/libckyapplet/cky_card.c	2016-06-24 16:08:04.287949643 -0400
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     6
+++ ././src/libckyapplet/cky_card.c	2016-06-24 12:53:46.337857570 -0400
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     7
@@ -129,6 +129,7 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     8
     SCardGetStatusChangeFn SCardGetStatusChange;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
     9
     SCardCancelFn SCardCancel;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    10
     SCARD_IO_REQUEST *SCARD_PCI_T0_;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    11
+    SCARD_IO_REQUEST *SCARD_PCI_T1_;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    12
 } SCard;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    13
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    14
 #define GET_ADDRESS(library, scard, name) \
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    15
@@ -195,6 +196,12 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    16
     if( status != CKYSUCCESS ) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    17
         goto fail;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    18
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    19
+
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    20
+    status = ckyShLibrary_getAddress( library,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    21
+        (void**) &scard->SCARD_PCI_T1_, MAKE_DLL_SYMBOL(g_rgSCardT1Pci));
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    22
+    if( status != CKYSUCCESS ) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    23
+        goto fail;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    24
+    }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    25
     return scard;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    26
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    27
 fail:
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    28
@@ -837,6 +844,11 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    29
     rv = ctx->scard->SCardGetStatusChange(ctx->context, timeout, 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    30
 							readers, readerCount);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    31
     if (rv != SCARD_S_SUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    32
+	if ((rv == SCARD_E_NO_SERVICE) || (rv == SCARD_E_SERVICE_STOPPED)) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    33
+	    /* if we were stopped, don't reuse the old context, 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    34
+	     * pcsc-lite hangs */
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    35
+	    ckyCardContext_release(ctx); 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    36
+	} 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    37
 	ctx->lastError = rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    38
 	return CKYSCARDERR;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    39
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    40
@@ -884,6 +896,7 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    41
     SCARDHANDLE      cardHandle;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    42
     unsigned long    lastError;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    43
     CKYBool           inTransaction;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    44
+    unsigned long    protocol;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    45
 };
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    46
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    47
 static void
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    48
@@ -894,6 +907,7 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    49
     conn->cardHandle = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    50
     conn->lastError = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    51
     conn->inTransaction = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    52
+    conn->protocol = SCARD_PROTOCOL_T0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    53
 }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    54
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    55
 CKYCardConnection *
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    56
@@ -934,14 +948,13 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    57
 {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    58
     CKYStatus ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    59
     unsigned long rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    60
-    unsigned long protocol;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    61
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    62
     ret = CKYCardConnection_Disconnect(conn);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    63
     if (ret != CKYSUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    64
 	return ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    65
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    66
     rv = conn->scard->SCardConnect( conn->ctx->context, readerName,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    67
-	SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0, &conn->cardHandle, &protocol);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    68
+	SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &conn->cardHandle, &conn->protocol);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    69
     if (rv != SCARD_S_SUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    70
 	conn->lastError = rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    71
 	return CKYSCARDERR;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    72
@@ -978,7 +991,7 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    73
     unsigned long protocol;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    74
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    75
     rv = conn->scard->SCardReconnect(conn->cardHandle,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    76
-	SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0, init, &protocol);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    77
+	SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 , init, &protocol);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    78
     if (rv != SCARD_S_SUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    79
 	conn->lastError = rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    80
 	return CKYSCARDERR;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    81
@@ -1039,10 +1052,17 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    82
 	return ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    83
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    84
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    85
-    rv = conn->scard->SCardTransmit(conn->cardHandle, 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    86
-	conn->scard->SCARD_PCI_T0_,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    87
-	CKYBuffer_Data(&apdu->apduBuf), CKYBuffer_Size(&apdu->apduBuf), 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    88
-	NULL, response->data, &response->len);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    89
+    if( conn->protocol == SCARD_PROTOCOL_T0 ) { 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    90
+        rv = conn->scard->SCardTransmit(conn->cardHandle, 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    91
+            conn->scard->SCARD_PCI_T0_,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    92
+	    CKYBuffer_Data(&apdu->apduBuf), CKYBuffer_Size(&apdu->apduBuf), 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    93
+	    NULL, response->data, &response->len);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    94
+    }  else  {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    95
+        rv = conn->scard->SCardTransmit(conn->cardHandle,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    96
+            conn->scard->SCARD_PCI_T1_,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    97
+            CKYBuffer_Data(&apdu->apduBuf), CKYBuffer_Size(&apdu->apduBuf),
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    98
+            NULL, response->data, &response->len);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
    99
+    } 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   100
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   101
     if (rv != SCARD_S_SUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   102
 	conn->lastError =rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   103
@@ -1057,25 +1077,39 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   104
 							CKYBuffer *response)
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   105
 {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   106
     CKYStatus ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   107
+    CKYBuffer getResponse;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   108
+    CKYSize size = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   109
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   110
     ret = CKYCardConnection_TransmitAPDU(conn, apdu, response);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   111
     if (ret != CKYSUCCESS) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   112
 	return ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   113
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   114
+    CKYBuffer_InitEmpty(&getResponse);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   115
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   116
-    if (CKYBuffer_Size(response) == 2 && CKYBuffer_GetChar(response,0) == 0x61) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   117
+    /* automatically handle the response data protocol */
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   118
+    while ((ret == CKYSUCCESS) &&
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   119
+	   (size = CKYBuffer_Size(response)) >= 2 &&
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   120
+	   (CKYBuffer_GetChar(response,size-2) == 0x61)) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   121
 	/* get the response */
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   122
 	CKYAPDU getResponseAPDU;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   123
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   124
+	CKYBuffer_Zero(&getResponse);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   125
 	CKYAPDU_Init(&getResponseAPDU);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   126
 	CKYAPDU_SetCLA(&getResponseAPDU, 0x00);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   127
 	CKYAPDU_SetINS(&getResponseAPDU, 0xc0);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   128
 	CKYAPDU_SetP1(&getResponseAPDU, 0x00);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   129
 	CKYAPDU_SetP2(&getResponseAPDU, 0x00);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   130
-	CKYAPDU_SetReceiveLen(&getResponseAPDU, CKYBuffer_GetChar(response,1));
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   131
-	ret = CKYCardConnection_TransmitAPDU(conn, &getResponseAPDU, response);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   132
+	CKYAPDU_SetReceiveLen(&getResponseAPDU, 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   133
+					CKYBuffer_GetChar(response,size-1));
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   134
+	ret = CKYCardConnection_TransmitAPDU(conn, &getResponseAPDU,
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   135
+					&getResponse);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   136
 	CKYAPDU_FreeData(&getResponseAPDU);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   137
+	if ((ret == CKYSUCCESS) && (CKYBuffer_Size(&getResponse) >= 2)) {
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   138
+	    CKYBuffer_Resize(response, size-2);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   139
+	    CKYBuffer_AppendCopy(response,&getResponse);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   140
+	}
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   141
     }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   142
+    CKYBuffer_FreeData(&getResponse);
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   143
     return ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   144
 }
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   145
 
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   146
@@ -1086,7 +1120,7 @@
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   147
     unsigned long readerLen = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   148
     unsigned long protocol;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   149
     unsigned long rv;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   150
-    CKYSize atrLen;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   151
+    CKYSize atrLen = 0;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   152
     char *readerStr;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   153
     CKYStatus ret;
8f23248b161c 22017764 Add Coolkey v1.1.0 to Userland consolidation
Ronald Jordan <ron.jordan@oracle.com>
parents:
diff changeset
   154