24 |
#include <strings.h> |
#include <strings.h> |
25 |
#include <sys/types.h> |
#include <sys/types.h> |
26 |
#include <time.h> |
#include <time.h> |
|
/* PCSC does not use BOOL as parameters or return values in function calls, |
|
|
so let us just ignore their own definition of BOOL */ |
|
|
#define BOOL PCSC_BOOL |
|
27 |
#ifndef MAKE_PROTO |
#ifndef MAKE_PROTO |
28 |
#ifdef PCSC_OSX |
#ifdef PCSC_OSX |
29 |
#include <PCSC/wintypes.h> |
#include <PCSC/wintypes.h> |
34 |
#include <pcsclite.h> |
#include <pcsclite.h> |
35 |
#include <winscard.h> |
#include <winscard.h> |
36 |
#endif /* PCSC_OSX */ |
#endif /* PCSC_OSX */ |
|
#undef BOOL |
|
37 |
#include "rdesktop.h" |
#include "rdesktop.h" |
38 |
#include "scard.h" |
#include "scard.h" |
39 |
|
|
491 |
} |
} |
492 |
|
|
493 |
static unsigned int |
static unsigned int |
494 |
inString(PMEM_HANDLE * handle, STREAM in, char **destination, SERVER_DWORD dataLength, BOOL wide) |
inString(PMEM_HANDLE * handle, STREAM in, char **destination, SERVER_DWORD dataLength, RD_BOOL wide) |
495 |
{ |
{ |
496 |
unsigned int Result = (wide) ? (2 * dataLength) : (dataLength); |
unsigned int Result = (wide) ? (2 * dataLength) : (dataLength); |
497 |
PMEM_HANDLE lcHandle = NULL; |
PMEM_HANDLE lcHandle = NULL; |
525 |
} |
} |
526 |
|
|
527 |
static unsigned int |
static unsigned int |
528 |
outString(STREAM out, char *source, BOOL wide) |
outString(STREAM out, char *source, RD_BOOL wide) |
529 |
{ |
{ |
530 |
PMEM_HANDLE lcHandle = NULL; |
PMEM_HANDLE lcHandle = NULL; |
531 |
char *reader = getAlias(source); |
char *reader = getAlias(source); |
559 |
} |
} |
560 |
|
|
561 |
static void |
static void |
562 |
inReaderName(PMEM_HANDLE * handle, STREAM in, char **destination, BOOL wide) |
inReaderName(PMEM_HANDLE * handle, STREAM in, char **destination, RD_BOOL wide) |
563 |
{ |
{ |
564 |
SERVER_DWORD dataLength; |
SERVER_DWORD dataLength; |
565 |
in->p += 0x08; |
in->p += 0x08; |
687 |
|
|
688 |
|
|
689 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
690 |
TS_SCardListReaders(STREAM in, STREAM out, BOOL wide) |
TS_SCardListReaders(STREAM in, STREAM out, RD_BOOL wide) |
691 |
{ |
{ |
692 |
#define readerArraySize 1024 |
#define readerArraySize 1024 |
693 |
MYPCSC_DWORD rv; |
MYPCSC_DWORD rv; |
760 |
|
|
761 |
|
|
762 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
763 |
TS_SCardConnect(STREAM in, STREAM out, BOOL wide) |
TS_SCardConnect(STREAM in, STREAM out, RD_BOOL wide) |
764 |
{ |
{ |
765 |
MYPCSC_DWORD rv; |
MYPCSC_DWORD rv; |
766 |
SCARDCONTEXT hContext; |
SCARDCONTEXT hContext; |
953 |
return recall; |
return recall; |
954 |
} |
} |
955 |
|
|
956 |
static BOOL |
static D_BOOL |
957 |
mappedStatus(MYPCSC_DWORD code) |
mappedStatus(MYPCSC_DWORD code) |
958 |
{ |
{ |
959 |
code >>= 16; |
code >>= 16; |
962 |
} |
} |
963 |
|
|
964 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
965 |
incStatus(MYPCSC_DWORD code, BOOL mapped) |
incStatus(MYPCSC_DWORD code, RD_BOOL mapped) |
966 |
{ |
{ |
967 |
if (mapped || (code & SCARD_STATE_CHANGED)) |
if (mapped || (code & SCARD_STATE_CHANGED)) |
968 |
{ |
{ |
1016 |
|
|
1017 |
|
|
1018 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
1019 |
TS_SCardGetStatusChange(STREAM in, STREAM out, BOOL wide) |
TS_SCardGetStatusChange(STREAM in, STREAM out, RD_BOOL wide) |
1020 |
{ |
{ |
1021 |
MYPCSC_DWORD rv; |
MYPCSC_DWORD rv; |
1022 |
SERVER_SCARDCONTEXT hContext; |
SERVER_SCARDCONTEXT hContext; |
1028 |
long i; |
long i; |
1029 |
PMEM_HANDLE lcHandle = NULL; |
PMEM_HANDLE lcHandle = NULL; |
1030 |
#if 0 |
#if 0 |
1031 |
BOOL mapped = False; |
RD_BOOL mapped = False; |
1032 |
#endif |
#endif |
1033 |
|
|
1034 |
in->p += 0x18; |
in->p += 0x18; |
1218 |
} |
} |
1219 |
|
|
1220 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
1221 |
TS_SCardLocateCardsByATR(STREAM in, STREAM out, BOOL wide) |
TS_SCardLocateCardsByATR(STREAM in, STREAM out, RD_BOOL wide) |
1222 |
{ |
{ |
1223 |
int i, j, k; |
int i, j, k; |
1224 |
MYPCSC_DWORD rv; |
MYPCSC_DWORD rv; |
1286 |
{ |
{ |
1287 |
for (j = 0, rsCur = rsArray; j < readerCount; j++, rsCur++) |
for (j = 0, rsCur = rsArray; j < readerCount; j++, rsCur++) |
1288 |
{ |
{ |
1289 |
BOOL equal = 1; |
RD_BOOL equal = 1; |
1290 |
for (k = 0; k < cur->cbAtr; k++) |
for (k = 0; k < cur->cbAtr; k++) |
1291 |
{ |
{ |
1292 |
/* This line check if them equal */ |
/* This line check if them equal */ |
1627 |
} |
} |
1628 |
|
|
1629 |
static MYPCSC_DWORD |
static MYPCSC_DWORD |
1630 |
TS_SCardStatus(STREAM in, STREAM out, BOOL wide) |
TS_SCardStatus(STREAM in, STREAM out, RD_BOOL wide) |
1631 |
{ |
{ |
1632 |
MYPCSC_DWORD rv; |
MYPCSC_DWORD rv; |
1633 |
SERVER_SCARDCONTEXT hCard; |
SERVER_SCARDCONTEXT hCard; |
2221 |
case SC_LIST_READERS: /* SCardListReadersA */ |
case SC_LIST_READERS: /* SCardListReadersA */ |
2222 |
case SC_LIST_READERS + 4: /* SCardListReadersW */ |
case SC_LIST_READERS + 4: /* SCardListReadersW */ |
2223 |
{ |
{ |
2224 |
BOOL wide = request != SC_LIST_READERS; |
D_BOOL wide = request != SC_LIST_READERS; |
2225 |
DEBUG_SCARD(("<---SCardListReaders---> (%s)\n", |
DEBUG_SCARD(("<---SCardListReaders---> (%s)\n", |
2226 |
(wide) ? ("WIDE") : ("ASCII"))); |
(wide) ? ("WIDE") : ("ASCII"))); |
2227 |
Result = (SERVER_DWORD) TS_SCardListReaders(in, out, wide); |
Result = (SERVER_DWORD) TS_SCardListReaders(in, out, wide); |
2231 |
case SC_CONNECT: /* ScardConnectA */ |
case SC_CONNECT: /* ScardConnectA */ |
2232 |
case SC_CONNECT + 4: /* SCardConnectW */ |
case SC_CONNECT + 4: /* SCardConnectW */ |
2233 |
{ |
{ |
2234 |
BOOL wide = request != SC_CONNECT; |
RD_BOOL wide = request != SC_CONNECT; |
2235 |
DEBUG_SCARD(("<---SCardConnect---> (%s)\n", |
DEBUG_SCARD(("<---SCardConnect---> (%s)\n", |
2236 |
(wide) ? ("WIDE") : ("ASCII"))); |
(wide) ? ("WIDE") : ("ASCII"))); |
2237 |
Result = (SERVER_DWORD) TS_SCardConnect(in, out, wide); |
Result = (SERVER_DWORD) TS_SCardConnect(in, out, wide); |
2255 |
case SC_GET_STATUS_CHANGE: /* SCardGetStatusChangeA */ |
case SC_GET_STATUS_CHANGE: /* SCardGetStatusChangeA */ |
2256 |
case SC_GET_STATUS_CHANGE + 4: /* SCardGetStatusChangeW */ |
case SC_GET_STATUS_CHANGE + 4: /* SCardGetStatusChangeW */ |
2257 |
{ |
{ |
2258 |
BOOL wide = request != SC_GET_STATUS_CHANGE; |
RD_BOOL wide = request != SC_GET_STATUS_CHANGE; |
2259 |
DEBUG_SCARD(("<---SCardGetStatusChange---> (%s)\n", |
DEBUG_SCARD(("<---SCardGetStatusChange---> (%s)\n", |
2260 |
(wide) ? ("WIDE") : ("ASCII"))); |
(wide) ? ("WIDE") : ("ASCII"))); |
2261 |
Result = (SERVER_DWORD) TS_SCardGetStatusChange(in, out, wide); |
Result = (SERVER_DWORD) TS_SCardGetStatusChange(in, out, wide); |
2272 |
case SC_LOCATE_CARDS_BY_ATR: /* SCardLocateCardsByATRA */ |
case SC_LOCATE_CARDS_BY_ATR: /* SCardLocateCardsByATRA */ |
2273 |
case SC_LOCATE_CARDS_BY_ATR + 4: /* SCardLocateCardsByATRW */ |
case SC_LOCATE_CARDS_BY_ATR + 4: /* SCardLocateCardsByATRW */ |
2274 |
{ |
{ |
2275 |
BOOL wide = request != SC_LOCATE_CARDS_BY_ATR; |
RD_BOOL wide = request != SC_LOCATE_CARDS_BY_ATR; |
2276 |
DEBUG_SCARD(("<---SCardLocateCardsByATR---> (%s)\n", |
DEBUG_SCARD(("<---SCardLocateCardsByATR---> (%s)\n", |
2277 |
(wide) ? ("WIDE") : ("ASCII"))); |
(wide) ? ("WIDE") : ("ASCII"))); |
2278 |
Result = (SERVER_DWORD) TS_SCardLocateCardsByATR(in, out, wide); |
Result = (SERVER_DWORD) TS_SCardLocateCardsByATR(in, out, wide); |
2324 |
case SC_STATUS: /* SCardStatusA */ |
case SC_STATUS: /* SCardStatusA */ |
2325 |
case SC_STATUS + 4: /* SCardStatusW */ |
case SC_STATUS + 4: /* SCardStatusW */ |
2326 |
{ |
{ |
2327 |
BOOL wide = request != SC_STATUS; |
RD_BOOL wide = request != SC_STATUS; |
2328 |
DEBUG_SCARD(("<---SCardStatus---> (%s)\n", |
DEBUG_SCARD(("<---SCardStatus---> (%s)\n", |
2329 |
(wide) ? ("WIDE") : ("ASCII"))); |
(wide) ? ("WIDE") : ("ASCII"))); |
2330 |
Result = (SERVER_DWORD) TS_SCardStatus(in, out, wide); |
Result = (SERVER_DWORD) TS_SCardStatus(in, out, wide); |
2376 |
/* Thread functions */ |
/* Thread functions */ |
2377 |
|
|
2378 |
static STREAM |
static STREAM |
2379 |
duplicateStream(PMEM_HANDLE * handle, STREAM s, uint32 buffer_size, BOOL isInputStream) |
duplicateStream(PMEM_HANDLE * handle, STREAM s, uint32 buffer_size, RD_BOOL isInputStream) |
2380 |
{ |
{ |
2381 |
STREAM d = SC_xmalloc(handle, sizeof(struct stream)); |
STREAM d = SC_xmalloc(handle, sizeof(struct stream)); |
2382 |
if (d != NULL) |
if (d != NULL) |