OSDN Git Service

try Ajax-powered popup window of mp4 files on mode=list
[rec10/rec10-git.git] / b25-remote / b25-client.cpp
1 // MllMain.cpp : DLL アプリケーションのエントリ ポイントを定義します。
2 //
3 #include <winscard.h>
4 #include <stdio.h>
5 #include "CasProxy.h"
6 #include "W2L.h"
7 #ifndef SCARD_AUTOALLOCATE
8   #define SCARD_AUTOALLOCATE (DWORD)(-1)  /**< see SCardFreeMemory() */
9 #endif
10
11 //////////////////////////////////////////////////////////////////////
12 // WinSCardフック
13 //////////////////////////////////////////////////////////////////////
14 LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
15 {
16         // プロキシインスタンス生成
17         CCasProxy *pCasProxy = new CCasProxy();
18
19         // サーバに接続
20         if(!pCasProxy->Connect()){
21                 delete pCasProxy;
22                 *phCard = NULL;
23                 return SCARD_E_READER_UNAVAILABLE;
24                 }
25
26         // ハンドルに埋め込む
27         *phCard = reinterpret_cast<SCARDHANDLE>(pCasProxy);
28         if(pdwActiveProtocol)*pdwActiveProtocol = SCARD_PROTOCOL_T1;
29
30         return SCARD_S_SUCCESS;
31 }
32
33 LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)
34 {
35         // サーバから切断
36         CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);
37         if(pCasProxy)delete pCasProxy;
38
39         return SCARD_S_SUCCESS;
40 }
41
42 LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
43 {
44         return SCARD_S_SUCCESS;
45 }
46
47 LONG SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)
48 {
49         return SCARD_S_SUCCESS;
50 }
51
52 LONG SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)
53 {
54         const char szReaderName[] = "BonCasLink Proxy Card Reader\0";
55
56         if(pcchReaders){
57                 if((*pcchReaders == SCARD_AUTOALLOCATE) && mszReaders){
58                         *((LPCSTR *)mszReaders) = szReaderName;         
59                         return SCARD_S_SUCCESS;
60                         }
61                 else{
62                         *pcchReaders = sizeof(szReaderName);
63                         }
64                 }
65
66         if(mszReaders) memcpy(mszReaders, szReaderName, sizeof(szReaderName));
67
68         return SCARD_S_SUCCESS;
69 }
70
71 LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)
72 {
73         // サーバにリクエスト送受信
74         CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);
75         if(!pCasProxy)return SCARD_E_READER_UNAVAILABLE;
76
77         DWORD dwRecvLen = pCasProxy->TransmitCommand(pbSendBuffer, cbSendLength, pbRecvBuffer);
78         if(pcbRecvLength)*pcbRecvLength = dwRecvLen;
79
80         return (dwRecvLen)? SCARD_S_SUCCESS : SCARD_E_TIMEOUT;
81 }
82
83 LONG SCardReleaseContext(SCARDCONTEXT hContext)
84 {
85         return SCARD_S_SUCCESS;
86 }
87