void ResetAutoExitFlg(void);\r
int AskAutoExit(void);\r
// 暗号化通信対応\r
-BOOL __stdcall SSLTimeoutCallback();\r
-BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName);\r
+BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted);\r
+BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName);\r
\r
/*===== filelist.c =====*/\r
\r
int ReConnectCmdSkt(void);\r
// int ReConnectTrnSkt(void);\r
// 同時接続対応\r
-int ReConnectTrnSkt(SOCKET *Skt);\r
+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork);\r
SOCKET AskCmdCtrlSkt(void);\r
SOCKET AskTrnCtrlSkt(void);\r
void SktShareProh(void);\r
SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);\r
int AskTryingConnect(void);\r
-int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
+// 同時接続対応\r
+//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
+int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork);\r
// 暗号化通信対応\r
int AskCryptMode(void);\r
int AskUseNoEncryption(void);\r
void CalcFileSizeProc(void);\r
void DispCWDerror(HWND hWnd);\r
void CopyURLtoClipBoard(void);\r
-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);\r
+// 同時接続対応\r
+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);\r
+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork);\r
void ReformToVMSstyleDirName(char *Path);\r
void ReformToVMSstylePathName(char *Path);\r
#if defined(HAVE_OPENVMS)\r
int DoCHMOD(char *Path, char *Mode);\r
// 同時接続対応\r
//int DoSIZE(char *Path, LONGLONG *Size);\r
+int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork);\r
+// 同時接続対応\r
//int DoMDTM(char *Path, FILETIME *Time);\r
-int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size);\r
-int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time);\r
+int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork);\r
int DoQUOTE(char *CmdStr);\r
SOCKET DoClose(SOCKET Sock);\r
int DoQUIT(SOCKET ctrl_skt);\r
int CommandProcCmd(char *Reply, char *fmt, ...);\r
// 同時接続対応\r
//int CommandProcTrn(char *Reply, char *fmt, ...);\r
-int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...);\r
+int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...);\r
int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...);\r
int SendData(SOCKET Skt, char *Data, int Size, int Mode, int *CancelCheckWork);\r
int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp);\r
static void SaveCurrentSetToHistory(void);\r
static int ReConnectSkt(SOCKET *Skt);\r
// 暗号化通信対応\r
+// 同時接続対応\r
//static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
-static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
-static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);\r
+static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork);\r
+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork);\r
static int CheckOneTimePassword(char *Pass, char *Reply, int Type);\r
static BOOL CALLBACK BlkHookFnc(void);\r
static int Socks5MakeCmdPacket(SOCKS5REQUEST *Packet, char Cmd, int ValidIP, ulong IP, char *Host, ushort Port);\r
static int SocksSendCmd(SOCKET Socket, void *Data, int Size, int *CancelCheckWork);\r
-static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet);\r
-static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet);\r
+// 同時接続対応\r
+//static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet);\r
+static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet, int *CancelCheckWork);\r
+// 同時接続対応\r
+//static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet);\r
+static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet, int *CancelCheckWork);\r
static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork);\r
\r
/*===== 外部参照 =====*/\r
\r
DisableUserOpe();\r
// 暗号化通信対応\r
+ // 同時接続対応\r
// CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);\r
- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);\r
+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
if(CmdCtrlSocket != INVALID_SOCKET)\r
\r
DisableUserOpe();\r
// 暗号化通信対応\r
+ // 同時接続対応\r
// CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
if(CmdCtrlSocket != INVALID_SOCKET)\r
\r
DisableUserOpe();\r
// 暗号化通信対応\r
+ // 同時接続対応\r
// CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
if(CmdCtrlSocket != INVALID_SOCKET)\r
\r
DisableUserOpe();\r
// 暗号化通信対応\r
+ // 同時接続対応\r
// CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);\r
+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
if(CmdCtrlSocket != INVALID_SOCKET)\r
// return(ReConnectSkt(&TrnCtrlSocket));\r
//}\r
// 同時接続対応\r
-int ReConnectTrnSkt(SOCKET *Skt)\r
+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)\r
{\r
// char Path[FMAX_PATH+1];\r
int Sts;\r
HostData.UseFTPIS = NO;\r
if(HostData.CryptMode != CRYPT_SFTP)\r
HostData.UseSFTP = NO;\r
+ // 暗号化通信対応\r
+ // 同時接続対応\r
// if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
- if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+ if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, CancelCheckWork)) != INVALID_SOCKET)\r
{\r
// AskRemoteCurDir(Path, FMAX_PATH);\r
// DoCWD(Path, YES, YES, YES);\r
do_closesocket(*Skt);\r
/* 再接続 */\r
// 暗号化通信対応\r
+ // 同時接続対応\r
// if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
- if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
+ if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg)) != INVALID_SOCKET)\r
{\r
AskRemoteCurDir(Path, FMAX_PATH);\r
DoCWD(Path, YES, YES, YES);\r
*----------------------------------------------------------------------------*/\r
\r
// 暗号化通信対応\r
-static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
+static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork)\r
{\r
int Sts;\r
int Flg;\r
\r
if(strlen(Tmp) != 0)\r
{\r
- if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
+ // 同時接続対応\r
+// if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
+ if((ContSock = connectsock(Tmp, Port, "", CancelCheckWork)) != INVALID_SOCKET)\r
{\r
// バッファを無効\r
#ifdef DISABLE_CONTROL_NETWORK_BUFFERS\r
// ;\r
if(CryptMode == CRYPT_FTPIS)\r
{\r
- if(AttachSSL(ContSock, INVALID_SOCKET))\r
+ if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
{\r
- while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+ while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)\r
;\r
}\r
else\r
}\r
else\r
{\r
- while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
+ while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)\r
;\r
}\r
\r
(Fwall == FWALL_FU_FP_USER) ||\r
(Fwall == FWALL_FU_FP))\r
{\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)\r
+ // 同時接続対応\r
+// if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", FwallUser) / 100) == FTP_CONTINUE)\r
{\r
CheckOneTimePassword(FwallPass, Reply, FwallSecurity);\r
- Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+ Sts = command(ContSock, NULL, CancelCheckWork, "PASS %s", Reply) / 100;\r
}\r
}\r
else if(Fwall == FWALL_SIDEWINDER)\r
{\r
- Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;\r
+ Sts = command(ContSock, Reply, CancelCheckWork, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;\r
}\r
if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))\r
{\r
Flg++;\r
\r
if(HostPort == PORT_NOR)\r
- Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;\r
+ Sts = command(ContSock, NULL, CancelCheckWork, "%s %s", SiteTbl[Flg], Host) / 100;\r
else\r
- Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;\r
+ Sts = command(ContSock, NULL, CancelCheckWork, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;\r
}\r
\r
if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))\r
// FTPES対応\r
if(CryptMode == CRYPT_FTPES)\r
{\r
- if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234)\r
+ if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234)\r
{\r
- if(AttachSSL(ContSock, INVALID_SOCKET))\r
+ if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
{\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200)\r
{\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PROT P")) == 200)\r
{\r
}\r
else\r
if(Sts == FTP_ERROR)\r
break;\r
Continue = NO;\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
+ // 同時接続対応\r
+// if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
{\r
if((strlen(Pass) != 0) || \r
(InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
if(strcmp(Reply, " ") == 0)\r
strcpy(Reply, "");\r
\r
- Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;\r
+ Sts = command(ContSock, NULL, CancelCheckWork, "PASS %s", Reply) / 100;\r
if(Sts == FTP_ERROR)\r
{\r
strcpy(Pass, "");\r
if((strlen(Acct) != 0) || \r
(InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
{\r
- Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;\r
+ // 同時接続対応\r
+// Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;\r
+ Sts = command(ContSock, NULL, CancelCheckWork, "ACCT %s", Acct) / 100;\r
}\r
else\r
DoPrintf("No account specified");\r
// ホストの機能を確認\r
if(ContSock != INVALID_SOCKET)\r
{\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "FEAT")) == 211)\r
{\r
// 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用\r
// UTF-8対応\r
// UTF-8対応\r
if(HostData->NameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
{\r
- if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200)\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)\r
{\r
}\r
}\r
return(ContSock);\r
}\r
\r
-static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
+// 同時接続対応\r
+//static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)\r
+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork)\r
{\r
SOCKET ContSock;\r
ContSock = INVALID_SOCKET;\r
- CancelFlg = NO;\r
- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
+ *CancelCheckWork = NO;\r
+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
{\r
SetTaskMsg(MSGJPN317);\r
- if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+ if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
HostData->CryptMode = CRYPT_SFTP;\r
}\r
- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
+ if(*CancelCheckWork == 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
+ if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
HostData->CryptMode = CRYPT_FTPIS;\r
}\r
- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)\r
+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)\r
{\r
SetTaskMsg(MSGJPN315);\r
- if((ContSock = DoConnectCrypt(CRYPT_FTPES, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+ if((ContSock = DoConnectCrypt(CRYPT_FTPES, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
HostData->CryptMode = CRYPT_FTPES;\r
}\r
- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES)\r
+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES)\r
{\r
SetTaskMsg(MSGJPN314);\r
- if((ContSock = DoConnectCrypt(CRYPT_NONE, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)\r
+ if((ContSock = DoConnectCrypt(CRYPT_NONE, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
HostData->CryptMode = CRYPT_NONE;\r
}\r
return ContSock;\r
if(Fwall == FWALL_SOCKS4)\r
{\r
Socks4Reply.Result = -1;\r
+ // 同時接続対応\r
+// if((SocksSendCmd(sSocket, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (Socks4GetCmdReply(sSocket, &Socks4Reply) != FFFTP_SUCCESS) || \r
+// (Socks4Reply.Result != SOCKS4_RES_OK))\r
if((SocksSendCmd(sSocket, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (Socks4GetCmdReply(sSocket, &Socks4Reply) != FFFTP_SUCCESS) || \r
+ (Socks4GetCmdReply(sSocket, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) || \r
(Socks4Reply.Result != SOCKS4_RES_OK))\r
{\r
SetTaskMsg(MSGJPN023, Socks4Reply.Result);\r
}\r
\r
Socks5Reply.Result = -1;\r
+ // 同時接続対応\r
+// if((SocksSendCmd(sSocket, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (Socks5GetCmdReply(sSocket, &Socks5Reply) != FFFTP_SUCCESS) || \r
+// (Socks5Reply.Result != SOCKS5_RES_OK))\r
if((SocksSendCmd(sSocket, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (Socks5GetCmdReply(sSocket, &Socks5Reply) != FFFTP_SUCCESS) || \r
+ (Socks5GetCmdReply(sSocket, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) || \r
(Socks5Reply.Result != SOCKS5_RES_OK))\r
{\r
SetTaskMsg(MSGJPN024, Socks5Reply.Result);\r
Len = offsetof(SOCKS4CMD, UserID) + strlen(FwallUser) + 1;\r
\r
Socks4Reply.Result = -1;\r
+ // 同時接続対応\r
+// if((SocksSendCmd(listen_skt, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (Socks4GetCmdReply(listen_skt, &Socks4Reply) != FFFTP_SUCCESS) || \r
+// (Socks4Reply.Result != SOCKS4_RES_OK))\r
if((SocksSendCmd(listen_skt, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (Socks4GetCmdReply(listen_skt, &Socks4Reply) != FFFTP_SUCCESS) || \r
+ (Socks4GetCmdReply(listen_skt, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) || \r
(Socks4Reply.Result != SOCKS4_RES_OK))\r
{\r
SetTaskMsg(MSGJPN028, Socks4Reply.Result);\r
Len = Socks5MakeCmdPacket(&Socks5Cmd, SOCKS5_CMD_BIND, UseIPadrs, CurSockAddr.sin_addr.s_addr, DomainName, CurSockAddr.sin_port);\r
\r
Socks5Reply.Result = -1;\r
+ // 同時接続対応\r
+// if((SocksSendCmd(listen_skt, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (Socks5GetCmdReply(listen_skt, &Socks5Reply) != FFFTP_SUCCESS) || \r
+// (Socks5Reply.Result != SOCKS5_RES_OK))\r
if((SocksSendCmd(listen_skt, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (Socks5GetCmdReply(listen_skt, &Socks5Reply) != FFFTP_SUCCESS) || \r
+ (Socks5GetCmdReply(listen_skt, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) || \r
(Socks5Reply.Result != SOCKS5_RES_OK))\r
{\r
SetTaskMsg(MSGJPN029, Socks5Reply.Result);\r
if(listen_skt != INVALID_SOCKET)\r
{\r
#define UC(b) (((int)b)&0xff)\r
- if((command(ctrl_skt,NULL, &CancelFlg, "PORT %d,%d,%d,%d,%d,%d",\r
+ // 同時接続対応\r
+// if((command(ctrl_skt,NULL, &CancelFlg, "PORT %d,%d,%d,%d,%d,%d",\r
+// UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),\r
+// UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE)\r
+ if((command(ctrl_skt,NULL, CancelCheckWork, "PORT %d,%d,%d,%d,%d,%d",\r
UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),\r
UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE)\r
{\r
* int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)\r
*----------------------------------------------------------------------------*/\r
\r
-static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)\r
+// 同時接続対応\r
+//static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)\r
+static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet, int *CancelCheckWork)\r
{\r
uchar *Pos;\r
int Len;\r
Pos = (uchar *)Packet;\r
Pos += SOCKS5REPLY_SIZE;\r
\r
- if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, &CancelFlg)) == FFFTP_SUCCESS)\r
+ // 同時接続対応\r
+// if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, &CancelFlg)) == FFFTP_SUCCESS)\r
+ if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, CancelCheckWork)) == FFFTP_SUCCESS)\r
{\r
if(Packet->Type == SOCKS5_ADRS_IPV4)\r
Len = 4 + 2;\r
Len = 6 + 2;\r
else\r
{\r
- if((Ret = ReadNchar(Socket, (char *)Pos, 1, &CancelFlg)) == FFFTP_SUCCESS)\r
+ // 同時接続対応\r
+// if((Ret = ReadNchar(Socket, (char *)Pos, 1, &CancelFlg)) == FFFTP_SUCCESS)\r
+ if((Ret = ReadNchar(Socket, (char *)Pos, 1, CancelCheckWork)) == FFFTP_SUCCESS)\r
{\r
Len = *Pos + 2;\r
Pos++;\r
}\r
\r
if(Ret == FFFTP_SUCCESS)\r
- Ret = ReadNchar(Socket, (char *)Pos, Len, &CancelFlg);\r
+ // 同時接続対応\r
+// Ret = ReadNchar(Socket, (char *)Pos, Len, &CancelFlg);\r
+ Ret = ReadNchar(Socket, (char *)Pos, Len, CancelCheckWork);\r
}\r
\r
if(Ret != FFFTP_SUCCESS)\r
* int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)\r
*----------------------------------------------------------------------------*/\r
\r
-static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet)\r
+// 同時接続対応\r
+//static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet)\r
+static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet, int *CancelCheckWork)\r
{\r
int Ret;\r
\r
- Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, &CancelFlg);\r
+ // 同時接続対応\r
+// Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, &CancelFlg);\r
+ Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, CancelCheckWork);\r
\r
if(Ret != FFFTP_SUCCESS)\r
DoPrintf(MSGJPN035);\r
else\r
Socks5Method.Methods[0] = SOCKS5_AUTH_USER;\r
\r
+ // 同時接続対応\r
+// if((SocksSendCmd(Socket, &Socks5Method, SOCKS5METHODREQUEST_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||\r
+// (Socks5MethodReply.Method == (uchar)0xFF))\r
if((SocksSendCmd(Socket, &Socks5Method, SOCKS5METHODREQUEST_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||\r
+ (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||\r
(Socks5MethodReply.Method == (uchar)0xFF))\r
{\r
SetTaskMsg(MSGJPN036);\r
Buf[2 + Len] = Len2;\r
strcpy(Buf+3+Len, FwallPass);\r
\r
+ // 同時接続対応\r
+// if((SocksSendCmd(Socket, &Buf, Len+Len2+3, CancelCheckWork) != FFFTP_SUCCESS) ||\r
+// (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||\r
+// (Socks5Status.Status != 0))\r
if((SocksSendCmd(Socket, &Buf, Len+Len2+3, CancelCheckWork) != FFFTP_SUCCESS) ||\r
- (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||\r
+ (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||\r
(Socks5Status.Status != 0))\r
{\r
SetTaskMsg(MSGJPN037);\r
* int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)\r
*----------------------------------------------------------------------------*/\r
\r
-int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)\r
+// 同時接続対応\r
+//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)\r
+int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork)\r
{\r
int Ret;\r
char Buf[300];\r
Ret = FFFTP_FAIL;\r
if((AskHostFireWall() == YES) && (FwallType == FWALL_SOCKS4))\r
{\r
- Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf);\r
+ // 同時接続対応\r
+// Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf);\r
+ Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf, CancelCheckWork);\r
*Data = Socket;\r
Ret = FFFTP_SUCCESS;\r
}\r
else if((AskHostFireWall() == YES) &&\r
((FwallType == FWALL_SOCKS5_NOAUTH) || (FwallType == FWALL_SOCKS5_USER)))\r
{\r
- Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf);\r
+ // 同時接続対応\r
+// Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf);\r
+ Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf, CancelCheckWork);\r
*Data = Socket;\r
Ret = FFFTP_SUCCESS;\r
}\r
FILELIST *Pos;\r
TRANSPACKET Pkt;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
{\r
TRANSPACKET Pkt;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
int Level;\r
int Mode;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
char Tmp[FMAX_PATH+1];\r
int FirstAdd;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
int FirstAdd;\r
char Cur[FMAX_PATH+1];\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
FILETIME TmpFtimeL;\r
FILETIME TmpFtimeR;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r
DisableUserOpe();\r
char CurDir[FMAX_PATH+1];\r
char Tmp[FMAX_PATH+1];\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
// デッドロック対策\r
DisableUserOpe();\r
Sts = YES;\r
else\r
{\r
/* フルパスを使わない時のための処理 */\r
- if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)\r
+ // 同時接続対応\r
+// if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)\r
+ if(ProcForNonFullpath(AskCmdCtrlSkt(), Path, CurDir, GetMainHwnd(), &CancelFlg) == FFFTP_FAIL)\r
*Sw = NO_ALL;\r
\r
if(*Sw != NO_ALL)\r
int RenFlg;\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
Sts = FFFTP_SUCCESS;\r
if(GetFocus() == GetLocalHwnd())\r
Win = WIN_LOCAL;\r
int RenFlg;\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(MoveMode == MOVE_DISABLE)\r
{\r
return;\r
char *Title;\r
int Tmp;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetLocalHwnd())\r
{\r
Win = WIN_LOCAL;\r
char Tmp[FMAX_PATH+1];\r
int i;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR)\r
{\r
SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp);\r
char Remote[FMAX_PATH+1];\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1);\r
if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH))\r
{\r
char *Title;\r
int Tmp;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(Win == WIN_LOCAL)\r
Title = MSGJPN072;\r
else\r
char *BufTmp;\r
int BufLen;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetRemoteHwnd())\r
{\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
int Tmp;\r
FILELIST *FileListBase;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if(GetFocus() == GetRemoteHwnd())\r
{\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
int All;\r
int Sts;\r
\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
+\r
if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL)\r
{\r
Sts = FFFTP_SUCCESS;\r
* Path にファイル名のみ残す。(パス名は消す)\r
*----------------------------------------------------------------------------*/\r
\r
-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+// 同時接続対応\r
+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)\r
+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork)\r
{\r
int Sts;\r
int Cmd;\r
\r
if(strcmp(Tmp, CurDir) != 0)\r
{\r
- if(Type == 0)\r
- Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
- else\r
- // 同時接続対応\r
+ // 同時接続対応\r
+// if(Type == 0)\r
+// Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);\r
+// else\r
// Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);\r
- Cmd = CommandProcTrn((SOCKET)(Type - 1), NULL, "CWD %s", Tmp);\r
+ Cmd = CommandProcTrn(cSkt, NULL, CancelCheckWork, "CWD %s", Tmp);\r
\r
if(Cmd/100 != FTP_COMPLETE)\r
{\r
static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt);\r
// 同時接続対応\r
//static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);\r
-static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);\r
+static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii, int *CancelCheckWork);\r
static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode);\r
static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode);\r
static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);\r
static int KeepDlg = NO; /* 転送中ダイアログを消さないかどうか (YES/NO) */\r
static int MoveToForeground = NO; /* ウインドウを前面に移動するかどうか (YES/NO) */\r
\r
-static char CurDir[FMAX_PATH+1] = { "" };\r
+// 同時接続対応\r
+//static char CurDir[FMAX_PATH+1] = { "" };\r
+static char CurDir[MAX_DATA_CONNECTION][FMAX_PATH+1];\r
// 同時接続対応\r
//static char ErrMsg[ERR_MSG_LEN+7];\r
static char ErrMsg[MAX_DATA_CONNECTION+1][ERR_MSG_LEN+7];\r
\r
void InitTransCurDir(void)\r
{\r
- strcpy(CurDir, "");\r
+ // 同時接続対応\r
+// strcpy(CurDir, "");\r
+ int i;\r
+ for(i = 0; i < MAX_DATA_CONNECTION; i++)\r
+ strcpy(CurDir[i], "");\r
return;\r
}\r
\r
if(TrnSkt == INVALID_SOCKET || NewCmdSkt != CmdSkt)\r
{\r
ReleaseMutex(hListAccMutex);\r
- ReConnectTrnSkt(&TrnSkt);\r
+ ReConnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]);\r
+ // 同時ログイン数制限に引っかかった可能性あり\r
+ // 負荷を下げるためにしばらく待機\r
+ if(TrnSkt == INVALID_SOCKET)\r
+ {\r
+ i = 10000;\r
+ while(NewCmdSkt != CmdSkt && i > 0)\r
+ {\r
+ BackgrndMessageProc();\r
+ Sleep(1);\r
+ i--;\r
+ }\r
+ }\r
// WaitForSingleObject(hListAccMutex, INFINITE);\r
while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)\r
{\r
{\r
/* フルパスを使わないための処理 */\r
// if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)\r
- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)\r
+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)\r
{\r
// if(strncmp(TransPacketBase->Cmd, "RETR-S", 6) == 0)\r
if(strncmp(Pos->Cmd, "RETR-S", 6) == 0)\r
// DoSIZE(TransPacketBase->RemoteFile, &TransPacketBase->Size);\r
// DoMDTM(TransPacketBase->RemoteFile, &TransPacketBase->Time);\r
// strcpy(TransPacketBase->Cmd, "RETR ");\r
- DoSIZE(TrnSkt, Pos->RemoteFile, &Pos->Size);\r
- DoMDTM(TrnSkt, Pos->RemoteFile, &Pos->Time);\r
+ DoSIZE(TrnSkt, Pos->RemoteFile, &Pos->Size, &Canceled[Pos->ThreadCount]);\r
+ DoMDTM(TrnSkt, Pos->RemoteFile, &Pos->Time, &Canceled[Pos->ThreadCount]);\r
strcpy(Pos->Cmd, "RETR ");\r
}\r
\r
// ReleaseMutex(hListAccMutex);\r
/* フルパスを使わないための処理 */\r
// if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)\r
- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)\r
+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)\r
{\r
Up = YES;\r
// if(DoUpLoad(AskTrnCtrlSkt(), TransPacketBase) == 429)\r
// strcpy(Tmp, TransPacketBase->RemoteFile);\r
strcpy(Tmp, Pos->RemoteFile);\r
// if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, 1) == FFFTP_FAIL)\r
- if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, (int)TrnSkt + 1) == FFFTP_FAIL)\r
+ if(ProcForNonFullpath(TrnSkt, Tmp, CurDir[Pos->ThreadCount], hWndTrans, &Canceled[Pos->ThreadCount]) == FFFTP_FAIL)\r
{\r
ClearAll = YES;\r
CwdSts = FTP_ERROR;\r
{\r
Up = YES;\r
// CommandProcTrn(NULL, "MKD %s", Tmp);\r
- CommandProcTrn(TrnSkt, NULL, "MKD %s", Tmp);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "MKD %s", Tmp);\r
/* すでにフォルダがある場合もあるので、 */\r
/* ここではエラーチェックはしない */\r
\r
if(FolderAttr)\r
// CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);\r
- CommandProcTrn(TrnSkt, NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);\r
}\r
}\r
// else if(strlen(TransPacketBase->LocalFile) > 0)\r
\r
/* フルパスを使わないための処理 */\r
// if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)\r
- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)\r
+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)\r
{\r
Up = YES;\r
// CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);\r
- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
\r
if(FolderAttr)\r
// CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, TransPacketBase->RemoteFile);\r
- CommandProcTrn(TrnSkt, NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Pos->RemoteFile);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Pos->RemoteFile);\r
}\r
ReleaseMutex(hListAccMutex);\r
}\r
{\r
/* フルパスを使わないための処理 */\r
// if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)\r
- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)\r
+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)\r
{\r
Up = YES;\r
// CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);\r
- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
}\r
}\r
ReleaseMutex(hListAccMutex);\r
{\r
/* フルパスを使わないための処理 */\r
// if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)\r
- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)\r
+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)\r
{\r
Up = YES;\r
// CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);\r
- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);\r
}\r
}\r
ReleaseMutex(hListAccMutex);\r
if(AskShareProh() == YES)\r
{\r
// if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)\r
- if(strcmp(CurDir, Pos->RemoteFile) != 0)\r
+ if(strcmp(CurDir[Pos->ThreadCount], Pos->RemoteFile) != 0)\r
{\r
// if(CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile)/100 != FTP_COMPLETE)\r
- if(CommandProcTrn(TrnSkt, NULL, "CWD %s", Pos->RemoteFile)/100 != FTP_COMPLETE)\r
+ if(CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "CWD %s", Pos->RemoteFile)/100 != FTP_COMPLETE)\r
{\r
DispCWDerror(hWndTrans);\r
ClearAll = YES;\r
}\r
}\r
// strcpy(CurDir, TransPacketBase->RemoteFile);\r
- strcpy(CurDir, Pos->RemoteFile);\r
+ strcpy(CurDir[Pos->ThreadCount], Pos->RemoteFile);\r
ReleaseMutex(hListAccMutex);\r
}\r
/* カレントディレクトリを戻す */\r
// if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)\r
// CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile);\r
// strcpy(CurDir, TransPacketBase->RemoteFile);\r
- if(strcmp(CurDir, Pos->RemoteFile) != 0)\r
- CommandProcTrn(TrnSkt, NULL, "CWD %s", Pos->RemoteFile);\r
- strcpy(CurDir, Pos->RemoteFile);\r
+ if(strcmp(CurDir[Pos->ThreadCount], Pos->RemoteFile) != 0)\r
+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "CWD %s", Pos->RemoteFile);\r
+ strcpy(CurDir[Pos->ThreadCount], Pos->RemoteFile);\r
}\r
ReleaseMutex(hListAccMutex);\r
}\r
int Sts;\r
\r
// Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, 1);\r
- Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, (int)Pkt->ctrl_skt + 1);\r
+ Sts = ProcForNonFullpath(Pkt->ctrl_skt, Pkt->RemoteFile, Cur, Pkt->hWndTrans, &Canceled[Pkt->ThreadCount]);\r
if(Sts == FFFTP_FAIL)\r
ClearAll = YES;\r
\r
iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);\r
if(iRetCode/100 == FTP_PRELIM)\r
{\r
- if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)\r
+ // 同時接続対応\r
+// if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)\r
+ if(SocksGet2ndBindReply(listen_socket, &data_socket, CancelCheckWork) == FFFTP_FAIL)\r
{\r
iLength = sizeof(saSockAddr1);\r
data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength);\r
// iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
else\r
iRetCode = 500;\r
// iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))\r
iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
else\r
iRetCode = 500;\r
iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled[Pkt->ThreadCount], "%s", Buf);\r
if((iRetCode/100) == FTP_PRELIM)\r
{\r
- if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)\r
+ // 同時接続対応\r
+// if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)\r
+ if(SocksGet2ndBindReply(listen_socket, &data_socket, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)\r
{\r
iLength=sizeof(saSockAddr1);\r
data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);\r
// iRetCode = UpLoadFile(Pkt, data_socket);\r
if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
else\r
iRetCode = 500;\r
// iRetCode = UpLoadFile(Pkt, data_socket);\r
if(IsSSLAttached(Pkt->ctrl_skt))\r
{\r
- if(AttachSSL(data_socket, Pkt->ctrl_skt))\r
+ if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))\r
iRetCode = UpLoadFile(Pkt, data_socket);\r
else\r
iRetCode = 500;\r
}\r
\r
// if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FFFTP_FAIL)\r
- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)\r
+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)\r
{\r
Pkt->Abort = ABORT_ERROR;\r
break;\r
{\r
// 同時接続対応\r
// if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FFFTP_FAIL)\r
- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FFFTP_FAIL)\r
+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)\r
Pkt->Abort = ABORT_ERROR;\r
}\r
\r
}\r
\r
// if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FFFTP_FAIL)\r
- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)\r
+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)\r
Pkt->Abort = ABORT_ERROR;\r
cInfo2.Buf = Buf3;\r
cInfo2.BufSize = (BUFSIZE + 3) * 4;\r
FlushRestData(&cInfo2);\r
- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)\r
+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)\r
Pkt->Abort = ABORT_ERROR;\r
}\r
\r
\r
// 同時接続対応\r
//static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)\r
-static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)\r
+static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii, int *CancelCheckWork)\r
{\r
char Buf3[BUFSIZE*2];\r
int Continue;\r
Continue = ConvTermCodeToCRLF(tInfo);\r
// 同時接続対応\r
// if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled)) == FFFTP_FAIL)\r
- if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled[ThreadCount])) == FFFTP_FAIL)\r
+ if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, CancelCheckWork)) == FFFTP_FAIL)\r
break;\r
}\r
while(Continue == YES);\r
else\r
// 同時接続対応\r
// Ret = SendData(Skt, Data, Size, 0, &Canceled);\r
- Ret = SendData(Skt, Data, Size, 0, &Canceled[ThreadCount]);\r
+ Ret = SendData(Skt, Data, Size, 0, CancelCheckWork);\r
\r
return(Ret);\r
}\r
break;\r
\r
case MENU_FILTER :\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SetFilter(&CancelFlg);\r
break;\r
\r
case MENU_SORT :\r
if(SortSetting() == YES)\r
{\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
LocalFileSort = AskSortType(ITEM_LFILE);\r
LocalDirSort = AskSortType(ITEM_LDIR);\r
RemoteFileSort = AskSortType(ITEM_RFILE);\r
break;\r
\r
case MENU_REFRESH :\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SuppressRefresh = 1;\r
GetLocalDirForWnd();\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
break;\r
\r
case REFRESH_REMOTE :\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SuppressRefresh = 1;\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);\r
break;\r
\r
case MENU_DOTFILE :\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
DotFile ^= 1;\r
DispDotFileMode();\r
GetLocalDirForWnd();\r
case LVN_COLUMNCLICK :\r
if(((NMHDR *)lParam)->hwndFrom == GetLocalHwnd())\r
{\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SetSortTypeByColumn(WIN_LOCAL, ((NM_LISTVIEW *)lParam)->iSubItem);\r
ReSortDispList(WIN_LOCAL, &CancelFlg);\r
}\r
{\r
if(((NM_LISTVIEW *)lParam)->iSubItem != 4)\r
{\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SetSortTypeByColumn(WIN_REMOTE, ((NM_LISTVIEW *)lParam)->iSubItem);\r
ReSortDispList(WIN_REMOTE, &CancelFlg);\r
}\r
// if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)\r
// {\r
// ReConnectCmdSkt();\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
// }\r
}\r
}\r
\r
// 暗号化通信対応\r
-BOOL __stdcall SSLTimeoutCallback()\r
+BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted)\r
{\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
return TRUE;\r
- if(CancelFlg == YES)\r
+ if(*pbAborted == YES)\r
return TRUE;\r
return FALSE;\r
}\r
\r
-BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
+BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
{\r
BOOL bResult;\r
int i;\r
}\r
}\r
if(!bResult)\r
- CancelFlg = YES;\r
+ *pbAborted = YES;\r
return bResult;\r
}\r
\r
extern int TimeOut;\r
extern int SendQuit;\r
\r
+// 同時接続対応\r
+extern int CancelFlg;\r
+\r
/*===== ローカルなワーク =====*/\r
\r
static int PwdCommandType;\r
\r
-static int CheckCancelFlg = NO;\r
+// 同時接続対応\r
+//static int CheckCancelFlg = NO;\r
\r
\r
\r
\r
Sts = CommandProcCmd(NULL, "RNFR %s", Src);\r
if(Sts == 350)\r
- Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);\r
+ // 同時接続対応\r
+// Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);\r
+ Sts = command(AskCmdCtrlSkt(), NULL, &CancelFlg, "RNTO %s", Dst);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
// 同時接続対応\r
//int DoSIZE(char *Path, LONGLONG *Size)\r
-int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size)\r
+int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork)\r
{\r
int Sts;\r
char Tmp[1024];\r
\r
+ // 同時接続対応\r
// Sts = CommandProcTrn(Tmp, "SIZE %s", Path);\r
- Sts = CommandProcTrn(cSkt, Tmp, "SIZE %s", Path);\r
+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "SIZE %s", Path);\r
\r
*Size = -1;\r
if((Sts/100 == FTP_COMPLETE) && (strlen(Tmp) > 4) && IsDigit(Tmp[4]))\r
\r
// 同時接続対応\r
//int DoMDTM(char *Path, FILETIME *Time)\r
-int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time)\r
+int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork)\r
{\r
int Sts;\r
char Tmp[1024];\r
Time->dwLowDateTime = 0;\r
Time->dwHighDateTime = 0;\r
\r
+ // 同時接続対応\r
// Sts = CommandProcTrn(Tmp, "MDTM %s", Path);\r
- Sts = CommandProcTrn(cSkt, Tmp, "MDTM %s", Path);\r
+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MDTM %s", Path);\r
if(Sts/100 == FTP_COMPLETE)\r
{\r
sTime.wMilliseconds = 0;\r
\r
Ret = FTP_COMPLETE;\r
if(SendQuit == YES)\r
- Ret = command(ctrl_skt, NULL, &CheckCancelFlg, "QUIT") / 100;\r
+ // 同時接続対応\r
+// Ret = command(ctrl_skt, NULL, &CheckCancelFlg, "QUIT") / 100;\r
+ Ret = command(ctrl_skt, NULL, &CancelFlg, "QUIT") / 100;\r
\r
return(Ret);\r
}\r
// {\r
// if(ReConnectCmdSkt() == FFFTP_SUCCESS)\r
// {\r
- Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);\r
+ // 同時接続対応\r
+// Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);\r
+ Sts = command(AskCmdCtrlSkt(), Reply, &CancelFlg, "%s", Cmd);\r
// }\r
// }\r
return(Sts);\r
\r
// 同時接続対応\r
//int CommandProcTrn(char *Reply, char *fmt, ...)\r
-int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...)\r
+int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...)\r
{\r
va_list Args;\r
char Cmd[1024];\r
// {\r
// if(ReConnectTrnSkt() == FFFTP_SUCCESS)\r
// Sts = command(AskTrnCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);\r
- Sts = command(cSkt, Reply, &CheckCancelFlg, "%s", Cmd);\r
+ Sts = command(cSkt, Reply, CancelCheckWork, "%s", Cmd);\r
// }\r
return(Sts);\r
}\r
\r
if((SizeOnce == -2) || (AskTransferNow() == YES))\r
// 転送中に全て中止を行うと不正なデータが得られる場合のバグ修正\r
- // エラーの種類によっては無限ループとスタックオーバーフローの可能性あり\r
// DisconnectSet();\r
- {\r
- if(SizeOnce == -1)\r
- ReConnectTrnSkt(&cSkt);\r
- else\r
- DisconnectSet();\r
- }\r
+ cSkt = DoClose(cSkt);\r
}\r
else\r
{\r
DoPrintf("# Start gethostbyname");\r
#endif\r
Ret = NULL;\r
- *CancelCheckWork = NO;\r
+ // 同時接続対応\r
+// *CancelCheckWork = NO;\r
\r
// UTF-8対応\r
// hAsync = WSAAsyncGetHostByName(hWndSocket, WM_ASYNC_DBASE, Name, Buf, Len);\r
#if DBG_MSG\r
DoPrintf("# Start connect (S=%x)", s);\r
#endif\r
- *CancelCheckWork = NO;\r
+ // 同時接続対応\r
+// *CancelCheckWork = NO;\r
\r
#if DBG_MSG\r
DoPrintf("## Async set: FD_CONNECT|FD_CLOSE|FD_ACCEPT|FD_READ|FD_WRITE");\r
DoPrintf("# Start recv (S=%x)", s);\r
#endif\r
*TimeOutErr = NO;\r
- *CancelCheckWork = NO;\r
+ // 同時接続対応\r
+// *CancelCheckWork = NO;\r
Ret = SOCKET_ERROR;\r
Error = 0;\r
\r
Ret = recvS(s, buf, len, flags);\r
if(Ret != SOCKET_ERROR)\r
break;\r
- // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応\r
- if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES && recvS(s, buf, len, MSG_PEEK) <= 0)\r
- break;\r
Error = WSAGetLastError();\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
DoPrintf("# Start send (S=%x)", s);\r
#endif\r
*TimeOutErr = NO;\r
- *CancelCheckWork = NO;\r
+ // 同時接続対応\r
+// *CancelCheckWork = NO;\r
Ret = SOCKET_ERROR;\r
Error = 0;\r
\r
#endif\r
break;\r
}\r
- // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応\r
- if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
- break;\r
Error = WSAGetLastError();\r
Sleep(1);\r
if(BackgrndMessageProc() == YES)\r
SSL_CTX* g_pOpenSSLCTX;\r
SSL* g_pOpenSSLHandle[MAX_SSL_SOCKET];\r
\r
-BOOL __stdcall DefaultSSLTimeoutCallback()\r
+BOOL __stdcall DefaultSSLTimeoutCallback(BOOL* pbAborted)\r
{\r
Sleep(100);\r
- return FALSE;\r
+ return *pbAborted;\r
}\r
\r
-BOOL __stdcall DefaultSSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
+BOOL __stdcall DefaultSSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
{\r
return bVerified;\r
}\r
return NULL;\r
}\r
\r
-BOOL ConfirmSSLCertificate(SSL* pSSL)\r
+BOOL ConfirmSSLCertificate(SSL* pSSL, BOOL* pbAborted)\r
{\r
BOOL bResult;\r
BOOL bVerified;\r
if(pCN = strchr(pCN, ','))\r
pCN++;\r
}\r
- bResult = g_pOpenSSLConfirmCallback(bVerified, pData, pCN);\r
+ bResult = g_pOpenSSLConfirmCallback(pbAborted, bVerified, pData, pCN);\r
if(pData)\r
free(pData);\r
if(pSubject)\r
return bResult;\r
}\r
\r
-BOOL AttachSSL(SOCKET s, SOCKET parent)\r
+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted)\r
{\r
BOOL r;\r
DWORD Time;\r
if(Error == SSL_ERROR_WANT_READ || Error == SSL_ERROR_WANT_WRITE)\r
{\r
LeaveCriticalSection(&g_OpenSSLLock);\r
- if(g_pOpenSSLTimeoutCallback() || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))\r
+ if(g_pOpenSSLTimeoutCallback(pbAborted) || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))\r
r = FALSE;\r
EnterCriticalSection(&g_OpenSSLLock);\r
}\r
}\r
if(r)\r
{\r
- if(ConfirmSSLCertificate(*ppSSL))\r
+ if(ConfirmSSLCertificate(*ppSSL, pbAborted))\r
{\r
}\r
else\r
SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen)\r
{\r
SOCKET r;\r
+ BOOL bAborted;\r
r = accept(s, addr, addrlen);\r
- if(!AttachSSL(r, INVALID_SOCKET))\r
+ bAborted = FALSE;\r
+ if(!AttachSSL(r, INVALID_SOCKET, &bAborted))\r
{\r
closesocket(r);\r
return INVALID_SOCKET;\r
int connectS(SOCKET s, const struct sockaddr *name, int namelen)\r
{\r
int r;\r
+ BOOL bAborted;\r
r = connect(s, name, namelen);\r
- if(!AttachSSL(r, INVALID_SOCKET))\r
+ bAborted = FALSE;\r
+ if(!AttachSSL(r, INVALID_SOCKET, &bAborted))\r
return SOCKET_ERROR;\r
return r;\r
}\r
\r
#define USE_OPENSSL\r
\r
-typedef BOOL (__stdcall* LPSSLTIMEOUTCALLBACK)();\r
-typedef BOOL (__stdcall* LPSSLCONFIRMCALLBACK)(BOOL, LPCSTR, LPCSTR);\r
+typedef BOOL (__stdcall* LPSSLTIMEOUTCALLBACK)(BOOL*);\r
+typedef BOOL (__stdcall* LPSSLCONFIRMCALLBACK)(BOOL*, BOOL, LPCSTR, LPCSTR);\r
\r
BOOL LoadOpenSSL();\r
void FreeOpenSSL();\r
void SetSSLTimeoutCallback(DWORD Timeout, LPSSLTIMEOUTCALLBACK pCallback);\r
void SetSSLConfirmCallback(LPSSLCONFIRMCALLBACK pCallback);\r
BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName);\r
-BOOL AttachSSL(SOCKET s, SOCKET parent);\r
+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted);\r
BOOL DetachSSL(SOCKET s);\r
BOOL IsSSLAttached(SOCKET s);\r
SOCKET socketS(int af, int type, int protocol);\r
}\r
else\r
{\r
+ // 同時接続対応\r
+ CancelFlg = NO;\r
SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);\r
if(CheckClosedAndReconnect() == FFFTP_SUCCESS)\r
{\r