static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt);\r
static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
static void SetErrorMsg(char *fmt, ...);\r
+// 同時接続対応\r
+static char* GetErrMsg();\r
\r
/*===== ローカルなワーク =====*/\r
\r
static int MoveToForeground = NO; /* ウインドウを前面に移動するかどうか (YES/NO) */\r
\r
static char CurDir[FMAX_PATH+1] = { "" };\r
-static char ErrMsg[ERR_MSG_LEN+7];\r
+// 同時接続対応\r
+//static char ErrMsg[ERR_MSG_LEN+7];\r
+static char ErrMsg[MAX_DATA_CONNECTION+1][ERR_MSG_LEN+7];\r
+static DWORD ErrMsgThreadId[MAX_DATA_CONNECTION+1];\r
+static HANDLE hErrMsgMutex;\r
\r
// 同時接続対応\r
static int WaitForMainThread = NO;\r
\r
hListAccMutex = CreateMutex( NULL, FALSE, NULL );\r
hRunMutex = CreateMutex( NULL, TRUE, NULL );\r
+ // 同時接続対応\r
+ hErrMsgMutex = CreateMutex( NULL, FALSE, NULL );\r
\r
ClearAll = NO;\r
ForceAbort = NO;\r
\r
CloseHandle( hListAccMutex );\r
CloseHandle( hRunMutex );\r
+ // 同時接続対応\r
+ CloseHandle( hErrMsgMutex );\r
return;\r
}\r
\r
BackgrndMessageProc();\r
Sleep(1);\r
}\r
- memset(ErrMsg, NUL, ERR_MSG_LEN+7);\r
+// memset(ErrMsg, NUL, ERR_MSG_LEN+7);\r
+ memset(GetErrMsg(), NUL, ERR_MSG_LEN+7);\r
\r
// Canceled = NO;\r
Canceled[ThreadCount] = NO;\r
ReleaseMutex(hListAccMutex);\r
// FTPS対応\r
// iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
- if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+ if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
else\r
- iRetCode = FTP_ERROR;\r
+ iRetCode = 500;\r
}\r
else\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
ReleaseMutex(hListAccMutex);\r
// FTPS対応\r
// iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
- if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+ if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
else\r
- iRetCode = FTP_ERROR;\r
+ iRetCode = 500;\r
}\r
else\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
{\r
case WM_INITDIALOG :\r
SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);\r
- SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);\r
+ // 同時接続対応\r
+// SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);\r
+ SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)GetErrMsg());\r
return(TRUE);\r
\r
case WM_COMMAND :\r
ReleaseMutex(hListAccMutex);\r
// FTPS対応\r
// iRetCode = UpLoadFile(Pkt, data_socket);\r
- if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+ if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
else\r
- iRetCode = FTP_ERROR;\r
+ iRetCode = 500;\r
}\r
else\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
ReleaseMutex(hListAccMutex);\r
// FTPS対応\r
// iRetCode = UpLoadFile(Pkt, data_socket);\r
- if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+ if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
else\r
- iRetCode = FTP_ERROR;\r
+ iRetCode = 500;\r
}\r
else\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
{\r
va_list Args;\r
\r
- if(strlen(ErrMsg) == 0)\r
+ // 同時接続対応\r
+// if(strlen(ErrMsg) == 0)\r
+ if(strlen(GetErrMsg()) == 0)\r
{\r
va_start(Args, fmt);\r
- wvsprintf(ErrMsg, fmt, Args);\r
+ // 同時接続対応\r
+// wvsprintf(ErrMsg, fmt, Args);\r
+ wvsprintf(GetErrMsg(), fmt, Args);\r
va_end(Args);\r
}\r
return;\r
}\r
\r
\r
+// 同時接続対応\r
+static char* GetErrMsg()\r
+{\r
+ char* r;\r
+ DWORD ThreadId;\r
+ int i;\r
+ r = NULL;\r
+ WaitForSingleObject(hErrMsgMutex, INFINITE);\r
+ ThreadId = GetCurrentThreadId();\r
+ i = 0;\r
+ while(i < MAX_DATA_CONNECTION + 1)\r
+ {\r
+ if(ErrMsgThreadId[i] == ThreadId)\r
+ {\r
+ r = ErrMsg[i];\r
+ break;\r
+ }\r
+ i++;\r
+ }\r
+ if(!r)\r
+ {\r
+ i = 0;\r
+ while(i < MAX_DATA_CONNECTION + 1)\r
+ {\r
+ if(ErrMsgThreadId[i] == 0)\r
+ {\r
+ ErrMsgThreadId[i] = ThreadId;\r
+ r = ErrMsg[i];\r
+ break;\r
+ }\r
+ i++;\r
+ }\r
+ }\r
+ ReleaseMutex(hErrMsgMutex);\r
+ return r;\r
+}\r