Merge branch 'master' of github.com:awakecoding/FreeRDP

This commit is contained in:
Marc-André Moreau 2014-04-26 12:31:32 -04:00
commit a2fa4eb6ed
12 changed files with 954 additions and 625 deletions

View File

@ -145,32 +145,6 @@ const char* smartcard_get_ioctl_string(UINT32 ioControlCode, BOOL funcName)
return funcName ? "SCardUnknown" : "SCARD_IOCTL_UNKNOWN";
}
size_t smartcard_multi_string_length_a(const char* msz)
{
char* p = (char*) msz;
if (!p)
return 0;
while ((p[0] != 0) && (p[1] != 0))
p++;
return (p - msz) + 1;
}
size_t smartcard_multi_string_length_w(const WCHAR* msz)
{
WCHAR* p = (WCHAR*) msz;
if (!p)
return 0;
while ((p[0] != 0) && (p[1] != 0))
p++;
return (p - msz) + 1;
}
static UINT32 smartcard_EstablishContext(SMARTCARD_DEVICE* smartcard, IRP* irp)
{
UINT32 status;
@ -363,7 +337,7 @@ static UINT32 smartcard_GetStatusChangeA(SMARTCARD_DEVICE* smartcard, IRP* irp)
ret.rgReaderStates[index].dwCurrentState = call.rgReaderStates[index].dwCurrentState;
ret.rgReaderStates[index].dwEventState = call.rgReaderStates[index].dwEventState;
ret.rgReaderStates[index].cbAtr = call.rgReaderStates[index].cbAtr;
CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32);
CopyMemory(&(ret.rgReaderStates[index].rgbAtr), &(call.rgReaderStates[index].rgbAtr), 32);
}
smartcard_trace_get_status_change_return(smartcard, &ret, FALSE);
@ -421,7 +395,7 @@ static UINT32 smartcard_GetStatusChangeW(SMARTCARD_DEVICE* smartcard, IRP* irp)
ret.rgReaderStates[index].dwCurrentState = call.rgReaderStates[index].dwCurrentState;
ret.rgReaderStates[index].dwEventState = call.rgReaderStates[index].dwEventState;
ret.rgReaderStates[index].cbAtr = call.rgReaderStates[index].cbAtr;
CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32);
CopyMemory(&(ret.rgReaderStates[index].rgbAtr), &(call.rgReaderStates[index].rgbAtr), 32);
}
smartcard_trace_get_status_change_return(smartcard, &ret, TRUE);

View File

