54 |
static pthread_mutex_t queueAccess; |
static pthread_mutex_t queueAccess; |
55 |
static pthread_mutex_t queueEmpty; |
static pthread_mutex_t queueEmpty; |
56 |
static pthread_mutex_t hcardAccess; |
static pthread_mutex_t hcardAccess; |
57 |
/* static pthread_mutex_t sendControl; */ |
static pthread_mutex_t sendControl; |
58 |
|
|
59 |
static PMEM_HANDLE threadListHandle = NULL; |
static PMEM_HANDLE threadListHandle = NULL; |
60 |
static PThreadListElement threadList = NULL; |
static PThreadListElement threadList = NULL; |
152 |
return 0; |
return 0; |
153 |
} |
} |
154 |
|
|
|
#if 0 |
|
155 |
if (0 != pthread_mutex_init(&sendControl, NULL)) |
if (0 != pthread_mutex_init(&sendControl, NULL)) |
156 |
{ |
{ |
157 |
error("[SMART CARD: Can't initialize send control mutex]\n"); |
error("[SMART CARD: Can't initialize send control mutex]\n"); |
158 |
return 0; |
return 0; |
159 |
} |
} |
|
#endif |
|
|
|
|
160 |
|
|
161 |
if (0 != |
if (0 != |
162 |
pthread_create(&queueHandler, NULL, (void *(*)(void *)) queue_handler_function, NULL)) |
pthread_create(&queueHandler, NULL, (void *(*)(void *)) queue_handler_function, NULL)) |
490 |
static void |
static void |
491 |
outForceAlignment(STREAM out, unsigned int seed) |
outForceAlignment(STREAM out, unsigned int seed) |
492 |
{ |
{ |
|
#if 0 |
|
493 |
SERVER_DWORD add = (seed - (out->p - out->data) % seed) % seed; |
SERVER_DWORD add = (seed - (out->p - out->data) % seed) % seed; |
494 |
if (add > 0) |
if (add > 0) |
495 |
out_uint8s(out, add); |
out_uint8s(out, add); |
|
#else |
|
|
out_uint8s(out, seed); |
|
|
#endif |
|
496 |
} |
} |
497 |
|
|
498 |
static unsigned int |
static unsigned int |
685 |
DEBUG_SCARD(("<--SUCCESS SCardListReaders (no SCardIsValidContext)-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardListReaders (no SCardIsValidContext)-->\n")); |
686 |
} |
} |
687 |
|
|
688 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
689 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
690 |
return rv; |
return rv; |
691 |
} |
} |
758 |
out_uint32_le(out, dataLength); |
out_uint32_le(out, dataLength); |
759 |
out->p = pend; |
out->p = pend; |
760 |
|
|
761 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
762 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
763 |
return rv; |
return rv; |
764 |
} |
} |
833 |
out_uint32_le(out, 0x00000004); |
out_uint32_le(out, 0x00000004); |
834 |
out_uint32_le(out, hCard); |
out_uint32_le(out, hCard); |
835 |
|
|
836 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
837 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
838 |
return rv; |
return rv; |
839 |
} |
} |
876 |
DEBUG_SCARD(("<--SUCCESS SCardReconnect-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardReconnect-->\n")); |
877 |
} |
} |
878 |
|
|
879 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
880 |
out_uint32_le(out, (SERVER_DWORD) dwActiveProtocol); |
out_uint32_le(out, (SERVER_DWORD) dwActiveProtocol); |
881 |
return rv; |
return rv; |
882 |
} |
} |
932 |
DEBUG_SCARD(("<--SUCCESS SCardDisconnect-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardDisconnect-->\n")); |
933 |
} |
} |
934 |
|
|
935 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
936 |
return rv; |
return rv; |
937 |
} |
} |
938 |
|
|
1189 |
out_uint8p(out, (void *) ((unsigned char **) cur + 2), |
out_uint8p(out, (void *) ((unsigned char **) cur + 2), |
1190 |
sizeof(SERVER_SCARD_READERSTATE_A) - 2 * sizeof(unsigned char *)); |
sizeof(SERVER_SCARD_READERSTATE_A) - 2 * sizeof(unsigned char *)); |
1191 |
} |
} |
1192 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1193 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1194 |
return rv; |
return rv; |
1195 |
} |
} |
1213 |
{ |
{ |
1214 |
DEBUG_SCARD(("<--SUCCESS SCardCancel-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardCancel-->\n")); |
1215 |
} |
} |
1216 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1217 |
return rv; |
return rv; |
1218 |
} |
} |
1219 |
|
|
1318 |
sizeof(SCARD_READERSTATE_A) - 2 * sizeof(unsigned char *)); |
sizeof(SCARD_READERSTATE_A) - 2 * sizeof(unsigned char *)); |
1319 |
} |
} |
1320 |
|
|
1321 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1322 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1323 |
return rv; |
return rv; |
1324 |
} |
} |
1344 |
{ |
{ |
1345 |
DEBUG_SCARD(("<--SUCCESS SCardBeginTransaction-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardBeginTransaction-->\n")); |
1346 |
} |
} |
1347 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1348 |
return rv; |
return rv; |
1349 |
} |
} |
1350 |
|
|
1375 |
{ |
{ |
1376 |
DEBUG_SCARD(("<--SUCCESS SCardEndTransaction-->\n")); |
DEBUG_SCARD(("<--SUCCESS SCardEndTransaction-->\n")); |
1377 |
} |
} |
1378 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1379 |
return rv; |
return rv; |
1380 |
} |
} |
1381 |
|
|
1618 |
|
|
1619 |
outBufferFinish(out, (char *) recvBuf, cbRecvLength); |
outBufferFinish(out, (char *) recvBuf, cbRecvLength); |
1620 |
} |
} |
1621 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1622 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1623 |
return rv; |
return rv; |
1624 |
} |
} |
1734 |
out_uint32_le(out, dataLength); |
out_uint32_le(out, dataLength); |
1735 |
out->p = psave; |
out->p = psave; |
1736 |
} |
} |
1737 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1738 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1739 |
return rv; |
return rv; |
1740 |
} |
} |
1828 |
out_uint8p(out, atr, dwAtrLen); |
out_uint8p(out, atr, dwAtrLen); |
1829 |
outRepos(out, dwAtrLen); |
outRepos(out, dwAtrLen); |
1830 |
} |
} |
1831 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1832 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1833 |
return rv; |
return rv; |
1834 |
} |
} |
1881 |
outRepos(out, dwGroups); |
outRepos(out, dwGroups); |
1882 |
out_uint32_le(out, 0x00000000); |
out_uint32_le(out, 0x00000000); |
1883 |
|
|
1884 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1885 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
1886 |
return rv; |
return rv; |
1887 |
} |
} |
1982 |
outRepos(out, dwAttrLen); |
outRepos(out, dwAttrLen); |
1983 |
out_uint32_le(out, 0x00000000); |
out_uint32_le(out, 0x00000000); |
1984 |
} |
} |
1985 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
1986 |
return rv; |
return rv; |
1987 |
} |
} |
1988 |
|
|
2035 |
out_uint32_le(out, 0x00000200); |
out_uint32_le(out, 0x00000200); |
2036 |
out_uint32_le(out, 0x00000000); |
out_uint32_le(out, 0x00000000); |
2037 |
out_uint32_le(out, 0x00000000); |
out_uint32_le(out, 0x00000000); |
2038 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
2039 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
2040 |
return rv; |
return rv; |
2041 |
} |
} |
2148 |
outRepos(out, nBytesReturned); |
outRepos(out, nBytesReturned); |
2149 |
} |
} |
2150 |
|
|
2151 |
outForceAlignment(out, 16); |
outForceAlignment(out, 8); |
2152 |
SC_xfreeallmemory(&lcHandle); |
SC_xfreeallmemory(&lcHandle); |
2153 |
return rv; |
return rv; |
2154 |
} |
} |
2497 |
size_t buffer_len = 0; |
size_t buffer_len = 0; |
2498 |
scard_device_control(data->handle, data->request, data->in, data->out); |
scard_device_control(data->handle, data->request, data->in, data->out); |
2499 |
buffer_len = (size_t) data->out->p - (size_t) data->out->data; |
buffer_len = (size_t) data->out->p - (size_t) data->out->data; |
|
#if 0 |
|
2500 |
pthread_mutex_lock(&sendControl); |
pthread_mutex_lock(&sendControl); |
|
#endif |
|
2501 |
rdpdr_send_completion(data->device, data->id, 0, buffer_len, data->out->data, buffer_len); |
rdpdr_send_completion(data->device, data->id, 0, buffer_len, data->out->data, buffer_len); |
|
#if 0 |
|
2502 |
pthread_mutex_unlock(&sendControl); |
pthread_mutex_unlock(&sendControl); |
|
#endif |
|
2503 |
SC_destroyThreadData(data); |
SC_destroyThreadData(data); |
2504 |
} |
} |
2505 |
|
|