OSDN Git Service

Fix bugs of simultaneous connection.
[ffftp/ffftp.git] / putty / dllinterface.c
1 // dllinterface.c\r
2 // Copyright (C) 2011 Suguru Kawamoto\r
3 // 標準入出力APIラッパー\r
4 \r
5 #include <stdio.h>\r
6 #include <windows.h>\r
7 \r
8 #include "iowrapper.h"\r
9 #include "dllinterface.h"\r
10 \r
11 __declspec(dllexport) SFTPSTATUS* SFTP_Create()\r
12 {\r
13         SFTPSTATUS* p;\r
14         if(p = FindSFTPStatus(0))\r
15         {\r
16                 p->ThreadId = GetCurrentThreadId();\r
17                 p->bExit = FALSE;\r
18                 SFTP_InitializeIOBuffer(&p->InBuffer, 65536);\r
19                 SFTP_InitializeIOBuffer(&p->OutBuffer, 65536);\r
20                 SFTP_InitializeIOBuffer(&p->DataInBuffer, 1048576);\r
21                 SFTP_InitializeIOBuffer(&p->DataOutBuffer, 1048576);\r
22                 memset(&p->FilePosition, 0, sizeof(LARGE_INTEGER));\r
23                 CreateThread(NULL, 0, SFTP_ThreadProc, NULL, 0, &p->ThreadId);\r
24         }\r
25         return p;\r
26 }\r
27 \r
28 __declspec(dllexport) void SFTP_Destroy(SFTPSTATUS* pSFTP)\r
29 {\r
30         if(pSFTP)\r
31         {\r
32                 SFTP_UninitializeIOBuffer(&pSFTP->InBuffer);\r
33                 SFTP_UninitializeIOBuffer(&pSFTP->OutBuffer);\r
34                 SFTP_UninitializeIOBuffer(&pSFTP->DataInBuffer);\r
35                 SFTP_UninitializeIOBuffer(&pSFTP->DataOutBuffer);\r
36                 pSFTP->ThreadId = 0;\r
37         }\r
38 }\r
39 \r
40 __declspec(dllexport) BOOL SFTP_IsExited(SFTPSTATUS* pSFTP)\r
41 {\r
42         return pSFTP->bExit;\r
43 }\r
44 \r
45 __declspec(dllexport) BOOL SFTP_SetTimeoutCallback(SFTPSTATUS* pSFTP, LPSFTPTIMEOUTCALLBACK pCallback)\r
46 {\r
47         pSFTP->pCallback = pCallback;\r
48         pSFTP->InBuffer.pCallback = pCallback;\r
49         pSFTP->OutBuffer.pCallback = pCallback;\r
50         pSFTP->DataInBuffer.pCallback = pCallback;\r
51         pSFTP->DataOutBuffer.pCallback = pCallback;\r
52         return TRUE;\r
53 }\r
54 \r
55 __declspec(dllexport) size_t SFTP_PeekStdOut(SFTPSTATUS* pSFTP, void* pData, size_t Size)\r
56 {\r
57         return SFTP_PeekIOBuffer(&pSFTP->OutBuffer, pData, Size);\r
58 }\r
59 \r
60 __declspec(dllexport) size_t SFTP_ReadStdOut(SFTPSTATUS* pSFTP, void* pData, size_t Size)\r
61 {\r
62         return SFTP_ReadIOBuffer(&pSFTP->OutBuffer, pData, Size);\r
63 }\r
64 \r
65 __declspec(dllexport) size_t SFTP_WriteStdIn(SFTPSTATUS* pSFTP, const void* pData, size_t Size)\r
66 {\r
67         return SFTP_WriteIOBuffer(&pSFTP->InBuffer, pData, Size);\r
68 }\r
69 \r
70 __declspec(dllexport) size_t SFTP_PeekDataOut(SFTPSTATUS* pSFTP, void* pData, size_t Size)\r
71 {\r
72         return SFTP_PeekIOBuffer(&pSFTP->DataOutBuffer, pData, Size);\r
73 }\r
74 \r
75 __declspec(dllexport) size_t SFTP_ReadDataOut(SFTPSTATUS* pSFTP, void* pData, size_t Size)\r
76 {\r
77         return SFTP_ReadIOBuffer(&pSFTP->DataOutBuffer, pData, Size);\r
78 }\r
79 \r
80 __declspec(dllexport) size_t SFTP_WriteDataIn(SFTPSTATUS* pSFTP, const void* pData, size_t Size)\r
81 {\r
82         return SFTP_WriteIOBuffer(&pSFTP->DataInBuffer, pData, Size);\r
83 }\r
84 \r
85 __declspec(dllexport) BOOL SFTP_SetFilePosition(SFTPSTATUS* pSFTP, LONGLONG Position)\r
86 {\r
87         pSFTP->FilePosition.QuadPart = Position;\r
88         return TRUE;\r
89 }\r
90 \r