@ -1496,7 +1496,7 @@ void smartcard_trace_get_status_change_return(SMARTCARD_DEVICE* smartcard, GetSt
szCurrentState = SCardGetReaderStateString(rgReaderState->dwCurrentState);
szEventState = SCardGetReaderStateString(rgReaderState->dwEventState);
rgbAtr = winpr_BinToHexString(rgReaderState->rgbAtr, rgReaderState->cbAtr, FALSE);
rgbAtr = winpr_BinToHexString((BYTE*) &(rgReaderState->rgbAtr), rgReaderState->cbAtr, FALSE);
WLog_Print(smartcard->log, WLOG_DEBUG,
"\t[%d]: dwCurrentState: %s (0x%08X)",
@ -2173,8 +2173,8 @@ UINT32 smartcard_unpack_transmit_call(SMARTCARD_DEVICE* smartcard, wStream* s, T
Stream_Read_UINT32(s, length); /* Length (4 bytes) */
Stream_Read_UINT16(s, ioRecvPci.dwProtocol); /* dwProtocol (2 bytes) */
Stream_Read_UINT16(s, ioRecvPci.cbExtraBytes); /* cbExtraBytes (2 bytes) */
Stream_Read_UINT32(s, ioRecvPci.dwProtocol); /* dwProtocol (4 bytes) */
Stream_Read_UINT32(s, ioRecvPci.cbExtraBytes); /* cbExtraBytes (4 bytes) */
if (ioRecvPci.cbExtraBytes > 1024)
{
@ -2339,8 +2339,8 @@ UINT32 smartcard_pack_transmit_return(SMARTCARD_DEVICE* smartcard, wStream* s, T
Stream_EnsureRemainingCapacity(s, cbExtraBytes + 16);
Stream_Write_UINT32(s, cbExtraBytes); /* Length (4 bytes) */
Stream_Write_UINT16(s, ret->pioRecvPci->dwProtocol); /* dwProtocol (2 bytes) */
Stream_Write_UINT16(s, cbExtraBytes); /* cbExtraBytes (2 bytes) */
Stream_Write_UINT32(s, ret->pioRecvPci->dwProtocol); /* dwProtocol (4 bytes) */
Stream_Write_UINT32(s, cbExtraBytes); /* cbExtraBytes (4 bytes) */
Stream_Write(s, pbExtraBytes, cbExtraBytes);
smartcard_pack_write_size_align(smartcard, s, cbExtraBytes, 4);
}

View File

@ -227,6 +227,12 @@
#define SCARD_NEGOTIABLE 5
#define SCARD_SPECIFIC 6
#if defined(__APPLE__) | defined(sun)
#pragma pack(1)
#else
#pragma pack(push, 1)
#endif
typedef struct _SCARD_IO_REQUEST
{
DWORD dwProtocol;
@ -551,6 +557,12 @@ typedef struct
SCARDHANDLE hCardHandle;
} OPENCARDNAMEW, *POPENCARDNAMEW, *LPOPENCARDNAMEW;
#if defined(__APPLE__) | defined(sun)
#pragma pack()
#else
#pragma pack(pop)
#endif
#ifdef UNICODE
#define LPOCNCONNPROC LPOCNCONNPROCW
#define SCARD_READERSTATE SCARD_READERSTATEW

View File

@ -64,12 +64,22 @@ typedef int BOOL;
typedef BOOL *PBOOL, *LPBOOL;
#ifdef __APPLE__
typedef int LONG;
typedef unsigned int DWORD;
typedef unsigned int ULONG;
#else
typedef long LONG;
typedef unsigned long DWORD;
typedef unsigned long ULONG;
#endif
typedef unsigned char BYTE, *PBYTE, *LPBYTE;
typedef BYTE BOOLEAN, *PBOOLEAN;
typedef unsigned short WCHAR, *PWCHAR;
typedef WCHAR* BSTR;
typedef char CHAR, *PCHAR;
typedef unsigned long DWORD, *PDWORD, *LPDWORD;
typedef DWORD *PDWORD, *LPDWORD;
typedef unsigned int DWORD32;
typedef unsigned __int64 DWORD64;
typedef unsigned __int64 ULONGLONG;
@ -107,7 +117,7 @@ typedef signed __int64 INT64;
#endif
typedef const WCHAR* LMCSTR;
typedef WCHAR* LMSTR;
typedef long LONG, *PLONG, *LPLONG;
typedef LONG *PLONG, *LPLONG;
typedef signed __int64 LONGLONG;
typedef __int3264 LONG_PTR, *PLONG_PTR;
@ -132,7 +142,7 @@ typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
typedef unsigned __int64 UINT64;
typedef unsigned long ULONG, *PULONG;
typedef ULONG *PULONG;
typedef ULONG HRESULT;
typedef ULONG SCODE;

View File

@ -5,6 +5,7 @@ set(MODULE_PREFIX "TEST_CRT")
set(${MODULE_PREFIX}_DRIVER ${MODULE_NAME}.c)
set(${MODULE_PREFIX}_TESTS
TestTypes.c
TestAlignment.c
TestString.c
TestUnicodeConversion.c)

View File

@ -0,0 +1,112 @@
#include <stdio.h>
#include <winpr/crt.h>
#include <winpr/windows.h>
#define EXPECTED_SIZEOF_BYTE 1
#define EXPECTED_SIZEOF_BOOLEAN 1
#define EXPECTED_SIZEOF_CHAR 1
#define EXPECTED_SIZEOF_UCHAR 1
#define EXPECTED_SIZEOF_INT8 1
#define EXPECTED_SIZEOF_UINT8 1
#define EXPECTED_SIZEOF_INT16 2
#define EXPECTED_SIZEOF_UINT16 2
#define EXPECTED_SIZEOF_WORD 2
#define EXPECTED_SIZEOF_WCHAR 2
#define EXPECTED_SIZEOF_SHORT 2
#define EXPECTED_SIZEOF_USHORT 2
#define EXPECTED_SIZEOF_BOOL 4
#define EXPECTED_SIZEOF_INT 4
#define EXPECTED_SIZEOF_UINT 4
#define EXPECTED_SIZEOF_INT32 4
#define EXPECTED_SIZEOF_UINT32 4
#define EXPECTED_SIZEOF_DWORD 4
#define EXPECTED_SIZEOF_DWORD32 4
#define EXPECTED_SIZEOF_LONG 4
#define EXPECTED_SIZEOF_LONG32 4
#define EXPECTED_SIZEOF_INT64 8
#define EXPECTED_SIZEOF_UINT64 8
#define EXPECTED_SIZEOF_DWORD64 8
#define EXPECTED_SIZEOF_DWORDLONG 8
#define EXPECTED_SIZEOF_LONG64 8
#define EXPECTED_SIZEOF_ULONGLONG 8
#define EXPECTED_SIZEOF_LUID 8
#define EXPECTED_SIZEOF_FILETIME 8
#define EXPECTED_SIZEOF_LARGE_INTEGER 8
#define EXPECTED_SIZEOF_ULARGE_INTEGER 8
#define EXPECTED_SIZEOF_GUID 16
#define EXPECTED_SIZEOF_SYSTEMTIME 16
#define EXPECTED_SIZEOF_SIZE_T sizeof(void*)
#define EXPECTED_SIZEOF_INT_PTR sizeof(void*)
#define EXPECTED_SIZEOF_UINT_PTR sizeof(void*)
#define EXPECTED_SIZEOF_DWORD_PTR sizeof(void*)
#define EXPECTED_SIZEOF_LONG_PTR sizeof(void*)
#define EXPECTED_SIZEOF_ULONG_PTR sizeof(void*)
#define TEST_SIZEOF_TYPE(_name) \
if (sizeof(_name) != EXPECTED_SIZEOF_ ##_name) { \
fprintf(stderr, "sizeof(%s) mismatch: Actual: %d, Expected: %d\n", \
#_name, (int) sizeof(_name), (int) EXPECTED_SIZEOF_ ##_name); \
status = -1; \
}
int TestTypes(int argc, char* argv[])
{
int status = 0;
TEST_SIZEOF_TYPE(INT8)
TEST_SIZEOF_TYPE(UINT8)
TEST_SIZEOF_TYPE(BYTE)
TEST_SIZEOF_TYPE(BOOLEAN)
TEST_SIZEOF_TYPE(CHAR)
TEST_SIZEOF_TYPE(UCHAR)
TEST_SIZEOF_TYPE(INT16)
TEST_SIZEOF_TYPE(UINT16)
TEST_SIZEOF_TYPE(WORD)
TEST_SIZEOF_TYPE(WCHAR)
TEST_SIZEOF_TYPE(SHORT)
TEST_SIZEOF_TYPE(USHORT)
/* fails on OS X */
//TEST_SIZEOF_TYPE(BOOL)
TEST_SIZEOF_TYPE(INT)
TEST_SIZEOF_TYPE(UINT)
TEST_SIZEOF_TYPE(DWORD)
TEST_SIZEOF_TYPE(DWORD32)
TEST_SIZEOF_TYPE(LONG)
TEST_SIZEOF_TYPE(LONG32)
TEST_SIZEOF_TYPE(INT32)
TEST_SIZEOF_TYPE(UINT32)
TEST_SIZEOF_TYPE(INT64)
TEST_SIZEOF_TYPE(UINT64)
TEST_SIZEOF_TYPE(DWORD64)
TEST_SIZEOF_TYPE(DWORDLONG)
TEST_SIZEOF_TYPE(LONG64)
TEST_SIZEOF_TYPE(ULONGLONG)
TEST_SIZEOF_TYPE(LUID)
TEST_SIZEOF_TYPE(FILETIME)
TEST_SIZEOF_TYPE(LARGE_INTEGER)
TEST_SIZEOF_TYPE(ULARGE_INTEGER)
TEST_SIZEOF_TYPE(GUID)
TEST_SIZEOF_TYPE(SYSTEMTIME)
TEST_SIZEOF_TYPE(SIZE_T)
TEST_SIZEOF_TYPE(INT_PTR)
TEST_SIZEOF_TYPE(UINT_PTR)
TEST_SIZEOF_TYPE(DWORD_PTR)
TEST_SIZEOF_TYPE(LONG_PTR)
TEST_SIZEOF_TYPE(ULONG_PTR)
return status;
}

View File

@ -45,7 +45,10 @@
void InitializeSCardApiStubs(void);
#ifndef _WIN32
#include "smartcard_pcsc.h"
#else
#include "smartcard_winscard.h"
#endif
#endif /* WINPR_SMARTCARD_PRIVATE_H */

View File

@ -21,6 +21,8 @@
#include "config.h"
#endif
#ifndef _WIN32
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -162,3 +164,5 @@ int PCSC_InitializeSCardApi_Link(void)
return status;
}
#endif

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,8 @@
#ifndef WINPR_SMARTCARD_PCSC_PRIVATE_H
#define WINPR_SMARTCARD_PCSC_PRIVATE_H
#ifndef _WIN32
#include <winpr/platform.h>
#include <winpr/smartcard.h>
@ -34,6 +36,22 @@
#define PCSC_SCARD_PROTOCOL_RAW 0x00000004
#define PCSC_SCARD_PROTOCOL_T15 0x00000008
#define PCSC_MAX_BUFFER_SIZE 264
#define PCSC_MAX_BUFFER_SIZE_EXTENDED (4 + 3 + (1 << 16) + 3 + 2)
#define PCSC_MAX_ATR_SIZE 33
typedef struct
{
LPCSTR szReader;
LPVOID pvUserData;
DWORD dwCurrentState;
DWORD dwEventState;
DWORD cbAtr;
BYTE rgbAtr[PCSC_MAX_ATR_SIZE]; /* WinSCard: 36, PCSC: 33 */
}
PCSC_SCARD_READERSTATE;
struct _PCSCFunctionTable
{
LONG (* pfnSCardEstablishContext)(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext);
@ -52,7 +70,7 @@ struct _PCSCFunctionTable
LPSTR mszReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState,
LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen);
LONG (* pfnSCardGetStatusChange)(SCARDCONTEXT hContext,
DWORD dwTimeout, LPSCARD_READERSTATEA rgReaderStates, DWORD cReaders);
DWORD dwTimeout, PCSC_SCARD_READERSTATE* rgReaderStates, DWORD cReaders);
LONG (* pfnSCardControl)(SCARDHANDLE hCard,
DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength,
LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned);
@ -72,4 +90,6 @@ typedef struct _PCSCFunctionTable PCSCFunctionTable;
int PCSC_InitializeSCardApi(void);
PSCardApiFunctionTable PCSC_GetSCardApiFunctionTable(void);
#endif
#endif /* WINPR_SMARTCARD_PCSC_PRIVATE_H */

View File

@ -21,6 +21,8 @@
#include "config.h"
#endif
#ifdef _WIN32
#include <winpr/crt.h>
#include <winpr/library.h>
#include <winpr/smartcard.h>
@ -203,3 +205,5 @@ int WinSCard_InitializeSCardApi(void)
return 1;
}
#endif

View File

@ -20,6 +20,8 @@
#ifndef WINPR_SMARTCARD_WINSCARD_PRIVATE_H
#define WINPR_SMARTCARD_WINSCARD_PRIVATE_H
#ifdef _WIN32
#include <winpr/smartcard.h>
#define WINSCARD_LOAD_PROC(_name, ...) \
@ -28,4 +30,6 @@
int WinSCard_InitializeSCardApi(void);
PSCardApiFunctionTable WinSCard_GetSCardApiFunctionTable(void);
#endif
#endif /* WINPR_SMARTCARD_WINSCARD_PRIVATE_H */