• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

FFFTPのソースコードです。


Commit MetaInfo

Revisionf93da12f0a0b0271fdaf25d02772972a79d86bf2 (tree)
Zeit2011-11-01 00:35:39
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Enhanced routine for simultaneous connection and canceling or aborting.

Ändern Zusammenfassung

Diff

Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
--- a/common.h
+++ b/common.h
@@ -1233,8 +1233,8 @@ int BackgrndMessageProc(void);
12331233 void ResetAutoExitFlg(void);
12341234 int AskAutoExit(void);
12351235 // 暗号化通信対応
1236-BOOL __stdcall SSLTimeoutCallback();
1237-BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName);
1236+BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted);
1237+BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName);
12381238
12391239 /*===== filelist.c =====*/
12401240
@@ -1395,7 +1395,7 @@ void SaveCurrentSetToHost(void);
13951395 int ReConnectCmdSkt(void);
13961396 // int ReConnectTrnSkt(void);
13971397 // 同時接続対応
1398-int ReConnectTrnSkt(SOCKET *Skt);
1398+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork);
13991399 SOCKET AskCmdCtrlSkt(void);
14001400 SOCKET AskTrnCtrlSkt(void);
14011401 void SktShareProh(void);
@@ -1406,7 +1406,9 @@ int AskConnecting(void);
14061406 SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);
14071407 SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);
14081408 int AskTryingConnect(void);
1409-int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);
1409+// 同時接続対応
1410+//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);
1411+int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork);
14101412 // 暗号化通信対応
14111413 int AskCryptMode(void);
14121414 int AskUseNoEncryption(void);
@@ -1462,7 +1464,9 @@ void SomeCmdProc(void);
14621464 void CalcFileSizeProc(void);
14631465 void DispCWDerror(HWND hWnd);
14641466 void CopyURLtoClipBoard(void);
1465-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);
1467+// 同時接続対応
1468+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);
1469+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork);
14661470 void ReformToVMSstyleDirName(char *Path);
14671471 void ReformToVMSstylePathName(char *Path);
14681472 #if defined(HAVE_OPENVMS)
@@ -1493,9 +1497,10 @@ int DoRENAME(char *Src, char *Dst);
14931497 int DoCHMOD(char *Path, char *Mode);
14941498 // 同時接続対応
14951499 //int DoSIZE(char *Path, LONGLONG *Size);
1500+int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork);
1501+// 同時接続対応
14961502 //int DoMDTM(char *Path, FILETIME *Time);
1497-int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size);
1498-int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time);
1503+int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork);
14991504 int DoQUOTE(char *CmdStr);
15001505 SOCKET DoClose(SOCKET Sock);
15011506 int DoQUIT(SOCKET ctrl_skt);
@@ -1503,7 +1508,7 @@ int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork);
15031508 int CommandProcCmd(char *Reply, char *fmt, ...);
15041509 // 同時接続対応
15051510 //int CommandProcTrn(char *Reply, char *fmt, ...);
1506-int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...);
1511+int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...);
15071512 int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...);
15081513 int SendData(SOCKET Skt, char *Data, int Size, int Mode, int *CancelCheckWork);
15091514 int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp);
--- a/connect.c
+++ b/connect.c
@@ -58,15 +58,20 @@ static void AskUseFireWall(char *Host, int *Fire, int *Pasv, int *List);
5858 static void SaveCurrentSetToHistory(void);
5959 static int ReConnectSkt(SOCKET *Skt);
6060 // 暗号化通信対応
61+// 同時接続対応
6162 //static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);
62-static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);
63-static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security);
63+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);
64+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork);
6465 static int CheckOneTimePassword(char *Pass, char *Reply, int Type);
6566 static BOOL CALLBACK BlkHookFnc(void);
6667 static int Socks5MakeCmdPacket(SOCKS5REQUEST *Packet, char Cmd, int ValidIP, ulong IP, char *Host, ushort Port);
6768 static int SocksSendCmd(SOCKET Socket, void *Data, int Size, int *CancelCheckWork);
68-static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet);
69-static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet);
69+// 同時接続対応
70+//static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet);
71+static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet, int *CancelCheckWork);
72+// 同時接続対応
73+//static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet);
74+static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet, int *CancelCheckWork);
7075 static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork);
7176
7277 /*===== 外部参照 =====*/
@@ -163,8 +168,9 @@ void ConnectProc(int Type, int Num)
163168
164169 DisableUserOpe();
165170 // 暗号化通信対応
171+ // 同時接続対応
166172 // CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);
167- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security);
173+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security, &CancelFlg);
168174 TrnCtrlSocket = CmdCtrlSocket;
169175
170176 if(CmdCtrlSocket != INVALID_SOCKET)
@@ -244,8 +250,9 @@ void QuickConnectProc(void)
244250
245251 DisableUserOpe();
246252 // 暗号化通信対応
253+ // 同時接続対応
247254 // CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
248- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
255+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);
249256 TrnCtrlSocket = CmdCtrlSocket;
250257
251258 if(CmdCtrlSocket != INVALID_SOCKET)
@@ -418,8 +425,9 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
418425
419426 DisableUserOpe();
420427 // 暗号化通信対応
428+ // 同時接続対応
421429 // CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
422- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
430+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);
423431 TrnCtrlSocket = CmdCtrlSocket;
424432
425433 if(CmdCtrlSocket != INVALID_SOCKET)
@@ -496,8 +504,9 @@ void HistoryConnectProc(int MenuCmd)
496504
497505 DisableUserOpe();
498506 // 暗号化通信対応
507+ // 同時接続対応
499508 // CmdCtrlSocket = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
500- CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security);
509+ CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);
501510 TrnCtrlSocket = CmdCtrlSocket;
502511
503512 if(CmdCtrlSocket != INVALID_SOCKET)
@@ -958,7 +967,7 @@ int ReConnectCmdSkt(void)
958967 // return(ReConnectSkt(&TrnCtrlSocket));
959968 //}
960969 // 同時接続対応
961-int ReConnectTrnSkt(SOCKET *Skt)
970+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)
962971 {
963972 // char Path[FMAX_PATH+1];
964973 int Sts;
@@ -984,8 +993,10 @@ int ReConnectTrnSkt(SOCKET *Skt)
984993 HostData.UseFTPIS = NO;
985994 if(HostData.CryptMode != CRYPT_SFTP)
986995 HostData.UseSFTP = NO;
996+ // 暗号化通信対応
997+ // 同時接続対応
987998 // if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)
988- if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)
999+ if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, CancelCheckWork)) != INVALID_SOCKET)
9891000 {
9901001 // AskRemoteCurDir(Path, FMAX_PATH);
9911002 // DoCWD(Path, YES, YES, YES);
@@ -1024,8 +1035,9 @@ static int ReConnectSkt(SOCKET *Skt)
10241035 do_closesocket(*Skt);
10251036 /* 再接続 */
10261037 // 暗号化通信対応
1038+ // 同時接続対応
10271039 // if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)
1028- if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)
1040+ if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg)) != INVALID_SOCKET)
10291041 {
10301042 AskRemoteCurDir(Path, FMAX_PATH);
10311043 DoCWD(Path, YES, YES, YES);
@@ -1235,7 +1247,7 @@ int AskConnecting(void)
12351247 *----------------------------------------------------------------------------*/
12361248
12371249 // 暗号化通信対応
1238-static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)
1250+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)
12391251 {
12401252 int Sts;
12411253 int Flg;
@@ -1282,7 +1294,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
12821294
12831295 if(strlen(Tmp) != 0)
12841296 {
1285- if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)
1297+ // 同時接続対応
1298+// if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)
1299+ if((ContSock = connectsock(Tmp, Port, "", CancelCheckWork)) != INVALID_SOCKET)
12861300 {
12871301 // バッファを無効
12881302 #ifdef DISABLE_CONTROL_NETWORK_BUFFERS
@@ -1295,9 +1309,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
12951309 // ;
12961310 if(CryptMode == CRYPT_FTPIS)
12971311 {
1298- if(AttachSSL(ContSock, INVALID_SOCKET))
1312+ if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))
12991313 {
1300- while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)
1314+ while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)
13011315 ;
13021316 }
13031317 else
@@ -1305,7 +1319,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
13051319 }
13061320 else
13071321 {
1308- while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)
1322+ while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)
13091323 ;
13101324 }
13111325
@@ -1335,15 +1349,21 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
13351349 (Fwall == FWALL_FU_FP_USER) ||
13361350 (Fwall == FWALL_FU_FP))
13371351 {
1338- if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)
1352+ // 同時接続対応
1353+// if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", FwallUser) / 100) == FTP_CONTINUE)
1354+ if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", FwallUser) / 100) == FTP_CONTINUE)
13391355 {
13401356 CheckOneTimePassword(FwallPass, Reply, FwallSecurity);
1341- Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;
1357+ // 同時接続対応
1358+// Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;
1359+ Sts = command(ContSock, NULL, CancelCheckWork, "PASS %s", Reply) / 100;
13421360 }
13431361 }
13441362 else if(Fwall == FWALL_SIDEWINDER)
13451363 {
1346- Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;
1364+ // 同時接続対応
1365+// Sts = command(ContSock, Reply, &CancelFlg, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;
1366+ Sts = command(ContSock, Reply, CancelCheckWork, "USER %s:%s%c%s", FwallUser, FwallPass, FwallDelimiter, Host) / 100;
13471367 }
13481368 if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))
13491369 {
@@ -1362,9 +1382,13 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
13621382 Flg++;
13631383
13641384 if(HostPort == PORT_NOR)
1365- Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;
1385+ // 同時接続対応
1386+// Sts = command(ContSock, NULL, &CancelFlg, "%s %s", SiteTbl[Flg], Host) / 100;
1387+ Sts = command(ContSock, NULL, CancelCheckWork, "%s %s", SiteTbl[Flg], Host) / 100;
13661388 else
1367- Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;
1389+ // 同時接続対応
1390+// Sts = command(ContSock, NULL, &CancelFlg, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;
1391+ Sts = command(ContSock, NULL, CancelCheckWork, "%s %s %d", SiteTbl[Flg], Host, HostPort) / 100;
13681392 }
13691393
13701394 if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE))
@@ -1398,13 +1422,13 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
13981422 // FTPES対応
13991423 if(CryptMode == CRYPT_FTPES)
14001424 {
1401- if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234)
1425+ if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234)
14021426 {
1403- if(AttachSSL(ContSock, INVALID_SOCKET))
1427+ if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))
14041428 {
1405- if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)
1429+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200)
14061430 {
1407- if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)
1431+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PROT P")) == 200)
14081432 {
14091433 }
14101434 else
@@ -1427,7 +1451,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
14271451 if(Sts == FTP_ERROR)
14281452 break;
14291453 Continue = NO;
1430- if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)
1454+ // 同時接続対応
1455+// if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)
1456+ if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", Buf) / 100) == FTP_CONTINUE)
14311457 {
14321458 if((strlen(Pass) != 0) ||
14331459 (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
@@ -1438,7 +1464,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
14381464 if(strcmp(Reply, " ") == 0)
14391465 strcpy(Reply, "");
14401466
1441- Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;
1467+ // 同時接続対応
1468+// Sts = command(ContSock, NULL, &CancelFlg, "PASS %s", Reply) / 100;
1469+ Sts = command(ContSock, NULL, CancelCheckWork, "PASS %s", Reply) / 100;
14421470 if(Sts == FTP_ERROR)
14431471 {
14441472 strcpy(Pass, "");
@@ -1453,7 +1481,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
14531481 if((strlen(Acct) != 0) ||
14541482 (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
14551483 {
1456- Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;
1484+ // 同時接続対応
1485+// Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;
1486+ Sts = command(ContSock, NULL, CancelCheckWork, "ACCT %s", Acct) / 100;
14571487 }
14581488 else
14591489 DoPrintf("No account specified");
@@ -1516,7 +1546,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15161546 // ホストの機能を確認
15171547 if(ContSock != INVALID_SOCKET)
15181548 {
1519- if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211)
1549+ if((Sts = command(ContSock, Reply, CancelCheckWork, "FEAT")) == 211)
15201550 {
15211551 // 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用
15221552 // UTF-8対応
@@ -1532,7 +1562,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15321562 // UTF-8対応
15331563 if(HostData->NameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))
15341564 {
1535- if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200)
1565+ if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)
15361566 {
15371567 }
15381568 }
@@ -1545,33 +1575,35 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15451575 return(ContSock);
15461576 }
15471577
1548-static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)
1578+// 同時接続対応
1579+//static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security)
1580+static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass, char *Acct, int Port, int Fwall, int SavePass, int Security, int *CancelCheckWork)
15491581 {
15501582 SOCKET ContSock;
15511583 ContSock = INVALID_SOCKET;
1552- CancelFlg = NO;
1553- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)
1584+ *CancelCheckWork = NO;
1585+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)
15541586 {
15551587 SetTaskMsg(MSGJPN317);
1556- if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)
1588+ if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)
15571589 HostData->CryptMode = CRYPT_SFTP;
15581590 }
1559- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)
1591+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)
15601592 {
15611593 SetTaskMsg(MSGJPN316);
1562- if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)
1594+ if((ContSock = DoConnectCrypt(CRYPT_FTPIS, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)
15631595 HostData->CryptMode = CRYPT_FTPIS;
15641596 }
1565- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)
1597+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES)
15661598 {
15671599 SetTaskMsg(MSGJPN315);
1568- if((ContSock = DoConnectCrypt(CRYPT_FTPES, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)
1600+ if((ContSock = DoConnectCrypt(CRYPT_FTPES, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)
15691601 HostData->CryptMode = CRYPT_FTPES;
15701602 }
1571- if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES)
1603+ if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES)
15721604 {
15731605 SetTaskMsg(MSGJPN314);
1574- if((ContSock = DoConnectCrypt(CRYPT_NONE, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security)) != INVALID_SOCKET)
1606+ if((ContSock = DoConnectCrypt(CRYPT_NONE, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)
15751607 HostData->CryptMode = CRYPT_NONE;
15761608 }
15771609 return ContSock;
@@ -1822,8 +1854,12 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork)
18221854 if(Fwall == FWALL_SOCKS4)
18231855 {
18241856 Socks4Reply.Result = -1;
1857+ // 同時接続対応
1858+// if((SocksSendCmd(sSocket, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1859+// (Socks4GetCmdReply(sSocket, &Socks4Reply) != FFFTP_SUCCESS) ||
1860+// (Socks4Reply.Result != SOCKS4_RES_OK))
18251861 if((SocksSendCmd(sSocket, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1826- (Socks4GetCmdReply(sSocket, &Socks4Reply) != FFFTP_SUCCESS) ||
1862+ (Socks4GetCmdReply(sSocket, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) ||
18271863 (Socks4Reply.Result != SOCKS4_RES_OK))
18281864 {
18291865 SetTaskMsg(MSGJPN023, Socks4Reply.Result);
@@ -1840,8 +1876,12 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork)
18401876 }
18411877
18421878 Socks5Reply.Result = -1;
1879+ // 同時接続対応
1880+// if((SocksSendCmd(sSocket, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1881+// (Socks5GetCmdReply(sSocket, &Socks5Reply) != FFFTP_SUCCESS) ||
1882+// (Socks5Reply.Result != SOCKS5_RES_OK))
18431883 if((SocksSendCmd(sSocket, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1844- (Socks5GetCmdReply(sSocket, &Socks5Reply) != FFFTP_SUCCESS) ||
1884+ (Socks5GetCmdReply(sSocket, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) ||
18451885 (Socks5Reply.Result != SOCKS5_RES_OK))
18461886 {
18471887 SetTaskMsg(MSGJPN024, Socks5Reply.Result);
@@ -1913,8 +1953,12 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork)
19131953 Len = offsetof(SOCKS4CMD, UserID) + strlen(FwallUser) + 1;
19141954
19151955 Socks4Reply.Result = -1;
1956+ // 同時接続対応
1957+// if((SocksSendCmd(listen_skt, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1958+// (Socks4GetCmdReply(listen_skt, &Socks4Reply) != FFFTP_SUCCESS) ||
1959+// (Socks4Reply.Result != SOCKS4_RES_OK))
19161960 if((SocksSendCmd(listen_skt, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1917- (Socks4GetCmdReply(listen_skt, &Socks4Reply) != FFFTP_SUCCESS) ||
1961+ (Socks4GetCmdReply(listen_skt, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) ||
19181962 (Socks4Reply.Result != SOCKS4_RES_OK))
19191963 {
19201964 SetTaskMsg(MSGJPN028, Socks4Reply.Result);
@@ -1945,8 +1989,12 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork)
19451989 Len = Socks5MakeCmdPacket(&Socks5Cmd, SOCKS5_CMD_BIND, UseIPadrs, CurSockAddr.sin_addr.s_addr, DomainName, CurSockAddr.sin_port);
19461990
19471991 Socks5Reply.Result = -1;
1992+ // 同時接続対応
1993+// if((SocksSendCmd(listen_skt, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1994+// (Socks5GetCmdReply(listen_skt, &Socks5Reply) != FFFTP_SUCCESS) ||
1995+// (Socks5Reply.Result != SOCKS5_RES_OK))
19481996 if((SocksSendCmd(listen_skt, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) ||
1949- (Socks5GetCmdReply(listen_skt, &Socks5Reply) != FFFTP_SUCCESS) ||
1997+ (Socks5GetCmdReply(listen_skt, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) ||
19501998 (Socks5Reply.Result != SOCKS5_RES_OK))
19511999 {
19522000 SetTaskMsg(MSGJPN029, Socks5Reply.Result);
@@ -2014,7 +2062,11 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork)
20142062 if(listen_skt != INVALID_SOCKET)
20152063 {
20162064 #define UC(b) (((int)b)&0xff)
2017- if((command(ctrl_skt,NULL, &CancelFlg, "PORT %d,%d,%d,%d,%d,%d",
2065+ // 同時接続対応
2066+// if((command(ctrl_skt,NULL, &CancelFlg, "PORT %d,%d,%d,%d,%d,%d",
2067+// UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),
2068+// UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE)
2069+ if((command(ctrl_skt,NULL, CancelCheckWork, "PORT %d,%d,%d,%d,%d,%d",
20182070 UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),
20192071 UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE)
20202072 {
@@ -2157,7 +2209,9 @@ static int SocksSendCmd(SOCKET Socket, void *Data, int Size, int *CancelCheckWor
21572209 * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)
21582210 *----------------------------------------------------------------------------*/
21592211
2160-static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
2212+// 同時接続対応
2213+//static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
2214+static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet, int *CancelCheckWork)
21612215 {
21622216 uchar *Pos;
21632217 int Len;
@@ -2166,7 +2220,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
21662220 Pos = (uchar *)Packet;
21672221 Pos += SOCKS5REPLY_SIZE;
21682222
2169- if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, &CancelFlg)) == FFFTP_SUCCESS)
2223+ // 同時接続対応
2224+// if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, &CancelFlg)) == FFFTP_SUCCESS)
2225+ if((Ret = ReadNchar(Socket, (char *)Packet, SOCKS5REPLY_SIZE, CancelCheckWork)) == FFFTP_SUCCESS)
21702226 {
21712227 if(Packet->Type == SOCKS5_ADRS_IPV4)
21722228 Len = 4 + 2;
@@ -2174,7 +2230,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
21742230 Len = 6 + 2;
21752231 else
21762232 {
2177- if((Ret = ReadNchar(Socket, (char *)Pos, 1, &CancelFlg)) == FFFTP_SUCCESS)
2233+ // 同時接続対応
2234+// if((Ret = ReadNchar(Socket, (char *)Pos, 1, &CancelFlg)) == FFFTP_SUCCESS)
2235+ if((Ret = ReadNchar(Socket, (char *)Pos, 1, CancelCheckWork)) == FFFTP_SUCCESS)
21782236 {
21792237 Len = *Pos + 2;
21802238 Pos++;
@@ -2182,7 +2240,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
21822240 }
21832241
21842242 if(Ret == FFFTP_SUCCESS)
2185- Ret = ReadNchar(Socket, (char *)Pos, Len, &CancelFlg);
2243+ // 同時接続対応
2244+// Ret = ReadNchar(Socket, (char *)Pos, Len, &CancelFlg);
2245+ Ret = ReadNchar(Socket, (char *)Pos, Len, CancelCheckWork);
21862246 }
21872247
21882248 if(Ret != FFFTP_SUCCESS)
@@ -2202,11 +2262,15 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet)
22022262 * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)
22032263 *----------------------------------------------------------------------------*/
22042264
2205-static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet)
2265+// 同時接続対応
2266+//static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet)
2267+static int Socks4GetCmdReply(SOCKET Socket, SOCKS4REPLY *Packet, int *CancelCheckWork)
22062268 {
22072269 int Ret;
22082270
2209- Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, &CancelFlg);
2271+ // 同時接続対応
2272+// Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, &CancelFlg);
2273+ Ret = ReadNchar(Socket, (char *)Packet, SOCKS4REPLY_SIZE, CancelCheckWork);
22102274
22112275 if(Ret != FFFTP_SUCCESS)
22122276 DoPrintf(MSGJPN035);
@@ -2242,8 +2306,12 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork)
22422306 else
22432307 Socks5Method.Methods[0] = SOCKS5_AUTH_USER;
22442308
2309+ // 同時接続対応
2310+// if((SocksSendCmd(Socket, &Socks5Method, SOCKS5METHODREQUEST_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||
2311+// (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||
2312+// (Socks5MethodReply.Method == (uchar)0xFF))
22452313 if((SocksSendCmd(Socket, &Socks5Method, SOCKS5METHODREQUEST_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||
2246- (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||
2314+ (ReadNchar(Socket, (char *)&Socks5MethodReply, SOCKS5METHODREPLY_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||
22472315 (Socks5MethodReply.Method == (uchar)0xFF))
22482316 {
22492317 SetTaskMsg(MSGJPN036);
@@ -2260,8 +2328,12 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork)
22602328 Buf[2 + Len] = Len2;
22612329 strcpy(Buf+3+Len, FwallPass);
22622330
2331+ // 同時接続対応
2332+// if((SocksSendCmd(Socket, &Buf, Len+Len2+3, CancelCheckWork) != FFFTP_SUCCESS) ||
2333+// (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||
2334+// (Socks5Status.Status != 0))
22632335 if((SocksSendCmd(Socket, &Buf, Len+Len2+3, CancelCheckWork) != FFFTP_SUCCESS) ||
2264- (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, &CancelFlg) != FFFTP_SUCCESS) ||
2336+ (ReadNchar(Socket, (char *)&Socks5Status, SOCKS5USERPASSSTATUS_SIZE, CancelCheckWork) != FFFTP_SUCCESS) ||
22652337 (Socks5Status.Status != 0))
22662338 {
22672339 SetTaskMsg(MSGJPN037);
@@ -2285,7 +2357,9 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork)
22852357 * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL)
22862358 *----------------------------------------------------------------------------*/
22872359
2288-int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)
2360+// 同時接続対応
2361+//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)
2362+int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork)
22892363 {
22902364 int Ret;
22912365 char Buf[300];
@@ -2293,14 +2367,18 @@ int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)
22932367 Ret = FFFTP_FAIL;
22942368 if((AskHostFireWall() == YES) && (FwallType == FWALL_SOCKS4))
22952369 {
2296- Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf);
2370+ // 同時接続対応
2371+// Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf);
2372+ Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf, CancelCheckWork);
22972373 *Data = Socket;
22982374 Ret = FFFTP_SUCCESS;
22992375 }
23002376 else if((AskHostFireWall() == YES) &&
23012377 ((FwallType == FWALL_SOCKS5_NOAUTH) || (FwallType == FWALL_SOCKS5_USER)))
23022378 {
2303- Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf);
2379+ // 同時接続対応
2380+// Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf);
2381+ Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf, CancelCheckWork);
23042382 *Data = Socket;
23052383 Ret = FFFTP_SUCCESS;
23062384 }
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -122,6 +122,9 @@ void DownLoadProc(int ChName, int ForceFile, int All)
122122 FILELIST *Pos;
123123 TRANSPACKET Pkt;
124124
125+ // 同時接続対応
126+ CancelFlg = NO;
127+
125128 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
126129 {
127130 DisableUserOpe();
@@ -253,6 +256,9 @@ void DirectDownLoadProc(char *Fname)
253256 {
254257 TRANSPACKET Pkt;
255258
259+ // 同時接続対応
260+ CancelFlg = NO;
261+
256262 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
257263 {
258264 DisableUserOpe();
@@ -392,6 +398,9 @@ void MirrorDownloadProc(int Notify)
392398 int Level;
393399 int Mode;
394400
401+ // 同時接続対応
402+ CancelFlg = NO;
403+
395404 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
396405 {
397406 DisableUserOpe();
@@ -863,6 +872,9 @@ void UpLoadListProc(int ChName, int All)
863872 char Tmp[FMAX_PATH+1];
864873 int FirstAdd;
865874
875+ // 同時接続対応
876+ CancelFlg = NO;
877+
866878 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
867879 {
868880 DisableUserOpe();
@@ -1031,6 +1043,9 @@ void UpLoadDragProc(WPARAM wParam)
10311043 int FirstAdd;
10321044 char Cur[FMAX_PATH+1];
10331045
1046+ // 同時接続対応
1047+ CancelFlg = NO;
1048+
10341049 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
10351050 {
10361051 DisableUserOpe();
@@ -1190,6 +1205,9 @@ void MirrorUploadProc(int Notify)
11901205 FILETIME TmpFtimeL;
11911206 FILETIME TmpFtimeR;
11921207
1208+ // 同時接続対応
1209+ CancelFlg = NO;
1210+
11931211 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
11941212 {
11951213 DisableUserOpe();
@@ -1960,6 +1978,9 @@ void DeleteProc(void)
19601978 char CurDir[FMAX_PATH+1];
19611979 char Tmp[FMAX_PATH+1];
19621980
1981+ // 同時接続対応
1982+ CancelFlg = NO;
1983+
19631984 // デッドロック対策
19641985 DisableUserOpe();
19651986 Sts = YES;
@@ -2115,7 +2136,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi
21152136 else
21162137 {
21172138 /* フルパスを使わない時のための処理 */
2118- if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)
2139+ // 同時接続対応
2140+// if(ProcForNonFullpath(Path, CurDir, GetMainHwnd(), 0) == FFFTP_FAIL)
2141+ if(ProcForNonFullpath(AskCmdCtrlSkt(), Path, CurDir, GetMainHwnd(), &CancelFlg) == FFFTP_FAIL)
21192142 *Sw = NO_ALL;
21202143
21212144 if(*Sw != NO_ALL)
@@ -2199,6 +2222,9 @@ void RenameProc(void)
21992222 int RenFlg;
22002223 int Sts;
22012224
2225+ // 同時接続対応
2226+ CancelFlg = NO;
2227+
22022228 Sts = FFFTP_SUCCESS;
22032229 if(GetFocus() == GetLocalHwnd())
22042230 Win = WIN_LOCAL;
@@ -2274,6 +2300,9 @@ void MoveRemoteFileProc(int drop_index)
22742300 int RenFlg;
22752301 int Sts;
22762302
2303+ // 同時接続対応
2304+ CancelFlg = NO;
2305+
22772306 if(MoveMode == MOVE_DISABLE)
22782307 {
22792308 return;
@@ -2443,6 +2472,9 @@ void MkdirProc(void)
24432472 char *Title;
24442473 int Tmp;
24452474
2475+ // 同時接続対応
2476+ CancelFlg = NO;
2477+
24462478 if(GetFocus() == GetLocalHwnd())
24472479 {
24482480 Win = WIN_LOCAL;
@@ -2495,6 +2527,9 @@ void ChangeDirComboProc(HWND hWnd)
24952527 char Tmp[FMAX_PATH+1];
24962528 int i;
24972529
2530+ // 同時接続対応
2531+ CancelFlg = NO;
2532+
24982533 if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR)
24992534 {
25002535 SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp);
@@ -2536,6 +2571,9 @@ void ChangeDirBmarkProc(int MarkID)
25362571 char Remote[FMAX_PATH+1];
25372572 int Sts;
25382573
2574+ // 同時接続対応
2575+ CancelFlg = NO;
2576+
25392577 Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1);
25402578 if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH))
25412579 {
@@ -2575,6 +2613,9 @@ void ChangeDirDirectProc(int Win)
25752613 char *Title;
25762614 int Tmp;
25772615
2616+ // 同時接続対応
2617+ CancelFlg = NO;
2618+
25782619 if(Win == WIN_LOCAL)
25792620 Title = MSGJPN072;
25802621 else
@@ -2651,6 +2692,9 @@ void ChmodProc(void)
26512692 char *BufTmp;
26522693 int BufLen;
26532694
2695+ // 同時接続対応
2696+ CancelFlg = NO;
2697+
26542698 if(GetFocus() == GetRemoteHwnd())
26552699 {
26562700 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
@@ -2874,6 +2918,9 @@ void SomeCmdProc(void)
28742918 int Tmp;
28752919 FILELIST *FileListBase;
28762920
2921+ // 同時接続対応
2922+ CancelFlg = NO;
2923+
28772924 if(GetFocus() == GetRemoteHwnd())
28782925 {
28792926 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
@@ -2918,6 +2965,9 @@ void CalcFileSizeProc(void)
29182965 int All;
29192966 int Sts;
29202967
2968+ // 同時接続対応
2969+ CancelFlg = NO;
2970+
29212971 if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL)
29222972 {
29232973 Sts = FFFTP_SUCCESS;
@@ -3141,7 +3191,9 @@ void CopyURLtoClipBoard(void)
31413191 * Path にファイル名のみ残す。(パス名は消す)
31423192 *----------------------------------------------------------------------------*/
31433193
3144-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)
3194+// 同時接続対応
3195+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)
3196+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork)
31453197 {
31463198 int Sts;
31473199 int Cmd;
@@ -3163,12 +3215,12 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type)
31633215
31643216 if(strcmp(Tmp, CurDir) != 0)
31653217 {
3166- if(Type == 0)
3167- Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);
3168- else
3169- // 同時接続対応
3218+ // 同時接続対応
3219+// if(Type == 0)
3220+// Cmd = CommandProcCmd(NULL, "CWD %s", Tmp);
3221+// else
31703222 // Cmd = CommandProcTrn(NULL, "CWD %s", Tmp);
3171- Cmd = CommandProcTrn((SOCKET)(Type - 1), NULL, "CWD %s", Tmp);
3223+ Cmd = CommandProcTrn(cSkt, NULL, CancelCheckWork, "CWD %s", Tmp);
31723224
31733225 if(Cmd/100 != FTP_COMPLETE)
31743226 {
--- a/getput.c
+++ b/getput.c
@@ -96,7 +96,7 @@ static int UpLoadPassive(TRANSPACKET *Pkt);
9696 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt);
9797 // 同時接続対応
9898 //static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);
99-static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);
99+static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii, int *CancelCheckWork);
100100 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode);
101101 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode);
102102 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);
@@ -142,7 +142,9 @@ static time_t TimeStart[MAX_DATA_CONNECTION]; /* 転送開始時間 */
142142 static int KeepDlg = NO; /* 転送中ダイアログを消さないかどうか (YES/NO) */
143143 static int MoveToForeground = NO; /* ウインドウを前面に移動するかどうか (YES/NO) */
144144
145-static char CurDir[FMAX_PATH+1] = { "" };
145+// 同時接続対応
146+//static char CurDir[FMAX_PATH+1] = { "" };
147+static char CurDir[MAX_DATA_CONNECTION][FMAX_PATH+1];
146148 // 同時接続対応
147149 //static char ErrMsg[ERR_MSG_LEN+7];
148150 static char ErrMsg[MAX_DATA_CONNECTION+1][ERR_MSG_LEN+7];
@@ -627,7 +629,11 @@ void GoForwardTransWindow(void)
627629
628630 void InitTransCurDir(void)
629631 {
630- strcpy(CurDir, "");
632+ // 同時接続対応
633+// strcpy(CurDir, "");
634+ int i;
635+ for(i = 0; i < MAX_DATA_CONNECTION; i++)
636+ strcpy(CurDir[i], "");
631637 return;
632638 }
633639
@@ -710,7 +716,19 @@ static ULONG WINAPI TransferThread(void *Dummy)
710716 if(TrnSkt == INVALID_SOCKET || NewCmdSkt != CmdSkt)
711717 {
712718 ReleaseMutex(hListAccMutex);
713- ReConnectTrnSkt(&TrnSkt);
719+ ReConnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]);
720+ // 同時ログイン数制限に引っかかった可能性あり
721+ // 負荷を下げるためにしばらく待機
722+ if(TrnSkt == INVALID_SOCKET)
723+ {
724+ i = 10000;
725+ while(NewCmdSkt != CmdSkt && i > 0)
726+ {
727+ BackgrndMessageProc();
728+ Sleep(1);
729+ i--;
730+ }
731+ }
714732 // WaitForSingleObject(hListAccMutex, INFINITE);
715733 while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
716734 {
@@ -793,7 +811,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
793811 {
794812 /* フルパスを使わないための処理 */
795813 // if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)
796- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)
814+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)
797815 {
798816 // if(strncmp(TransPacketBase->Cmd, "RETR-S", 6) == 0)
799817 if(strncmp(Pos->Cmd, "RETR-S", 6) == 0)
@@ -802,8 +820,8 @@ static ULONG WINAPI TransferThread(void *Dummy)
802820 // DoSIZE(TransPacketBase->RemoteFile, &TransPacketBase->Size);
803821 // DoMDTM(TransPacketBase->RemoteFile, &TransPacketBase->Time);
804822 // strcpy(TransPacketBase->Cmd, "RETR ");
805- DoSIZE(TrnSkt, Pos->RemoteFile, &Pos->Size);
806- DoMDTM(TrnSkt, Pos->RemoteFile, &Pos->Time);
823+ DoSIZE(TrnSkt, Pos->RemoteFile, &Pos->Size, &Canceled[Pos->ThreadCount]);
824+ DoMDTM(TrnSkt, Pos->RemoteFile, &Pos->Time, &Canceled[Pos->ThreadCount]);
807825 strcpy(Pos->Cmd, "RETR ");
808826 }
809827
@@ -827,7 +845,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
827845 // ReleaseMutex(hListAccMutex);
828846 /* フルパスを使わないための処理 */
829847 // if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)
830- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)
848+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)
831849 {
832850 Up = YES;
833851 // if(DoUpLoad(AskTrnCtrlSkt(), TransPacketBase) == 429)
@@ -856,7 +874,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
856874 // strcpy(Tmp, TransPacketBase->RemoteFile);
857875 strcpy(Tmp, Pos->RemoteFile);
858876 // if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, 1) == FFFTP_FAIL)
859- if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, (int)TrnSkt + 1) == FFFTP_FAIL)
877+ if(ProcForNonFullpath(TrnSkt, Tmp, CurDir[Pos->ThreadCount], hWndTrans, &Canceled[Pos->ThreadCount]) == FFFTP_FAIL)
860878 {
861879 ClearAll = YES;
862880 CwdSts = FTP_ERROR;
@@ -866,13 +884,13 @@ static ULONG WINAPI TransferThread(void *Dummy)
866884 {
867885 Up = YES;
868886 // CommandProcTrn(NULL, "MKD %s", Tmp);
869- CommandProcTrn(TrnSkt, NULL, "MKD %s", Tmp);
887+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "MKD %s", Tmp);
870888 /* すでにフォルダがある場合もあるので、 */
871889 /* ここではエラーチェックはしない */
872890
873891 if(FolderAttr)
874892 // CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);
875- CommandProcTrn(TrnSkt, NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);
893+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);
876894 }
877895 }
878896 // else if(strlen(TransPacketBase->LocalFile) > 0)
@@ -893,15 +911,15 @@ static ULONG WINAPI TransferThread(void *Dummy)
893911
894912 /* フルパスを使わないための処理 */
895913 // if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)
896- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)
914+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)
897915 {
898916 Up = YES;
899917 // CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
900- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);
918+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);
901919
902920 if(FolderAttr)
903921 // CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, TransPacketBase->RemoteFile);
904- CommandProcTrn(TrnSkt, NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Pos->RemoteFile);
922+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Pos->RemoteFile);
905923 }
906924 ReleaseMutex(hListAccMutex);
907925 }
@@ -918,11 +936,11 @@ static ULONG WINAPI TransferThread(void *Dummy)
918936 {
919937 /* フルパスを使わないための処理 */
920938 // if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)
921- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)
939+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)
922940 {
923941 Up = YES;
924942 // CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
925- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);
943+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);
926944 }
927945 }
928946 ReleaseMutex(hListAccMutex);
@@ -940,11 +958,11 @@ static ULONG WINAPI TransferThread(void *Dummy)
940958 {
941959 /* フルパスを使わないための処理 */
942960 // if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == FFFTP_SUCCESS)
943- if(MakeNonFullPath(Pos, CurDir, Tmp) == FFFTP_SUCCESS)
961+ if(MakeNonFullPath(Pos, CurDir[Pos->ThreadCount], Tmp) == FFFTP_SUCCESS)
944962 {
945963 Up = YES;
946964 // CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
947- CommandProcTrn(TrnSkt, NULL, "%s%s", Pos->Cmd+2, Pos->RemoteFile);
965+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "%s%s", Pos->Cmd+2, Pos->RemoteFile);
948966 }
949967 }
950968 ReleaseMutex(hListAccMutex);
@@ -1002,10 +1020,10 @@ static ULONG WINAPI TransferThread(void *Dummy)
10021020 if(AskShareProh() == YES)
10031021 {
10041022 // if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
1005- if(strcmp(CurDir, Pos->RemoteFile) != 0)
1023+ if(strcmp(CurDir[Pos->ThreadCount], Pos->RemoteFile) != 0)
10061024 {
10071025 // if(CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile)/100 != FTP_COMPLETE)
1008- if(CommandProcTrn(TrnSkt, NULL, "CWD %s", Pos->RemoteFile)/100 != FTP_COMPLETE)
1026+ if(CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "CWD %s", Pos->RemoteFile)/100 != FTP_COMPLETE)
10091027 {
10101028 DispCWDerror(hWndTrans);
10111029 ClearAll = YES;
@@ -1013,7 +1031,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
10131031 }
10141032 }
10151033 // strcpy(CurDir, TransPacketBase->RemoteFile);
1016- strcpy(CurDir, Pos->RemoteFile);
1034+ strcpy(CurDir[Pos->ThreadCount], Pos->RemoteFile);
10171035 ReleaseMutex(hListAccMutex);
10181036 }
10191037 /* カレントディレクトリを戻す */
@@ -1025,9 +1043,9 @@ static ULONG WINAPI TransferThread(void *Dummy)
10251043 // if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
10261044 // CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile);
10271045 // strcpy(CurDir, TransPacketBase->RemoteFile);
1028- if(strcmp(CurDir, Pos->RemoteFile) != 0)
1029- CommandProcTrn(TrnSkt, NULL, "CWD %s", Pos->RemoteFile);
1030- strcpy(CurDir, Pos->RemoteFile);
1046+ if(strcmp(CurDir[Pos->ThreadCount], Pos->RemoteFile) != 0)
1047+ CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "CWD %s", Pos->RemoteFile);
1048+ strcpy(CurDir[Pos->ThreadCount], Pos->RemoteFile);
10311049 }
10321050 ReleaseMutex(hListAccMutex);
10331051 }
@@ -1182,7 +1200,7 @@ static int MakeNonFullPath(TRANSPACKET *Pkt, char *Cur, char *Tmp)
11821200 int Sts;
11831201
11841202 // Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, 1);
1185- Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, (int)Pkt->ctrl_skt + 1);
1203+ Sts = ProcForNonFullpath(Pkt->ctrl_skt, Pkt->RemoteFile, Cur, Pkt->hWndTrans, &Canceled[Pkt->ThreadCount]);
11861204 if(Sts == FFFTP_FAIL)
11871205 ClearAll = YES;
11881206
@@ -1290,7 +1308,9 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
12901308 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);
12911309 if(iRetCode/100 == FTP_PRELIM)
12921310 {
1293- if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)
1311+ // 同時接続対応
1312+// if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)
1313+ if(SocksGet2ndBindReply(listen_socket, &data_socket, CancelCheckWork) == FFFTP_FAIL)
12941314 {
12951315 iLength = sizeof(saSockAddr1);
12961316 data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength);
@@ -1317,7 +1337,7 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
13171337 // iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
13181338 if(IsSSLAttached(Pkt->ctrl_skt))
13191339 {
1320- if(AttachSSL(data_socket, Pkt->ctrl_skt))
1340+ if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))
13211341 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
13221342 else
13231343 iRetCode = 500;
@@ -1393,7 +1413,7 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
13931413 // iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
13941414 if(IsSSLAttached(Pkt->ctrl_skt))
13951415 {
1396- if(AttachSSL(data_socket, Pkt->ctrl_skt))
1416+ if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork))
13971417 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
13981418 else
13991419 iRetCode = 500;
@@ -2332,7 +2352,9 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
23322352 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled[Pkt->ThreadCount], "%s", Buf);
23332353 if((iRetCode/100) == FTP_PRELIM)
23342354 {
2335- if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)
2355+ // 同時接続対応
2356+// if(SocksGet2ndBindReply(listen_socket, &data_socket) == FFFTP_FAIL)
2357+ if(SocksGet2ndBindReply(listen_socket, &data_socket, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)
23362358 {
23372359 iLength=sizeof(saSockAddr1);
23382360 data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);
@@ -2359,7 +2381,7 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
23592381 // iRetCode = UpLoadFile(Pkt, data_socket);
23602382 if(IsSSLAttached(Pkt->ctrl_skt))
23612383 {
2362- if(AttachSSL(data_socket, Pkt->ctrl_skt))
2384+ if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))
23632385 iRetCode = UpLoadFile(Pkt, data_socket);
23642386 else
23652387 iRetCode = 500;
@@ -2441,7 +2463,7 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
24412463 // iRetCode = UpLoadFile(Pkt, data_socket);
24422464 if(IsSSLAttached(Pkt->ctrl_skt))
24432465 {
2444- if(AttachSSL(data_socket, Pkt->ctrl_skt))
2466+ if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount]))
24452467 iRetCode = UpLoadFile(Pkt, data_socket);
24462468 else
24472469 iRetCode = 500;
@@ -2784,7 +2806,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
27842806 }
27852807
27862808 // if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FFFTP_FAIL)
2787- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)
2809+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)
27882810 {
27892811 Pkt->Abort = ABORT_ERROR;
27902812 break;
@@ -2796,7 +2818,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
27962818 {
27972819 // 同時接続対応
27982820 // if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FFFTP_FAIL)
2799- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FFFTP_FAIL)
2821+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)
28002822 Pkt->Abort = ABORT_ERROR;
28012823 }
28022824
@@ -2940,12 +2962,12 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
29402962 }
29412963
29422964 // if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FFFTP_FAIL)
2943- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)
2965+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)
29442966 Pkt->Abort = ABORT_ERROR;
29452967 cInfo2.Buf = Buf3;
29462968 cInfo2.BufSize = (BUFSIZE + 3) * 4;
29472969 FlushRestData(&cInfo2);
2948- if(TermCodeConvAndSend(Pkt->ThreadCount, &tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FFFTP_FAIL)
2970+ if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type, &Canceled[Pkt->ThreadCount]) == FFFTP_FAIL)
29492971 Pkt->Abort = ABORT_ERROR;
29502972 }
29512973
@@ -3017,7 +3039,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
30173039
30183040 // 同時接続対応
30193041 //static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)
3020-static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)
3042+static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii, int *CancelCheckWork)
30213043 {
30223044 char Buf3[BUFSIZE*2];
30233045 int Continue;
@@ -3037,7 +3059,7 @@ static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET
30373059 Continue = ConvTermCodeToCRLF(tInfo);
30383060 // 同時接続対応
30393061 // if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled)) == FFFTP_FAIL)
3040- if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled[ThreadCount])) == FFFTP_FAIL)
3062+ if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, CancelCheckWork)) == FFFTP_FAIL)
30413063 break;
30423064 }
30433065 while(Continue == YES);
@@ -3045,7 +3067,7 @@ static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET
30453067 else
30463068 // 同時接続対応
30473069 // Ret = SendData(Skt, Data, Size, 0, &Canceled);
3048- Ret = SendData(Skt, Data, Size, 0, &Canceled[ThreadCount]);
3070+ Ret = SendData(Skt, Data, Size, 0, CancelCheckWork);
30493071
30503072 return(Ret);
30513073 }
--- a/main.c
+++ b/main.c
@@ -1081,12 +1081,16 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
10811081 break;
10821082
10831083 case MENU_FILTER :
1084+ // 同時接続対応
1085+ CancelFlg = NO;
10841086 SetFilter(&CancelFlg);
10851087 break;
10861088
10871089 case MENU_SORT :
10881090 if(SortSetting() == YES)
10891091 {
1092+ // 同時接続対応
1093+ CancelFlg = NO;
10901094 LocalFileSort = AskSortType(ITEM_LFILE);
10911095 LocalDirSort = AskSortType(ITEM_LDIR);
10921096 RemoteFileSort = AskSortType(ITEM_RFILE);
@@ -1156,6 +1160,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
11561160 break;
11571161
11581162 case MENU_REFRESH :
1163+ // 同時接続対応
1164+ CancelFlg = NO;
11591165 SuppressRefresh = 1;
11601166 GetLocalDirForWnd();
11611167 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
@@ -1180,6 +1186,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
11801186 break;
11811187
11821188 case REFRESH_REMOTE :
1189+ // 同時接続対応
1190+ CancelFlg = NO;
11831191 SuppressRefresh = 1;
11841192 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
11851193 GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg);
@@ -1244,6 +1252,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
12441252 break;
12451253
12461254 case MENU_DOTFILE :
1255+ // 同時接続対応
1256+ CancelFlg = NO;
12471257 DotFile ^= 1;
12481258 DispDotFileMode();
12491259 GetLocalDirForWnd();
@@ -1480,6 +1490,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
14801490 case LVN_COLUMNCLICK :
14811491 if(((NMHDR *)lParam)->hwndFrom == GetLocalHwnd())
14821492 {
1493+ // 同時接続対応
1494+ CancelFlg = NO;
14831495 SetSortTypeByColumn(WIN_LOCAL, ((NM_LISTVIEW *)lParam)->iSubItem);
14841496 ReSortDispList(WIN_LOCAL, &CancelFlg);
14851497 }
@@ -1487,6 +1499,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
14871499 {
14881500 if(((NM_LISTVIEW *)lParam)->iSubItem != 4)
14891501 {
1502+ // 同時接続対応
1503+ CancelFlg = NO;
14901504 SetSortTypeByColumn(WIN_REMOTE, ((NM_LISTVIEW *)lParam)->iSubItem);
14911505 ReSortDispList(WIN_REMOTE, &CancelFlg);
14921506 }
@@ -2079,6 +2093,8 @@ void DoubleClickProc(int Win, int Mode, int App)
20792093 // if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)
20802094 // {
20812095 // ReConnectCmdSkt();
2096+ // 同時接続対応
2097+ CancelFlg = NO;
20822098 Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);
20832099 // }
20842100 }
@@ -2851,17 +2867,17 @@ int EnterMasterPasswordAndSet( int Res, HWND hWnd )
28512867 }
28522868
28532869 // 暗号化通信対応
2854-BOOL __stdcall SSLTimeoutCallback()
2870+BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted)
28552871 {
28562872 Sleep(1);
28572873 if(BackgrndMessageProc() == YES)
28582874 return TRUE;
2859- if(CancelFlg == YES)
2875+ if(*pbAborted == YES)
28602876 return TRUE;
28612877 return FALSE;
28622878 }
28632879
2864-BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)
2880+BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)
28652881 {
28662882 BOOL bResult;
28672883 int i;
@@ -2895,7 +2911,7 @@ BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR Com
28952911 }
28962912 }
28972913 if(!bResult)
2898- CancelFlg = YES;
2914+ *pbAborted = YES;
28992915 return bResult;
29002916 }
29012917
--- a/remote.c
+++ b/remote.c
@@ -62,11 +62,15 @@ extern TRANSPACKET MainTransPkt;
6262 extern int TimeOut;
6363 extern int SendQuit;
6464
65+// 同時接続対応
66+extern int CancelFlg;
67+
6568 /*===== ローカルなワーク =====*/
6669
6770 static int PwdCommandType;
6871
69-static int CheckCancelFlg = NO;
72+// 同時接続対応
73+//static int CheckCancelFlg = NO;
7074
7175
7276
@@ -343,7 +347,9 @@ int DoRENAME(char *Src, char *Dst)
343347
344348 Sts = CommandProcCmd(NULL, "RNFR %s", Src);
345349 if(Sts == 350)
346- Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);
350+ // 同時接続対応
351+// Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);
352+ Sts = command(AskCmdCtrlSkt(), NULL, &CancelFlg, "RNTO %s", Dst);
347353
348354 if(Sts/100 >= FTP_CONTINUE)
349355 SoundPlay(SND_ERROR);
@@ -391,13 +397,14 @@ int DoCHMOD(char *Path, char *Mode)
391397
392398 // 同時接続対応
393399 //int DoSIZE(char *Path, LONGLONG *Size)
394-int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size)
400+int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork)
395401 {
396402 int Sts;
397403 char Tmp[1024];
398404
405+ // 同時接続対応
399406 // Sts = CommandProcTrn(Tmp, "SIZE %s", Path);
400- Sts = CommandProcTrn(cSkt, Tmp, "SIZE %s", Path);
407+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "SIZE %s", Path);
401408
402409 *Size = -1;
403410 if((Sts/100 == FTP_COMPLETE) && (strlen(Tmp) > 4) && IsDigit(Tmp[4]))
@@ -423,7 +430,7 @@ int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size)
423430
424431 // 同時接続対応
425432 //int DoMDTM(char *Path, FILETIME *Time)
426-int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time)
433+int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork)
427434 {
428435 int Sts;
429436 char Tmp[1024];
@@ -432,8 +439,9 @@ int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time)
432439 Time->dwLowDateTime = 0;
433440 Time->dwHighDateTime = 0;
434441
442+ // 同時接続対応
435443 // Sts = CommandProcTrn(Tmp, "MDTM %s", Path);
436- Sts = CommandProcTrn(cSkt, Tmp, "MDTM %s", Path);
444+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MDTM %s", Path);
437445 if(Sts/100 == FTP_COMPLETE)
438446 {
439447 sTime.wMilliseconds = 0;
@@ -516,7 +524,9 @@ int DoQUIT(SOCKET ctrl_skt)
516524
517525 Ret = FTP_COMPLETE;
518526 if(SendQuit == YES)
519- Ret = command(ctrl_skt, NULL, &CheckCancelFlg, "QUIT") / 100;
527+ // 同時接続対応
528+// Ret = command(ctrl_skt, NULL, &CheckCancelFlg, "QUIT") / 100;
529+ Ret = command(ctrl_skt, NULL, &CancelFlg, "QUIT") / 100;
520530
521531 return(Ret);
522532 }
@@ -665,7 +675,9 @@ int CommandProcCmd(char *Reply, char *fmt, ...)
665675 // {
666676 // if(ReConnectCmdSkt() == FFFTP_SUCCESS)
667677 // {
668- Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);
678+ // 同時接続対応
679+// Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);
680+ Sts = command(AskCmdCtrlSkt(), Reply, &CancelFlg, "%s", Cmd);
669681 // }
670682 // }
671683 return(Sts);
@@ -688,7 +700,7 @@ int CommandProcCmd(char *Reply, char *fmt, ...)
688700
689701 // 同時接続対応
690702 //int CommandProcTrn(char *Reply, char *fmt, ...)
691-int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...)
703+int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...)
692704 {
693705 va_list Args;
694706 char Cmd[1024];
@@ -705,7 +717,7 @@ int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...)
705717 // {
706718 // if(ReConnectTrnSkt() == FFFTP_SUCCESS)
707719 // Sts = command(AskTrnCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);
708- Sts = command(cSkt, Reply, &CheckCancelFlg, "%s", Cmd);
720+ Sts = command(cSkt, Reply, CancelCheckWork, "%s", Cmd);
709721 // }
710722 return(Sts);
711723 }
@@ -1040,14 +1052,8 @@ static int ReadOneLine(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork)
10401052
10411053 if((SizeOnce == -2) || (AskTransferNow() == YES))
10421054 // 転送中に全て中止を行うと不正なデータが得られる場合のバグ修正
1043- // エラーの種類によっては無限ループとスタックオーバーフローの可能性あり
10441055 // DisconnectSet();
1045- {
1046- if(SizeOnce == -1)
1047- ReConnectTrnSkt(&cSkt);
1048- else
1049- DisconnectSet();
1050- }
1056+ cSkt = DoClose(cSkt);
10511057 }
10521058 else
10531059 {
--- a/socket.c
+++ b/socket.c
@@ -657,7 +657,8 @@ struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *Canc
657657 DoPrintf("# Start gethostbyname");
658658 #endif
659659 Ret = NULL;
660- *CancelCheckWork = NO;
660+ // 同時接続対応
661+// *CancelCheckWork = NO;
661662
662663 // UTF-8対応
663664 // hAsync = WSAAsyncGetHostByName(hWndSocket, WM_ASYNC_DBASE, Name, Buf, Len);
@@ -771,7 +772,8 @@ int do_connect(SOCKET s, const struct sockaddr *name, int namelen, int *CancelCh
771772 #if DBG_MSG
772773 DoPrintf("# Start connect (S=%x)", s);
773774 #endif
774- *CancelCheckWork = NO;
775+ // 同時接続対応
776+// *CancelCheckWork = NO;
775777
776778 #if DBG_MSG
777779 DoPrintf("## Async set: FD_CONNECT|FD_CLOSE|FD_ACCEPT|FD_READ|FD_WRITE");
@@ -935,7 +937,8 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
935937 DoPrintf("# Start recv (S=%x)", s);
936938 #endif
937939 *TimeOutErr = NO;
938- *CancelCheckWork = NO;
940+ // 同時接続対応
941+// *CancelCheckWork = NO;
939942 Ret = SOCKET_ERROR;
940943 Error = 0;
941944
@@ -981,9 +984,6 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
981984 Ret = recvS(s, buf, len, flags);
982985 if(Ret != SOCKET_ERROR)
983986 break;
984- // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応
985- if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES && recvS(s, buf, len, MSG_PEEK) <= 0)
986- break;
987987 Error = WSAGetLastError();
988988 Sleep(1);
989989 if(BackgrndMessageProc() == YES)
@@ -1035,7 +1035,8 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
10351035 DoPrintf("# Start send (S=%x)", s);
10361036 #endif
10371037 *TimeOutErr = NO;
1038- *CancelCheckWork = NO;
1038+ // 同時接続対応
1039+// *CancelCheckWork = NO;
10391040 Ret = SOCKET_ERROR;
10401041 Error = 0;
10411042
@@ -1094,9 +1095,6 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
10941095 #endif
10951096 break;
10961097 }
1097- // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応
1098- if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)
1099- break;
11001098 Error = WSAGetLastError();
11011099 Sleep(1);
11021100 if(BackgrndMessageProc() == YES)
--- a/socketwrapper.c
+++ b/socketwrapper.c
@@ -82,13 +82,13 @@ LPSSLCONFIRMCALLBACK g_pOpenSSLConfirmCallback;
8282 SSL_CTX* g_pOpenSSLCTX;
8383 SSL* g_pOpenSSLHandle[MAX_SSL_SOCKET];
8484
85-BOOL __stdcall DefaultSSLTimeoutCallback()
85+BOOL __stdcall DefaultSSLTimeoutCallback(BOOL* pbAborted)
8686 {
8787 Sleep(100);
88- return FALSE;
88+ return *pbAborted;
8989 }
9090
91-BOOL __stdcall DefaultSSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)
91+BOOL __stdcall DefaultSSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)
9292 {
9393 return bVerified;
9494 }
@@ -220,7 +220,7 @@ SSL** FindSSLPointerFromSocket(SOCKET s)
220220 return NULL;
221221 }
222222
223-BOOL ConfirmSSLCertificate(SSL* pSSL)
223+BOOL ConfirmSSLCertificate(SSL* pSSL, BOOL* pbAborted)
224224 {
225225 BOOL bResult;
226226 BOOL bVerified;
@@ -281,7 +281,7 @@ BOOL ConfirmSSLCertificate(SSL* pSSL)
281281 if(pCN = strchr(pCN, ','))
282282 pCN++;
283283 }
284- bResult = g_pOpenSSLConfirmCallback(bVerified, pData, pCN);
284+ bResult = g_pOpenSSLConfirmCallback(pbAborted, bVerified, pData, pCN);
285285 if(pData)
286286 free(pData);
287287 if(pSubject)
@@ -333,7 +333,7 @@ BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName)
333333 return bResult;
334334 }
335335
336-BOOL AttachSSL(SOCKET s, SOCKET parent)
336+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted)
337337 {
338338 BOOL r;
339339 DWORD Time;
@@ -380,7 +380,7 @@ BOOL AttachSSL(SOCKET s, SOCKET parent)
380380 if(Error == SSL_ERROR_WANT_READ || Error == SSL_ERROR_WANT_WRITE)
381381 {
382382 LeaveCriticalSection(&g_OpenSSLLock);
383- if(g_pOpenSSLTimeoutCallback() || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))
383+ if(g_pOpenSSLTimeoutCallback(pbAborted) || (g_OpenSSLTimeout > 0 && timeGetTime() - Time >= g_OpenSSLTimeout))
384384 r = FALSE;
385385 EnterCriticalSection(&g_OpenSSLLock);
386386 }
@@ -389,7 +389,7 @@ BOOL AttachSSL(SOCKET s, SOCKET parent)
389389 }
390390 if(r)
391391 {
392- if(ConfirmSSLCertificate(*ppSSL))
392+ if(ConfirmSSLCertificate(*ppSSL, pbAborted))
393393 {
394394 }
395395 else
@@ -470,8 +470,10 @@ int listenS(SOCKET s, int backlog)
470470 SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen)
471471 {
472472 SOCKET r;
473+ BOOL bAborted;
473474 r = accept(s, addr, addrlen);
474- if(!AttachSSL(r, INVALID_SOCKET))
475+ bAborted = FALSE;
476+ if(!AttachSSL(r, INVALID_SOCKET, &bAborted))
475477 {
476478 closesocket(r);
477479 return INVALID_SOCKET;
@@ -482,8 +484,10 @@ SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen)
482484 int connectS(SOCKET s, const struct sockaddr *name, int namelen)
483485 {
484486 int r;
487+ BOOL bAborted;
485488 r = connect(s, name, namelen);
486- if(!AttachSSL(r, INVALID_SOCKET))
489+ bAborted = FALSE;
490+ if(!AttachSSL(r, INVALID_SOCKET, &bAborted))
487491 return SOCKET_ERROR;
488492 return r;
489493 }
--- a/socketwrapper.h
+++ b/socketwrapper.h
@@ -7,8 +7,8 @@
77
88 #define USE_OPENSSL
99
10-typedef BOOL (__stdcall* LPSSLTIMEOUTCALLBACK)();
11-typedef BOOL (__stdcall* LPSSLCONFIRMCALLBACK)(BOOL, LPCSTR, LPCSTR);
10+typedef BOOL (__stdcall* LPSSLTIMEOUTCALLBACK)(BOOL*);
11+typedef BOOL (__stdcall* LPSSLCONFIRMCALLBACK)(BOOL*, BOOL, LPCSTR, LPCSTR);
1212
1313 BOOL LoadOpenSSL();
1414 void FreeOpenSSL();
@@ -16,7 +16,7 @@ BOOL IsOpenSSLLoaded();
1616 void SetSSLTimeoutCallback(DWORD Timeout, LPSSLTIMEOUTCALLBACK pCallback);
1717 void SetSSLConfirmCallback(LPSSLCONFIRMCALLBACK pCallback);
1818 BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName);
19-BOOL AttachSSL(SOCKET s, SOCKET parent);
19+BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted);
2020 BOOL DetachSSL(SOCKET s);
2121 BOOL IsSSLAttached(SOCKET s);
2222 SOCKET socketS(int af, int type, int protocol);
--- a/toolmenu.c
+++ b/toolmenu.c
@@ -395,6 +395,8 @@ static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wPara
395395 }
396396 else
397397 {
398+ // 同時接続対応
399+ CancelFlg = NO;
398400 SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp);
399401 if(CheckClosedAndReconnect() == FFFTP_SUCCESS)
400402 {