{\r
if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
{\r
+ while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+ ;\r
}\r
else\r
Sts = FTP_ERROR;\r
if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
HostData->CryptMode = CRYPT_SFTP;\r
}\r
-// if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
-// {\r
-// SetTaskMsg(MSGJPN316);\r
-// if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
-// HostData->CryptMode = CRYPT_FTPIS;\r
-// }\r
+ if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
+ {\r
+ SetTaskMsg(MSGJPN316);\r
+ if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+ HostData->CryptMode = CRYPT_FTPIS;\r
+ }\r
if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)\r
{\r
SetTaskMsg(MSGJPN315);\r
}\r
SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, TmpHost.UseSFTP, 0);\r
SendDlgItemMessage(hDlg, HSET_PRIVATE_KEY, WM_SETTEXT, 0, (LPARAM)TmpHost.PrivateKey);\r
- // TODO: FTPIS対応\r
- SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, BST_UNCHECKED, 0);\r
- EnableWindow(GetDlgItem(hDlg, HSET_FTPIS), FALSE);\r
// TODO: SFTP対応\r
SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);\r
EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);\r
if(IsOpenSSLLoaded())\r
{\r
TmpHost.UseFTPES = SendDlgItemMessage(hDlg, HSET_FTPES, BM_GETCHECK, 0, 0);\r
- // TODO: FTPIS対応\r
-// TmpHost.UseFTPIS = SendDlgItemMessage(hDlg, HSET_FTPIS, BM_GETCHECK, 0, 0);\r
+ TmpHost.UseFTPIS = SendDlgItemMessage(hDlg, HSET_FTPIS, BM_GETCHECK, 0, 0);\r
}\r
// TODO: SFTP対応\r
// TmpHost.UseSFTP = SendDlgItemMessage(hDlg, HSET_SFTP, BM_GETCHECK, 0, 0);\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
return TRUE;\r
- // 念のためツールバーのMENU_ABORTも確認\r
-// if(MainTransPkt.Abort != ABORT_NONE)\r
-// {\r
-// MainTransPkt.Abort = ABORT_NONE;\r
-// return TRUE;\r
-// }\r
+ if(CancelFlg == YES)\r
+ return TRUE;\r
return FALSE;\r
}\r
\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対応\r
-// Ret = connect(s, name, namelen);\r
- if(AskCryptMode() == CRYPT_FTPIS)\r
- Ret = connectS(s, name, namelen);\r
- else\r
- Ret = connect(s, name, namelen);\r
+ Ret = connect(s, name, namelen);\r
if(Ret == SOCKET_ERROR)\r
{\r
do\r
{\r
do\r
{\r
- // FTPS対応\r
-// Ret2 = accept(s, addr, addrlen);\r
- if(AskCryptMode() == CRYPT_FTPIS)\r
- Ret2 = acceptS(s, addr, addrlen);\r
- else\r
- Ret2 = accept(s, addr, addrlen);\r
+ Ret2 = accept(s, addr, addrlen);\r
if(Ret2 != INVALID_SOCKET)\r
{\r
#if DBG_MSG\r
SSL** ppSSL;\r
SSL** ppSSLParent;\r
SSL_SESSION* pSession;\r
+ int Return;\r
+ int Error;\r
if(!g_bOpenSSLLoaded)\r
return FALSE;\r
r = FALSE;\r
}\r
// SSLのネゴシエーションには時間がかかる場合がある\r
r = TRUE;\r
- while(p_SSL_connect(*ppSSL) != 1)\r
+ while(r)\r
{\r
- LeaveCriticalSection(&g_OpenSSLLock);\r
- if(g_pOpenSSLTimeoutCallback() || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))\r
+ Return = p_SSL_connect(*ppSSL);\r
+ if(Return == 1)\r
+ break;\r
+ Error = p_SSL_get_error(*ppSSL, Return);\r
+ if(Error == SSL_ERROR_WANT_READ || Error == SSL_ERROR_WANT_WRITE)\r
{\r
- DetachSSL(s);\r
- r = FALSE;\r
+ LeaveCriticalSection(&g_OpenSSLLock);\r
+ if(g_pOpenSSLTimeoutCallback() || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))\r
+ r = FALSE;\r
EnterCriticalSection(&g_OpenSSLLock);\r
- break;\r
}\r
- EnterCriticalSection(&g_OpenSSLLock);\r
+ else\r
+ r = FALSE;\r
}\r
if(r)\r
{\r
EnterCriticalSection(&g_OpenSSLLock);\r
}\r
}\r
+ else\r
+ {\r
+ LeaveCriticalSection(&g_OpenSSLLock);\r
+ DetachSSL(s);\r
+ EnterCriticalSection(&g_OpenSSLLock);\r
+ }\r
}\r
else\r
{\r