-/*=============================================================================\r
+/*=============================================================================\r
*\r
-* \83\\83P\83b\83g\r
+* ソケット\r
*\r
===============================================================================\r
/ Copyright (C) 1997-2007 Sota. All rights reserved.\r
} ASYNCSIGNALDATABASE;\r
\r
\r
-// \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+// スレッド衝突のバグ修正\r
+// 念のためテーブルを増量\r
//#define MAX_SIGNAL_ENTRY 10\r
//#define MAX_SIGNAL_ENTRY_DBASE 5\r
#define MAX_SIGNAL_ENTRY 100\r
\r
\r
\r
-/*===== \83v\83\8d\83g\83^\83C\83v =====*/\r
+/*===== プロトタイプ =====*/\r
\r
static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);\r
static int AskAsyncDone(SOCKET s, int *Error, int Mask);\r
static int UnRegistAsyncTableDbase(HANDLE Async);\r
\r
\r
-/*===== \8aO\95\94\8eQ\8fÆ =====*/\r
+/*===== 外部参照 =====*/\r
\r
extern int TimeOut;\r
\r
\r
-/*===== \83\8d\81[\83J\83\8b\82È\83\8f\81[\83N =====*/\r
+/*===== ローカルなワーク =====*/\r
\r
static const char SocketWndClass[] = "FFFTPSocketWnd";\r
static HWND hWndSocket;\r
static ASYNCSIGNALDATABASE SignalDbase[MAX_SIGNAL_ENTRY_DBASE];\r
\r
//static HANDLE hAsyncTblAccMutex;\r
-// \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+// スレッド衝突のバグ修正\r
static HANDLE hAsyncTblAccMutex;\r
\r
\r
* Parameter\r
*\r
* Return Value\r
-* int \83X\83e\81[\83^\83X\r
-* SUCCESS/FAIL\r
+* int ステータス\r
+* FFFTP_SUCCESS/FFFTP_FAIL\r
*----------------------------------------------------------------------------*/\r
\r
int MakeSocketWin(HWND hWnd, HINSTANCE hInst)\r
wClass.hIconSm = NULL;\r
RegisterClassEx(&wClass);\r
\r
- Sts = FAIL;\r
+ Sts = FFFTP_FAIL;\r
hWndSocket = CreateWindowEx(0, SocketWndClass, NULL,\r
WS_BORDER | WS_POPUP,\r
0, 0, 0, 0,\r
{\r
// hAsyncTblAccMutex = CreateMutex(NULL, FALSE, NULL);\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
// for(i = 0; i < MAX_SIGNAL_ENTRY; i++)\r
// Signal[i].Socket = INVALID_SOCKET;\r
// for(i = 0; i < MAX_SIGNAL_ENTRY_DBASE; i++)\r
for(i = 0; i < MAX_SIGNAL_ENTRY_DBASE; i++)\r
SignalDbase[i].Async = 0;\r
}\r
- Sts = SUCCESS;\r
+ Sts = FFFTP_SUCCESS;\r
}\r
return(Sts);\r
}\r
/*----- \r
*\r
* Parameter\r
-* \82È\82µ\r
+* なし\r
*\r
* Return Value\r
-* \82È\82µ\r
+* なし\r
*----------------------------------------------------------------------------*/\r
\r
void DeleteSocketWin(void)\r
{\r
// CloseHandle(hAsyncTblAccMutex);\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
CloseHandle(hAsyncTblAccMutex);\r
hAsyncTblAccMutex = NULL;\r
\r
/*----- \r
*\r
* Parameter\r
-* HWND hWnd : \83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b\r
-* UINT message : \83\81\83b\83Z\81[\83W\94Ô\8d\86\r
-* WPARAM wParam : \83\81\83b\83Z\81[\83W\82Ì WPARAM \88ø\90\94\r
-* LPARAM lParam : \83\81\83b\83Z\81[\83W\82Ì LPARAM \88ø\90\94\r
+* HWND hWnd : ウインドウハンドル\r
+* UINT message : メッセージ番号\r
+* WPARAM wParam : メッセージの WPARAM 引数\r
+* LPARAM lParam : メッセージの LPARAM 引数\r
*\r
* Return Value\r
* BOOL TRUE/FALSE\r
switch(message)\r
{\r
case WM_ASYNC_SOCKET :\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
{\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
break;\r
\r
case WM_ASYNC_DBASE :\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
{\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
break;\r
\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
*Error = 0;\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY)\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
*Error = 0;\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY)\r
{\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
{\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY)\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
{\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
{\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
\r
if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
return(Sts);\r
}\r
int Sts;\r
int Pos;\r
\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
Sts = NO;\r
for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
break;\r
}\r
}\r
- // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+ // スレッド衝突のバグ修正\r
ReleaseMutex(hAsyncTblAccMutex);\r
return(Sts);\r
}\r
#endif\r
CancelCheckWork = NO;\r
\r
- // FTPS\91Î\89\9e\r
+ // FTPS対応\r
// Ret = closesocket(s);\r
if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
Ret = closesocketS(s);\r
Ret = WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, FD_CONNECT | FD_CLOSE | FD_ACCEPT | FD_READ | FD_WRITE);\r
if(Ret != SOCKET_ERROR)\r
{\r
- // FTPS\91Î\89\9e\r
+ // FTPS対応\r
// Ret = connect(s, name, namelen);\r
if(AskCryptMode() == CRYPT_FTPIS)\r
Ret = connectS(s, name, namelen);\r
{\r
do\r
{\r
- // FTPS\91Î\89\9e\r
+ // FTPS対応\r
// Ret2 = accept(s, addr, addrlen);\r
if(AskCryptMode() == CRYPT_FTPIS)\r
Ret2 = acceptS(s, addr, addrlen);\r
\r
\r
\r
-/*----- recv\91\8a\93\96\82Ì\8aÖ\90\94 --------------------------------------------------------\r
+/*----- recv相当の関数 --------------------------------------------------------\r
*\r
* Parameter\r
-* SOCKET s : \83\\83P\83b\83g\r
-* char *buf : \83f\81[\83^\82ð\93Ç\82Ý\8d\9e\82Þ\83o\83b\83t\83@\r
-* int len : \92·\82³\r
-* int flags : recv\82É\97^\82¦\82é\83t\83\89\83O\r
-* int *TimeOutErr : \83^\83C\83\80\83A\83E\83g\82µ\82½\82©\82Ç\82¤\82©\82ð\95Ô\82·\83\8f\81[\83N\r
+* SOCKET s : ソケット\r
+* char *buf : データを読み込むバッファ\r
+* int len : 長さ\r
+* int flags : recvに与えるフラグ\r
+* int *TimeOutErr : タイムアウトしたかどうかを返すワーク\r
*\r
* Return Value\r
-* int : recv\82Ì\96ß\82è\92l\82Æ\93¯\82¶\r
+* int : recvの戻り値と同じ\r
*\r
* Note\r
-* \83^\83C\83\80\83A\83E\83g\82Ì\8e\9e\82Í TimeOut=YES\81ARet=SOCKET_ERROR \82É\82È\82é\r
+* タイムアウトの時は TimeOut=YES、Ret=SOCKET_ERROR になる\r
*----------------------------------------------------------------------------*/\r
int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *CancelCheckWork)\r
{\r
if(TimeOut != 0)\r
time(&StartTime);\r
\r
- // FTPS\91Î\89\9e\r
- // OpenSSL\82Å\82Í\8eó\90M\8am\94F\82ÍFD_READ\82ª\95¡\90\94\89ñ\8eó\90M\82³\82ê\82é\89Â\94\\90«\82ª\82 \82é\r
+ // FTPS対応\r
+ // OpenSSLでは受信確認はFD_READが複数回受信される可能性がある\r
// while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
{\r
DoPrintf("## recv()");\r
#endif\r
\r
- // FTPS\91Î\89\9e\r
+ // FTPS対応\r
// Ret = recv(s, buf, len, flags);\r
if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
Ret = recvS(s, buf, len, flags);\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
break;\r
- // FTPS\91Î\89\9e\r
- // \8eó\90M\8am\94F\82ð\83o\83C\83p\83X\82µ\82½\82½\82ß\82±\82±\82Å\83^\83C\83\80\83A\83E\83g\82Ì\8am\94F\r
+ // FTPS対応\r
+ // 受信確認をバイパスしたためここでタイムアウトの確認\r
if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
{\r
if(BackgrndMessageProc() == YES)\r
if(BackgrndMessageProc() == YES)\r
*CancelCheckWork = YES;\r
\r
- // FTPS\91Î\89\9e\r
- // \91\97\90M\83o\83b\83t\83@\82Ì\8bó\82«\8am\94F\82É\82Í\89e\8b¿\82µ\82È\82¢\82ª\94O\82Ì\82½\82ß\r
+ // FTPS対応\r
+ // 送信バッファの空き確認には影響しないが念のため\r
// while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
{\r
DoPrintf("## send()");\r
#endif\r
\r
- // FTPS\91Î\89\9e\r
+ // FTPS対応\r
// Ret = send(s, buf, len, flags);\r
if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
Ret = sendS(s, buf, len, flags);\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
break;\r
- // FTPS\91Î\89\9e\r
- // \91\97\90M\83o\83b\83t\83@\8am\94F\82ð\83o\83C\83p\83X\82µ\82½\82½\82ß\82±\82±\82Å\83^\83C\83\80\83A\83E\83g\82Ì\8am\94F\r
+ // FTPS対応\r
+ // 送信バッファ確認をバイパスしたためここでタイムアウトの確認\r
if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
{\r
if(BackgrndMessageProc() == YES)\r
* Parameter\r
*\r
* Return Value\r
-* int \83X\83e\81[\83^\83X\r
-* SUCCESS/FAIL\r
+* int ステータス\r
+* FFFTP_SUCCESS/FFFTP_FAIL\r
*----------------------------------------------------------------------------*/\r
\r
int CheckClosedAndReconnect(void)\r
\r
//SetTaskMsg("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");\r
\r
- Sts = SUCCESS;\r
+ Sts = FFFTP_SUCCESS;\r
if(AskAsyncDone(AskCmdCtrlSkt(), &Error, FD_CLOSE_BIT) == YES)\r
{\r
Sts = ReConnectCmdSkt();\r