FFFTPのソースコードです。
Revision | f93da12f0a0b0271fdaf25d02772972a79d86bf2 (tree) |
---|---|
Time | 2011-11-01 00:35:39 |
Author | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Enhanced routine for simultaneous connection and canceling or aborting.
@@ -1233,8 +1233,8 @@ int BackgrndMessageProc(void); | ||
1233 | 1233 | void ResetAutoExitFlg(void); |
1234 | 1234 | int AskAutoExit(void); |
1235 | 1235 | // 暗号化通信対応 |
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); | |
1238 | 1238 | |
1239 | 1239 | /*===== filelist.c =====*/ |
1240 | 1240 |
@@ -1395,7 +1395,7 @@ void SaveCurrentSetToHost(void); | ||
1395 | 1395 | int ReConnectCmdSkt(void); |
1396 | 1396 | // int ReConnectTrnSkt(void); |
1397 | 1397 | // 同時接続対応 |
1398 | -int ReConnectTrnSkt(SOCKET *Skt); | |
1398 | +int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork); | |
1399 | 1399 | SOCKET AskCmdCtrlSkt(void); |
1400 | 1400 | SOCKET AskTrnCtrlSkt(void); |
1401 | 1401 | void SktShareProh(void); |
@@ -1406,7 +1406,9 @@ int AskConnecting(void); | ||
1406 | 1406 | SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork); |
1407 | 1407 | SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork); |
1408 | 1408 | 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); | |
1410 | 1412 | // 暗号化通信対応 |
1411 | 1413 | int AskCryptMode(void); |
1412 | 1414 | int AskUseNoEncryption(void); |
@@ -1462,7 +1464,9 @@ void SomeCmdProc(void); | ||
1462 | 1464 | void CalcFileSizeProc(void); |
1463 | 1465 | void DispCWDerror(HWND hWnd); |
1464 | 1466 | 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); | |
1466 | 1470 | void ReformToVMSstyleDirName(char *Path); |
1467 | 1471 | void ReformToVMSstylePathName(char *Path); |
1468 | 1472 | #if defined(HAVE_OPENVMS) |
@@ -1493,9 +1497,10 @@ int DoRENAME(char *Src, char *Dst); | ||
1493 | 1497 | int DoCHMOD(char *Path, char *Mode); |
1494 | 1498 | // 同時接続対応 |
1495 | 1499 | //int DoSIZE(char *Path, LONGLONG *Size); |
1500 | +int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork); | |
1501 | +// 同時接続対応 | |
1496 | 1502 | //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); | |
1499 | 1504 | int DoQUOTE(char *CmdStr); |
1500 | 1505 | SOCKET DoClose(SOCKET Sock); |
1501 | 1506 | int DoQUIT(SOCKET ctrl_skt); |
@@ -1503,7 +1508,7 @@ int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork); | ||
1503 | 1508 | int CommandProcCmd(char *Reply, char *fmt, ...); |
1504 | 1509 | // 同時接続対応 |
1505 | 1510 | //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, ...); | |
1507 | 1512 | int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...); |
1508 | 1513 | int SendData(SOCKET Skt, char *Data, int Size, int Mode, int *CancelCheckWork); |
1509 | 1514 | int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp); |
@@ -58,15 +58,20 @@ static void AskUseFireWall(char *Host, int *Fire, int *Pasv, int *List); | ||
58 | 58 | static void SaveCurrentSetToHistory(void); |
59 | 59 | static int ReConnectSkt(SOCKET *Skt); |
60 | 60 | // 暗号化通信対応 |
61 | +// 同時接続対応 | |
61 | 62 | //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); | |
64 | 65 | static int CheckOneTimePassword(char *Pass, char *Reply, int Type); |
65 | 66 | static BOOL CALLBACK BlkHookFnc(void); |
66 | 67 | static int Socks5MakeCmdPacket(SOCKS5REQUEST *Packet, char Cmd, int ValidIP, ulong IP, char *Host, ushort Port); |
67 | 68 | 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); | |
70 | 75 | static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork); |
71 | 76 | |
72 | 77 | /*===== 外部参照 =====*/ |
@@ -163,8 +168,9 @@ void ConnectProc(int Type, int Num) | ||
163 | 168 | |
164 | 169 | DisableUserOpe(); |
165 | 170 | // 暗号化通信対応 |
171 | + // 同時接続対応 | |
166 | 172 | // 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); | |
168 | 174 | TrnCtrlSocket = CmdCtrlSocket; |
169 | 175 | |
170 | 176 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -244,8 +250,9 @@ void QuickConnectProc(void) | ||
244 | 250 | |
245 | 251 | DisableUserOpe(); |
246 | 252 | // 暗号化通信対応 |
253 | + // 同時接続対応 | |
247 | 254 | // 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); | |
249 | 256 | TrnCtrlSocket = CmdCtrlSocket; |
250 | 257 | |
251 | 258 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -418,8 +425,9 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode) | ||
418 | 425 | |
419 | 426 | DisableUserOpe(); |
420 | 427 | // 暗号化通信対応 |
428 | + // 同時接続対応 | |
421 | 429 | // 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); | |
423 | 431 | TrnCtrlSocket = CmdCtrlSocket; |
424 | 432 | |
425 | 433 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -496,8 +504,9 @@ void HistoryConnectProc(int MenuCmd) | ||
496 | 504 | |
497 | 505 | DisableUserOpe(); |
498 | 506 | // 暗号化通信対応 |
507 | + // 同時接続対応 | |
499 | 508 | // 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); | |
501 | 510 | TrnCtrlSocket = CmdCtrlSocket; |
502 | 511 | |
503 | 512 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -958,7 +967,7 @@ int ReConnectCmdSkt(void) | ||
958 | 967 | // return(ReConnectSkt(&TrnCtrlSocket)); |
959 | 968 | //} |
960 | 969 | // 同時接続対応 |
961 | -int ReConnectTrnSkt(SOCKET *Skt) | |
970 | +int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork) | |
962 | 971 | { |
963 | 972 | // char Path[FMAX_PATH+1]; |
964 | 973 | int Sts; |
@@ -984,8 +993,10 @@ int ReConnectTrnSkt(SOCKET *Skt) | ||
984 | 993 | HostData.UseFTPIS = NO; |
985 | 994 | if(HostData.CryptMode != CRYPT_SFTP) |
986 | 995 | HostData.UseSFTP = NO; |
996 | + // 暗号化通信対応 | |
997 | + // 同時接続対応 | |
987 | 998 | // 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) | |
989 | 1000 | { |
990 | 1001 | // AskRemoteCurDir(Path, FMAX_PATH); |
991 | 1002 | // DoCWD(Path, YES, YES, YES); |
@@ -1024,8 +1035,9 @@ static int ReConnectSkt(SOCKET *Skt) | ||
1024 | 1035 | do_closesocket(*Skt); |
1025 | 1036 | /* 再接続 */ |
1026 | 1037 | // 暗号化通信対応 |
1038 | + // 同時接続対応 | |
1027 | 1039 | // 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) | |
1029 | 1041 | { |
1030 | 1042 | AskRemoteCurDir(Path, FMAX_PATH); |
1031 | 1043 | DoCWD(Path, YES, YES, YES); |
@@ -1235,7 +1247,7 @@ int AskConnecting(void) | ||
1235 | 1247 | *----------------------------------------------------------------------------*/ |
1236 | 1248 | |
1237 | 1249 | // 暗号化通信対応 |
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) | |
1239 | 1251 | { |
1240 | 1252 | int Sts; |
1241 | 1253 | int Flg; |
@@ -1282,7 +1294,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1282 | 1294 | |
1283 | 1295 | if(strlen(Tmp) != 0) |
1284 | 1296 | { |
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) | |
1286 | 1300 | { |
1287 | 1301 | // バッファを無効 |
1288 | 1302 | #ifdef DISABLE_CONTROL_NETWORK_BUFFERS |
@@ -1295,9 +1309,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1295 | 1309 | // ; |
1296 | 1310 | if(CryptMode == CRYPT_FTPIS) |
1297 | 1311 | { |
1298 | - if(AttachSSL(ContSock, INVALID_SOCKET)) | |
1312 | + if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork)) | |
1299 | 1313 | { |
1300 | - while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM) | |
1314 | + while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM) | |
1301 | 1315 | ; |
1302 | 1316 | } |
1303 | 1317 | else |
@@ -1305,7 +1319,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1305 | 1319 | } |
1306 | 1320 | else |
1307 | 1321 | { |
1308 | - while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM) | |
1322 | + while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM) | |
1309 | 1323 | ; |
1310 | 1324 | } |
1311 | 1325 |
@@ -1335,15 +1349,21 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1335 | 1349 | (Fwall == FWALL_FU_FP_USER) || |
1336 | 1350 | (Fwall == FWALL_FU_FP)) |
1337 | 1351 | { |
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) | |
1339 | 1355 | { |
1340 | 1356 | 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; | |
1342 | 1360 | } |
1343 | 1361 | } |
1344 | 1362 | else if(Fwall == FWALL_SIDEWINDER) |
1345 | 1363 | { |
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; | |
1347 | 1367 | } |
1348 | 1368 | if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE)) |
1349 | 1369 | { |
@@ -1362,9 +1382,13 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1362 | 1382 | Flg++; |
1363 | 1383 | |
1364 | 1384 | 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; | |
1366 | 1388 | 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; | |
1368 | 1392 | } |
1369 | 1393 | |
1370 | 1394 | if((Sts != FTP_COMPLETE) && (Sts != FTP_CONTINUE)) |
@@ -1398,13 +1422,13 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1398 | 1422 | // FTPES対応 |
1399 | 1423 | if(CryptMode == CRYPT_FTPES) |
1400 | 1424 | { |
1401 | - if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234) | |
1425 | + if(IsOpenSSLLoaded() && (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234) | |
1402 | 1426 | { |
1403 | - if(AttachSSL(ContSock, INVALID_SOCKET)) | |
1427 | + if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork)) | |
1404 | 1428 | { |
1405 | - if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200) | |
1429 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200) | |
1406 | 1430 | { |
1407 | - if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200) | |
1431 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "PROT P")) == 200) | |
1408 | 1432 | { |
1409 | 1433 | } |
1410 | 1434 | else |
@@ -1427,7 +1451,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1427 | 1451 | if(Sts == FTP_ERROR) |
1428 | 1452 | break; |
1429 | 1453 | 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) | |
1431 | 1457 | { |
1432 | 1458 | if((strlen(Pass) != 0) || |
1433 | 1459 | (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 | ||
1438 | 1464 | if(strcmp(Reply, " ") == 0) |
1439 | 1465 | strcpy(Reply, ""); |
1440 | 1466 | |
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; | |
1442 | 1470 | if(Sts == FTP_ERROR) |
1443 | 1471 | { |
1444 | 1472 | strcpy(Pass, ""); |
@@ -1453,7 +1481,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1453 | 1481 | if((strlen(Acct) != 0) || |
1454 | 1482 | (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)) |
1455 | 1483 | { |
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; | |
1457 | 1487 | } |
1458 | 1488 | else |
1459 | 1489 | DoPrintf("No account specified"); |
@@ -1516,7 +1546,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1516 | 1546 | // ホストの機能を確認 |
1517 | 1547 | if(ContSock != INVALID_SOCKET) |
1518 | 1548 | { |
1519 | - if((Sts = command(ContSock, Reply, &CancelFlg, "FEAT")) == 211) | |
1549 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "FEAT")) == 211) | |
1520 | 1550 | { |
1521 | 1551 | // 改行文字はReadReplyMessageで消去されるため区切り文字に空白を使用 |
1522 | 1552 | // UTF-8対応 |
@@ -1532,7 +1562,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1532 | 1562 | // UTF-8対応 |
1533 | 1563 | if(HostData->NameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8)) |
1534 | 1564 | { |
1535 | - if((Sts = command(ContSock, Reply, &CancelFlg, "OPTS UTF8 ON")) == 200) | |
1565 | + if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200) | |
1536 | 1566 | { |
1537 | 1567 | } |
1538 | 1568 | } |
@@ -1545,33 +1575,35 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1545 | 1575 | return(ContSock); |
1546 | 1576 | } |
1547 | 1577 | |
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) | |
1549 | 1581 | { |
1550 | 1582 | SOCKET ContSock; |
1551 | 1583 | 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) | |
1554 | 1586 | { |
1555 | 1587 | 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) | |
1557 | 1589 | HostData->CryptMode = CRYPT_SFTP; |
1558 | 1590 | } |
1559 | - if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES) | |
1591 | + if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES) | |
1560 | 1592 | { |
1561 | 1593 | 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) | |
1563 | 1595 | HostData->CryptMode = CRYPT_FTPIS; |
1564 | 1596 | } |
1565 | - if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES) | |
1597 | + if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPES == YES) | |
1566 | 1598 | { |
1567 | 1599 | 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) | |
1569 | 1601 | HostData->CryptMode = CRYPT_FTPES; |
1570 | 1602 | } |
1571 | - if(CancelFlg == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES) | |
1603 | + if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseNoEncryption == YES) | |
1572 | 1604 | { |
1573 | 1605 | 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) | |
1575 | 1607 | HostData->CryptMode = CRYPT_NONE; |
1576 | 1608 | } |
1577 | 1609 | return ContSock; |
@@ -1822,8 +1854,12 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork) | ||
1822 | 1854 | if(Fwall == FWALL_SOCKS4) |
1823 | 1855 | { |
1824 | 1856 | 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)) | |
1825 | 1861 | if((SocksSendCmd(sSocket, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) || |
1826 | - (Socks4GetCmdReply(sSocket, &Socks4Reply) != FFFTP_SUCCESS) || | |
1862 | + (Socks4GetCmdReply(sSocket, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) || | |
1827 | 1863 | (Socks4Reply.Result != SOCKS4_RES_OK)) |
1828 | 1864 | { |
1829 | 1865 | SetTaskMsg(MSGJPN023, Socks4Reply.Result); |
@@ -1840,8 +1876,12 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork) | ||
1840 | 1876 | } |
1841 | 1877 | |
1842 | 1878 | 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)) | |
1843 | 1883 | if((SocksSendCmd(sSocket, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) || |
1844 | - (Socks5GetCmdReply(sSocket, &Socks5Reply) != FFFTP_SUCCESS) || | |
1884 | + (Socks5GetCmdReply(sSocket, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) || | |
1845 | 1885 | (Socks5Reply.Result != SOCKS5_RES_OK)) |
1846 | 1886 | { |
1847 | 1887 | SetTaskMsg(MSGJPN024, Socks5Reply.Result); |
@@ -1913,8 +1953,12 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork) | ||
1913 | 1953 | Len = offsetof(SOCKS4CMD, UserID) + strlen(FwallUser) + 1; |
1914 | 1954 | |
1915 | 1955 | 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)) | |
1916 | 1960 | if((SocksSendCmd(listen_skt, &Socks4Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) || |
1917 | - (Socks4GetCmdReply(listen_skt, &Socks4Reply) != FFFTP_SUCCESS) || | |
1961 | + (Socks4GetCmdReply(listen_skt, &Socks4Reply, CancelCheckWork) != FFFTP_SUCCESS) || | |
1918 | 1962 | (Socks4Reply.Result != SOCKS4_RES_OK)) |
1919 | 1963 | { |
1920 | 1964 | SetTaskMsg(MSGJPN028, Socks4Reply.Result); |
@@ -1945,8 +1989,12 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork) | ||
1945 | 1989 | Len = Socks5MakeCmdPacket(&Socks5Cmd, SOCKS5_CMD_BIND, UseIPadrs, CurSockAddr.sin_addr.s_addr, DomainName, CurSockAddr.sin_port); |
1946 | 1990 | |
1947 | 1991 | 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)) | |
1948 | 1996 | if((SocksSendCmd(listen_skt, &Socks5Cmd, Len, CancelCheckWork) != FFFTP_SUCCESS) || |
1949 | - (Socks5GetCmdReply(listen_skt, &Socks5Reply) != FFFTP_SUCCESS) || | |
1997 | + (Socks5GetCmdReply(listen_skt, &Socks5Reply, CancelCheckWork) != FFFTP_SUCCESS) || | |
1950 | 1998 | (Socks5Reply.Result != SOCKS5_RES_OK)) |
1951 | 1999 | { |
1952 | 2000 | SetTaskMsg(MSGJPN029, Socks5Reply.Result); |
@@ -2014,7 +2062,11 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork) | ||
2014 | 2062 | if(listen_skt != INVALID_SOCKET) |
2015 | 2063 | { |
2016 | 2064 | #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", | |
2018 | 2070 | UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]), |
2019 | 2071 | UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE) |
2020 | 2072 | { |
@@ -2157,7 +2209,9 @@ static int SocksSendCmd(SOCKET Socket, void *Data, int Size, int *CancelCheckWor | ||
2157 | 2209 | * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL) |
2158 | 2210 | *----------------------------------------------------------------------------*/ |
2159 | 2211 | |
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) | |
2161 | 2215 | { |
2162 | 2216 | uchar *Pos; |
2163 | 2217 | int Len; |
@@ -2166,7 +2220,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet) | ||
2166 | 2220 | Pos = (uchar *)Packet; |
2167 | 2221 | Pos += SOCKS5REPLY_SIZE; |
2168 | 2222 | |
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) | |
2170 | 2226 | { |
2171 | 2227 | if(Packet->Type == SOCKS5_ADRS_IPV4) |
2172 | 2228 | Len = 4 + 2; |
@@ -2174,7 +2230,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet) | ||
2174 | 2230 | Len = 6 + 2; |
2175 | 2231 | else |
2176 | 2232 | { |
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) | |
2178 | 2236 | { |
2179 | 2237 | Len = *Pos + 2; |
2180 | 2238 | Pos++; |
@@ -2182,7 +2240,9 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet) | ||
2182 | 2240 | } |
2183 | 2241 | |
2184 | 2242 | 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); | |
2186 | 2246 | } |
2187 | 2247 | |
2188 | 2248 | if(Ret != FFFTP_SUCCESS) |
@@ -2202,11 +2262,15 @@ static int Socks5GetCmdReply(SOCKET Socket, SOCKS5REPLY *Packet) | ||
2202 | 2262 | * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL) |
2203 | 2263 | *----------------------------------------------------------------------------*/ |
2204 | 2264 | |
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) | |
2206 | 2268 | { |
2207 | 2269 | int Ret; |
2208 | 2270 | |
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); | |
2210 | 2274 | |
2211 | 2275 | if(Ret != FFFTP_SUCCESS) |
2212 | 2276 | DoPrintf(MSGJPN035); |
@@ -2242,8 +2306,12 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork) | ||
2242 | 2306 | else |
2243 | 2307 | Socks5Method.Methods[0] = SOCKS5_AUTH_USER; |
2244 | 2308 | |
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)) | |
2245 | 2313 | 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) || | |
2247 | 2315 | (Socks5MethodReply.Method == (uchar)0xFF)) |
2248 | 2316 | { |
2249 | 2317 | SetTaskMsg(MSGJPN036); |
@@ -2260,8 +2328,12 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork) | ||
2260 | 2328 | Buf[2 + Len] = Len2; |
2261 | 2329 | strcpy(Buf+3+Len, FwallPass); |
2262 | 2330 | |
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)) | |
2263 | 2335 | 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) || | |
2265 | 2337 | (Socks5Status.Status != 0)) |
2266 | 2338 | { |
2267 | 2339 | SetTaskMsg(MSGJPN037); |
@@ -2285,7 +2357,9 @@ static int Socks5SelMethod(SOCKET Socket, int *CancelCheckWork) | ||
2285 | 2357 | * int ステータス (FFFTP_SUCCESS/FFFTP_FAIL) |
2286 | 2358 | *----------------------------------------------------------------------------*/ |
2287 | 2359 | |
2288 | -int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data) | |
2360 | +// 同時接続対応 | |
2361 | +//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data) | |
2362 | +int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork) | |
2289 | 2363 | { |
2290 | 2364 | int Ret; |
2291 | 2365 | char Buf[300]; |
@@ -2293,14 +2367,18 @@ int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data) | ||
2293 | 2367 | Ret = FFFTP_FAIL; |
2294 | 2368 | if((AskHostFireWall() == YES) && (FwallType == FWALL_SOCKS4)) |
2295 | 2369 | { |
2296 | - Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf); | |
2370 | + // 同時接続対応 | |
2371 | +// Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf); | |
2372 | + Socks4GetCmdReply(Socket, (SOCKS4REPLY *)Buf, CancelCheckWork); | |
2297 | 2373 | *Data = Socket; |
2298 | 2374 | Ret = FFFTP_SUCCESS; |
2299 | 2375 | } |
2300 | 2376 | else if((AskHostFireWall() == YES) && |
2301 | 2377 | ((FwallType == FWALL_SOCKS5_NOAUTH) || (FwallType == FWALL_SOCKS5_USER))) |
2302 | 2378 | { |
2303 | - Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf); | |
2379 | + // 同時接続対応 | |
2380 | +// Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf); | |
2381 | + Socks5GetCmdReply(Socket, (SOCKS5REPLY *)Buf, CancelCheckWork); | |
2304 | 2382 | *Data = Socket; |
2305 | 2383 | Ret = FFFTP_SUCCESS; |
2306 | 2384 | } |
@@ -122,6 +122,9 @@ void DownLoadProc(int ChName, int ForceFile, int All) | ||
122 | 122 | FILELIST *Pos; |
123 | 123 | TRANSPACKET Pkt; |
124 | 124 | |
125 | + // 同時接続対応 | |
126 | + CancelFlg = NO; | |
127 | + | |
125 | 128 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
126 | 129 | { |
127 | 130 | DisableUserOpe(); |
@@ -253,6 +256,9 @@ void DirectDownLoadProc(char *Fname) | ||
253 | 256 | { |
254 | 257 | TRANSPACKET Pkt; |
255 | 258 | |
259 | + // 同時接続対応 | |
260 | + CancelFlg = NO; | |
261 | + | |
256 | 262 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
257 | 263 | { |
258 | 264 | DisableUserOpe(); |
@@ -392,6 +398,9 @@ void MirrorDownloadProc(int Notify) | ||
392 | 398 | int Level; |
393 | 399 | int Mode; |
394 | 400 | |
401 | + // 同時接続対応 | |
402 | + CancelFlg = NO; | |
403 | + | |
395 | 404 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
396 | 405 | { |
397 | 406 | DisableUserOpe(); |
@@ -863,6 +872,9 @@ void UpLoadListProc(int ChName, int All) | ||
863 | 872 | char Tmp[FMAX_PATH+1]; |
864 | 873 | int FirstAdd; |
865 | 874 | |
875 | + // 同時接続対応 | |
876 | + CancelFlg = NO; | |
877 | + | |
866 | 878 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
867 | 879 | { |
868 | 880 | DisableUserOpe(); |
@@ -1031,6 +1043,9 @@ void UpLoadDragProc(WPARAM wParam) | ||
1031 | 1043 | int FirstAdd; |
1032 | 1044 | char Cur[FMAX_PATH+1]; |
1033 | 1045 | |
1046 | + // 同時接続対応 | |
1047 | + CancelFlg = NO; | |
1048 | + | |
1034 | 1049 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
1035 | 1050 | { |
1036 | 1051 | DisableUserOpe(); |
@@ -1190,6 +1205,9 @@ void MirrorUploadProc(int Notify) | ||
1190 | 1205 | FILETIME TmpFtimeL; |
1191 | 1206 | FILETIME TmpFtimeR; |
1192 | 1207 | |
1208 | + // 同時接続対応 | |
1209 | + CancelFlg = NO; | |
1210 | + | |
1193 | 1211 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
1194 | 1212 | { |
1195 | 1213 | DisableUserOpe(); |
@@ -1960,6 +1978,9 @@ void DeleteProc(void) | ||
1960 | 1978 | char CurDir[FMAX_PATH+1]; |
1961 | 1979 | char Tmp[FMAX_PATH+1]; |
1962 | 1980 | |
1981 | + // 同時接続対応 | |
1982 | + CancelFlg = NO; | |
1983 | + | |
1963 | 1984 | // デッドロック対策 |
1964 | 1985 | DisableUserOpe(); |
1965 | 1986 | Sts = YES; |
@@ -2115,7 +2136,9 @@ static void DelNotifyAndDo(FILELIST *Dt, int Win, int *Sw, int *Flg, char *CurDi | ||
2115 | 2136 | else |
2116 | 2137 | { |
2117 | 2138 | /* フルパスを使わない時のための処理 */ |
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) | |
2119 | 2142 | *Sw = NO_ALL; |
2120 | 2143 | |
2121 | 2144 | if(*Sw != NO_ALL) |
@@ -2199,6 +2222,9 @@ void RenameProc(void) | ||
2199 | 2222 | int RenFlg; |
2200 | 2223 | int Sts; |
2201 | 2224 | |
2225 | + // 同時接続対応 | |
2226 | + CancelFlg = NO; | |
2227 | + | |
2202 | 2228 | Sts = FFFTP_SUCCESS; |
2203 | 2229 | if(GetFocus() == GetLocalHwnd()) |
2204 | 2230 | Win = WIN_LOCAL; |
@@ -2274,6 +2300,9 @@ void MoveRemoteFileProc(int drop_index) | ||
2274 | 2300 | int RenFlg; |
2275 | 2301 | int Sts; |
2276 | 2302 | |
2303 | + // 同時接続対応 | |
2304 | + CancelFlg = NO; | |
2305 | + | |
2277 | 2306 | if(MoveMode == MOVE_DISABLE) |
2278 | 2307 | { |
2279 | 2308 | return; |
@@ -2443,6 +2472,9 @@ void MkdirProc(void) | ||
2443 | 2472 | char *Title; |
2444 | 2473 | int Tmp; |
2445 | 2474 | |
2475 | + // 同時接続対応 | |
2476 | + CancelFlg = NO; | |
2477 | + | |
2446 | 2478 | if(GetFocus() == GetLocalHwnd()) |
2447 | 2479 | { |
2448 | 2480 | Win = WIN_LOCAL; |
@@ -2495,6 +2527,9 @@ void ChangeDirComboProc(HWND hWnd) | ||
2495 | 2527 | char Tmp[FMAX_PATH+1]; |
2496 | 2528 | int i; |
2497 | 2529 | |
2530 | + // 同時接続対応 | |
2531 | + CancelFlg = NO; | |
2532 | + | |
2498 | 2533 | if((i = SendMessage(hWnd, CB_GETCURSEL, 0, 0)) != CB_ERR) |
2499 | 2534 | { |
2500 | 2535 | SendMessage(hWnd, CB_GETLBTEXT, i, (LPARAM)Tmp); |
@@ -2536,6 +2571,9 @@ void ChangeDirBmarkProc(int MarkID) | ||
2536 | 2571 | char Remote[FMAX_PATH+1]; |
2537 | 2572 | int Sts; |
2538 | 2573 | |
2574 | + // 同時接続対応 | |
2575 | + CancelFlg = NO; | |
2576 | + | |
2539 | 2577 | Sts = AskBookMarkText(MarkID, Local, Remote, FMAX_PATH+1); |
2540 | 2578 | if((Sts == BMARK_TYPE_LOCAL) || (Sts == BMARK_TYPE_BOTH)) |
2541 | 2579 | { |
@@ -2575,6 +2613,9 @@ void ChangeDirDirectProc(int Win) | ||
2575 | 2613 | char *Title; |
2576 | 2614 | int Tmp; |
2577 | 2615 | |
2616 | + // 同時接続対応 | |
2617 | + CancelFlg = NO; | |
2618 | + | |
2578 | 2619 | if(Win == WIN_LOCAL) |
2579 | 2620 | Title = MSGJPN072; |
2580 | 2621 | else |
@@ -2651,6 +2692,9 @@ void ChmodProc(void) | ||
2651 | 2692 | char *BufTmp; |
2652 | 2693 | int BufLen; |
2653 | 2694 | |
2695 | + // 同時接続対応 | |
2696 | + CancelFlg = NO; | |
2697 | + | |
2654 | 2698 | if(GetFocus() == GetRemoteHwnd()) |
2655 | 2699 | { |
2656 | 2700 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
@@ -2874,6 +2918,9 @@ void SomeCmdProc(void) | ||
2874 | 2918 | int Tmp; |
2875 | 2919 | FILELIST *FileListBase; |
2876 | 2920 | |
2921 | + // 同時接続対応 | |
2922 | + CancelFlg = NO; | |
2923 | + | |
2877 | 2924 | if(GetFocus() == GetRemoteHwnd()) |
2878 | 2925 | { |
2879 | 2926 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
@@ -2918,6 +2965,9 @@ void CalcFileSizeProc(void) | ||
2918 | 2965 | int All; |
2919 | 2966 | int Sts; |
2920 | 2967 | |
2968 | + // 同時接続対応 | |
2969 | + CancelFlg = NO; | |
2970 | + | |
2921 | 2971 | if((All = DialogBox(GetFtpInst(), MAKEINTRESOURCE(filesize_notify_dlg), GetMainHwnd(), SizeNotifyDlgWndProc)) != NO_ALL) |
2922 | 2972 | { |
2923 | 2973 | Sts = FFFTP_SUCCESS; |
@@ -3141,7 +3191,9 @@ void CopyURLtoClipBoard(void) | ||
3141 | 3191 | * Path にファイル名のみ残す。(パス名は消す) |
3142 | 3192 | *----------------------------------------------------------------------------*/ |
3143 | 3193 | |
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) | |
3145 | 3197 | { |
3146 | 3198 | int Sts; |
3147 | 3199 | int Cmd; |
@@ -3163,12 +3215,12 @@ int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type) | ||
3163 | 3215 | |
3164 | 3216 | if(strcmp(Tmp, CurDir) != 0) |
3165 | 3217 | { |
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 | |
3170 | 3222 | // 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); | |
3172 | 3224 | |
3173 | 3225 | if(Cmd/100 != FTP_COMPLETE) |
3174 | 3226 | { |
@@ -96,7 +96,7 @@ static int UpLoadPassive(TRANSPACKET *Pkt); | ||
96 | 96 | static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt); |
97 | 97 | // 同時接続対応 |
98 | 98 | //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); | |
100 | 100 | static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode); |
101 | 101 | static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode); |
102 | 102 | static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); |
@@ -142,7 +142,9 @@ static time_t TimeStart[MAX_DATA_CONNECTION]; /* 転送開始時間 */ | ||
142 | 142 | static int KeepDlg = NO; /* 転送中ダイアログを消さないかどうか (YES/NO) */ |
143 | 143 | static int MoveToForeground = NO; /* ウインドウを前面に移動するかどうか (YES/NO) */ |
144 | 144 | |
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]; | |
146 | 148 | // 同時接続対応 |
147 | 149 | //static char ErrMsg[ERR_MSG_LEN+7]; |
148 | 150 | static char ErrMsg[MAX_DATA_CONNECTION+1][ERR_MSG_LEN+7]; |
@@ -627,7 +629,11 @@ void GoForwardTransWindow(void) | ||
627 | 629 | |
628 | 630 | void InitTransCurDir(void) |
629 | 631 | { |
630 | - strcpy(CurDir, ""); | |
632 | + // 同時接続対応 | |
633 | +// strcpy(CurDir, ""); | |
634 | + int i; | |
635 | + for(i = 0; i < MAX_DATA_CONNECTION; i++) | |
636 | + strcpy(CurDir[i], ""); | |
631 | 637 | return; |
632 | 638 | } |
633 | 639 |
@@ -710,7 +716,19 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
710 | 716 | if(TrnSkt == INVALID_SOCKET || NewCmdSkt != CmdSkt) |
711 | 717 | { |
712 | 718 | 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 | + } | |
714 | 732 | // WaitForSingleObject(hListAccMutex, INFINITE); |
715 | 733 | while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT) |
716 | 734 | { |
@@ -793,7 +811,7 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
793 | 811 | { |
794 | 812 | /* フルパスを使わないための処理 */ |
795 | 813 | // 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) | |
797 | 815 | { |
798 | 816 | // if(strncmp(TransPacketBase->Cmd, "RETR-S", 6) == 0) |
799 | 817 | if(strncmp(Pos->Cmd, "RETR-S", 6) == 0) |
@@ -802,8 +820,8 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
802 | 820 | // DoSIZE(TransPacketBase->RemoteFile, &TransPacketBase->Size); |
803 | 821 | // DoMDTM(TransPacketBase->RemoteFile, &TransPacketBase->Time); |
804 | 822 | // 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]); | |
807 | 825 | strcpy(Pos->Cmd, "RETR "); |
808 | 826 | } |
809 | 827 |
@@ -827,7 +845,7 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
827 | 845 | // ReleaseMutex(hListAccMutex); |
828 | 846 | /* フルパスを使わないための処理 */ |
829 | 847 | // 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) | |
831 | 849 | { |
832 | 850 | Up = YES; |
833 | 851 | // if(DoUpLoad(AskTrnCtrlSkt(), TransPacketBase) == 429) |
@@ -856,7 +874,7 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
856 | 874 | // strcpy(Tmp, TransPacketBase->RemoteFile); |
857 | 875 | strcpy(Tmp, Pos->RemoteFile); |
858 | 876 | // 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) | |
860 | 878 | { |
861 | 879 | ClearAll = YES; |
862 | 880 | CwdSts = FTP_ERROR; |
@@ -866,13 +884,13 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
866 | 884 | { |
867 | 885 | Up = YES; |
868 | 886 | // CommandProcTrn(NULL, "MKD %s", Tmp); |
869 | - CommandProcTrn(TrnSkt, NULL, "MKD %s", Tmp); | |
887 | + CommandProcTrn(TrnSkt, NULL, &Canceled[Pos->ThreadCount], "MKD %s", Tmp); | |
870 | 888 | /* すでにフォルダがある場合もあるので、 */ |
871 | 889 | /* ここではエラーチェックはしない */ |
872 | 890 | |
873 | 891 | if(FolderAttr) |
874 | 892 | // 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); | |
876 | 894 | } |
877 | 895 | } |
878 | 896 | // else if(strlen(TransPacketBase->LocalFile) > 0) |
@@ -893,15 +911,15 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
893 | 911 | |
894 | 912 | /* フルパスを使わないための処理 */ |
895 | 913 | // 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) | |
897 | 915 | { |
898 | 916 | Up = YES; |
899 | 917 | // 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); | |
901 | 919 | |
902 | 920 | if(FolderAttr) |
903 | 921 | // 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); | |
905 | 923 | } |
906 | 924 | ReleaseMutex(hListAccMutex); |
907 | 925 | } |
@@ -918,11 +936,11 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
918 | 936 | { |
919 | 937 | /* フルパスを使わないための処理 */ |
920 | 938 | // 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) | |
922 | 940 | { |
923 | 941 | Up = YES; |
924 | 942 | // 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); | |
926 | 944 | } |
927 | 945 | } |
928 | 946 | ReleaseMutex(hListAccMutex); |
@@ -940,11 +958,11 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
940 | 958 | { |
941 | 959 | /* フルパスを使わないための処理 */ |
942 | 960 | // 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) | |
944 | 962 | { |
945 | 963 | Up = YES; |
946 | 964 | // 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); | |
948 | 966 | } |
949 | 967 | } |
950 | 968 | ReleaseMutex(hListAccMutex); |
@@ -1002,10 +1020,10 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
1002 | 1020 | if(AskShareProh() == YES) |
1003 | 1021 | { |
1004 | 1022 | // if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0) |
1005 | - if(strcmp(CurDir, Pos->RemoteFile) != 0) | |
1023 | + if(strcmp(CurDir[Pos->ThreadCount], Pos->RemoteFile) != 0) | |
1006 | 1024 | { |
1007 | 1025 | // 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) | |
1009 | 1027 | { |
1010 | 1028 | DispCWDerror(hWndTrans); |
1011 | 1029 | ClearAll = YES; |
@@ -1013,7 +1031,7 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
1013 | 1031 | } |
1014 | 1032 | } |
1015 | 1033 | // strcpy(CurDir, TransPacketBase->RemoteFile); |
1016 | - strcpy(CurDir, Pos->RemoteFile); | |
1034 | + strcpy(CurDir[Pos->ThreadCount], Pos->RemoteFile); | |
1017 | 1035 | ReleaseMutex(hListAccMutex); |
1018 | 1036 | } |
1019 | 1037 | /* カレントディレクトリを戻す */ |
@@ -1025,9 +1043,9 @@ static ULONG WINAPI TransferThread(void *Dummy) | ||
1025 | 1043 | // if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0) |
1026 | 1044 | // CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile); |
1027 | 1045 | // 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); | |
1031 | 1049 | } |
1032 | 1050 | ReleaseMutex(hListAccMutex); |
1033 | 1051 | } |
@@ -1182,7 +1200,7 @@ static int MakeNonFullPath(TRANSPACKET *Pkt, char *Cur, char *Tmp) | ||
1182 | 1200 | int Sts; |
1183 | 1201 | |
1184 | 1202 | // 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]); | |
1186 | 1204 | if(Sts == FFFTP_FAIL) |
1187 | 1205 | ClearAll = YES; |
1188 | 1206 |
@@ -1290,7 +1308,9 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork) | ||
1290 | 1308 | iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf); |
1291 | 1309 | if(iRetCode/100 == FTP_PRELIM) |
1292 | 1310 | { |
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) | |
1294 | 1314 | { |
1295 | 1315 | iLength = sizeof(saSockAddr1); |
1296 | 1316 | data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength); |
@@ -1317,7 +1337,7 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork) | ||
1317 | 1337 | // iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork); |
1318 | 1338 | if(IsSSLAttached(Pkt->ctrl_skt)) |
1319 | 1339 | { |
1320 | - if(AttachSSL(data_socket, Pkt->ctrl_skt)) | |
1340 | + if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork)) | |
1321 | 1341 | iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork); |
1322 | 1342 | else |
1323 | 1343 | iRetCode = 500; |
@@ -1393,7 +1413,7 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork) | ||
1393 | 1413 | // iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork); |
1394 | 1414 | if(IsSSLAttached(Pkt->ctrl_skt)) |
1395 | 1415 | { |
1396 | - if(AttachSSL(data_socket, Pkt->ctrl_skt)) | |
1416 | + if(AttachSSL(data_socket, Pkt->ctrl_skt, CancelCheckWork)) | |
1397 | 1417 | iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork); |
1398 | 1418 | else |
1399 | 1419 | iRetCode = 500; |
@@ -2332,7 +2352,9 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt) | ||
2332 | 2352 | iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled[Pkt->ThreadCount], "%s", Buf); |
2333 | 2353 | if((iRetCode/100) == FTP_PRELIM) |
2334 | 2354 | { |
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) | |
2336 | 2358 | { |
2337 | 2359 | iLength=sizeof(saSockAddr1); |
2338 | 2360 | data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength); |
@@ -2359,7 +2381,7 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt) | ||
2359 | 2381 | // iRetCode = UpLoadFile(Pkt, data_socket); |
2360 | 2382 | if(IsSSLAttached(Pkt->ctrl_skt)) |
2361 | 2383 | { |
2362 | - if(AttachSSL(data_socket, Pkt->ctrl_skt)) | |
2384 | + if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount])) | |
2363 | 2385 | iRetCode = UpLoadFile(Pkt, data_socket); |
2364 | 2386 | else |
2365 | 2387 | iRetCode = 500; |
@@ -2441,7 +2463,7 @@ static int UpLoadPassive(TRANSPACKET *Pkt) | ||
2441 | 2463 | // iRetCode = UpLoadFile(Pkt, data_socket); |
2442 | 2464 | if(IsSSLAttached(Pkt->ctrl_skt)) |
2443 | 2465 | { |
2444 | - if(AttachSSL(data_socket, Pkt->ctrl_skt)) | |
2466 | + if(AttachSSL(data_socket, Pkt->ctrl_skt, &Canceled[Pkt->ThreadCount])) | |
2445 | 2467 | iRetCode = UpLoadFile(Pkt, data_socket); |
2446 | 2468 | else |
2447 | 2469 | iRetCode = 500; |
@@ -2784,7 +2806,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) | ||
2784 | 2806 | } |
2785 | 2807 | |
2786 | 2808 | // 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) | |
2788 | 2810 | { |
2789 | 2811 | Pkt->Abort = ABORT_ERROR; |
2790 | 2812 | break; |
@@ -2796,7 +2818,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) | ||
2796 | 2818 | { |
2797 | 2819 | // 同時接続対応 |
2798 | 2820 | // 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) | |
2800 | 2822 | Pkt->Abort = ABORT_ERROR; |
2801 | 2823 | } |
2802 | 2824 |
@@ -2940,12 +2962,12 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) | ||
2940 | 2962 | } |
2941 | 2963 | |
2942 | 2964 | // 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) | |
2944 | 2966 | Pkt->Abort = ABORT_ERROR; |
2945 | 2967 | cInfo2.Buf = Buf3; |
2946 | 2968 | cInfo2.BufSize = (BUFSIZE + 3) * 4; |
2947 | 2969 | 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) | |
2949 | 2971 | Pkt->Abort = ABORT_ERROR; |
2950 | 2972 | } |
2951 | 2973 |
@@ -3017,7 +3039,7 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt) | ||
3017 | 3039 | |
3018 | 3040 | // 同時接続対応 |
3019 | 3041 | //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) | |
3021 | 3043 | { |
3022 | 3044 | char Buf3[BUFSIZE*2]; |
3023 | 3045 | int Continue; |
@@ -3037,7 +3059,7 @@ static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET | ||
3037 | 3059 | Continue = ConvTermCodeToCRLF(tInfo); |
3038 | 3060 | // 同時接続対応 |
3039 | 3061 | // 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) | |
3041 | 3063 | break; |
3042 | 3064 | } |
3043 | 3065 | while(Continue == YES); |
@@ -3045,7 +3067,7 @@ static int TermCodeConvAndSend(int ThreadCount, TERMCODECONVINFO *tInfo, SOCKET | ||
3045 | 3067 | else |
3046 | 3068 | // 同時接続対応 |
3047 | 3069 | // Ret = SendData(Skt, Data, Size, 0, &Canceled); |
3048 | - Ret = SendData(Skt, Data, Size, 0, &Canceled[ThreadCount]); | |
3070 | + Ret = SendData(Skt, Data, Size, 0, CancelCheckWork); | |
3049 | 3071 | |
3050 | 3072 | return(Ret); |
3051 | 3073 | } |
@@ -1081,12 +1081,16 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1081 | 1081 | break; |
1082 | 1082 | |
1083 | 1083 | case MENU_FILTER : |
1084 | + // 同時接続対応 | |
1085 | + CancelFlg = NO; | |
1084 | 1086 | SetFilter(&CancelFlg); |
1085 | 1087 | break; |
1086 | 1088 | |
1087 | 1089 | case MENU_SORT : |
1088 | 1090 | if(SortSetting() == YES) |
1089 | 1091 | { |
1092 | + // 同時接続対応 | |
1093 | + CancelFlg = NO; | |
1090 | 1094 | LocalFileSort = AskSortType(ITEM_LFILE); |
1091 | 1095 | LocalDirSort = AskSortType(ITEM_LDIR); |
1092 | 1096 | RemoteFileSort = AskSortType(ITEM_RFILE); |
@@ -1156,6 +1160,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1156 | 1160 | break; |
1157 | 1161 | |
1158 | 1162 | case MENU_REFRESH : |
1163 | + // 同時接続対応 | |
1164 | + CancelFlg = NO; | |
1159 | 1165 | SuppressRefresh = 1; |
1160 | 1166 | GetLocalDirForWnd(); |
1161 | 1167 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
@@ -1180,6 +1186,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1180 | 1186 | break; |
1181 | 1187 | |
1182 | 1188 | case REFRESH_REMOTE : |
1189 | + // 同時接続対応 | |
1190 | + CancelFlg = NO; | |
1183 | 1191 | SuppressRefresh = 1; |
1184 | 1192 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
1185 | 1193 | GetRemoteDirForWnd(CACHE_REFRESH, &CancelFlg); |
@@ -1244,6 +1252,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1244 | 1252 | break; |
1245 | 1253 | |
1246 | 1254 | case MENU_DOTFILE : |
1255 | + // 同時接続対応 | |
1256 | + CancelFlg = NO; | |
1247 | 1257 | DotFile ^= 1; |
1248 | 1258 | DispDotFileMode(); |
1249 | 1259 | GetLocalDirForWnd(); |
@@ -1480,6 +1490,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1480 | 1490 | case LVN_COLUMNCLICK : |
1481 | 1491 | if(((NMHDR *)lParam)->hwndFrom == GetLocalHwnd()) |
1482 | 1492 | { |
1493 | + // 同時接続対応 | |
1494 | + CancelFlg = NO; | |
1483 | 1495 | SetSortTypeByColumn(WIN_LOCAL, ((NM_LISTVIEW *)lParam)->iSubItem); |
1484 | 1496 | ReSortDispList(WIN_LOCAL, &CancelFlg); |
1485 | 1497 | } |
@@ -1487,6 +1499,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA | ||
1487 | 1499 | { |
1488 | 1500 | if(((NM_LISTVIEW *)lParam)->iSubItem != 4) |
1489 | 1501 | { |
1502 | + // 同時接続対応 | |
1503 | + CancelFlg = NO; | |
1490 | 1504 | SetSortTypeByColumn(WIN_REMOTE, ((NM_LISTVIEW *)lParam)->iSubItem); |
1491 | 1505 | ReSortDispList(WIN_REMOTE, &CancelFlg); |
1492 | 1506 | } |
@@ -2079,6 +2093,8 @@ void DoubleClickProc(int Win, int Mode, int App) | ||
2079 | 2093 | // if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429) |
2080 | 2094 | // { |
2081 | 2095 | // ReConnectCmdSkt(); |
2096 | + // 同時接続対応 | |
2097 | + CancelFlg = NO; | |
2082 | 2098 | Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg); |
2083 | 2099 | // } |
2084 | 2100 | } |
@@ -2851,17 +2867,17 @@ int EnterMasterPasswordAndSet( int Res, HWND hWnd ) | ||
2851 | 2867 | } |
2852 | 2868 | |
2853 | 2869 | // 暗号化通信対応 |
2854 | -BOOL __stdcall SSLTimeoutCallback() | |
2870 | +BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted) | |
2855 | 2871 | { |
2856 | 2872 | Sleep(1); |
2857 | 2873 | if(BackgrndMessageProc() == YES) |
2858 | 2874 | return TRUE; |
2859 | - if(CancelFlg == YES) | |
2875 | + if(*pbAborted == YES) | |
2860 | 2876 | return TRUE; |
2861 | 2877 | return FALSE; |
2862 | 2878 | } |
2863 | 2879 | |
2864 | -BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName) | |
2880 | +BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName) | |
2865 | 2881 | { |
2866 | 2882 | BOOL bResult; |
2867 | 2883 | int i; |
@@ -2895,7 +2911,7 @@ BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR Com | ||
2895 | 2911 | } |
2896 | 2912 | } |
2897 | 2913 | if(!bResult) |
2898 | - CancelFlg = YES; | |
2914 | + *pbAborted = YES; | |
2899 | 2915 | return bResult; |
2900 | 2916 | } |
2901 | 2917 |
@@ -62,11 +62,15 @@ extern TRANSPACKET MainTransPkt; | ||
62 | 62 | extern int TimeOut; |
63 | 63 | extern int SendQuit; |
64 | 64 | |
65 | +// 同時接続対応 | |
66 | +extern int CancelFlg; | |
67 | + | |
65 | 68 | /*===== ローカルなワーク =====*/ |
66 | 69 | |
67 | 70 | static int PwdCommandType; |
68 | 71 | |
69 | -static int CheckCancelFlg = NO; | |
72 | +// 同時接続対応 | |
73 | +//static int CheckCancelFlg = NO; | |
70 | 74 | |
71 | 75 | |
72 | 76 |
@@ -343,7 +347,9 @@ int DoRENAME(char *Src, char *Dst) | ||
343 | 347 | |
344 | 348 | Sts = CommandProcCmd(NULL, "RNFR %s", Src); |
345 | 349 | 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); | |
347 | 353 | |
348 | 354 | if(Sts/100 >= FTP_CONTINUE) |
349 | 355 | SoundPlay(SND_ERROR); |
@@ -391,13 +397,14 @@ int DoCHMOD(char *Path, char *Mode) | ||
391 | 397 | |
392 | 398 | // 同時接続対応 |
393 | 399 | //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) | |
395 | 401 | { |
396 | 402 | int Sts; |
397 | 403 | char Tmp[1024]; |
398 | 404 | |
405 | + // 同時接続対応 | |
399 | 406 | // Sts = CommandProcTrn(Tmp, "SIZE %s", Path); |
400 | - Sts = CommandProcTrn(cSkt, Tmp, "SIZE %s", Path); | |
407 | + Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "SIZE %s", Path); | |
401 | 408 | |
402 | 409 | *Size = -1; |
403 | 410 | if((Sts/100 == FTP_COMPLETE) && (strlen(Tmp) > 4) && IsDigit(Tmp[4])) |
@@ -423,7 +430,7 @@ int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size) | ||
423 | 430 | |
424 | 431 | // 同時接続対応 |
425 | 432 | //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) | |
427 | 434 | { |
428 | 435 | int Sts; |
429 | 436 | char Tmp[1024]; |
@@ -432,8 +439,9 @@ int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time) | ||
432 | 439 | Time->dwLowDateTime = 0; |
433 | 440 | Time->dwHighDateTime = 0; |
434 | 441 | |
442 | + // 同時接続対応 | |
435 | 443 | // Sts = CommandProcTrn(Tmp, "MDTM %s", Path); |
436 | - Sts = CommandProcTrn(cSkt, Tmp, "MDTM %s", Path); | |
444 | + Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MDTM %s", Path); | |
437 | 445 | if(Sts/100 == FTP_COMPLETE) |
438 | 446 | { |
439 | 447 | sTime.wMilliseconds = 0; |
@@ -516,7 +524,9 @@ int DoQUIT(SOCKET ctrl_skt) | ||
516 | 524 | |
517 | 525 | Ret = FTP_COMPLETE; |
518 | 526 | 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; | |
520 | 530 | |
521 | 531 | return(Ret); |
522 | 532 | } |
@@ -665,7 +675,9 @@ int CommandProcCmd(char *Reply, char *fmt, ...) | ||
665 | 675 | // { |
666 | 676 | // if(ReConnectCmdSkt() == FFFTP_SUCCESS) |
667 | 677 | // { |
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); | |
669 | 681 | // } |
670 | 682 | // } |
671 | 683 | return(Sts); |
@@ -688,7 +700,7 @@ int CommandProcCmd(char *Reply, char *fmt, ...) | ||
688 | 700 | |
689 | 701 | // 同時接続対応 |
690 | 702 | //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, ...) | |
692 | 704 | { |
693 | 705 | va_list Args; |
694 | 706 | char Cmd[1024]; |
@@ -705,7 +717,7 @@ int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...) | ||
705 | 717 | // { |
706 | 718 | // if(ReConnectTrnSkt() == FFFTP_SUCCESS) |
707 | 719 | // Sts = command(AskTrnCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd); |
708 | - Sts = command(cSkt, Reply, &CheckCancelFlg, "%s", Cmd); | |
720 | + Sts = command(cSkt, Reply, CancelCheckWork, "%s", Cmd); | |
709 | 721 | // } |
710 | 722 | return(Sts); |
711 | 723 | } |
@@ -1040,14 +1052,8 @@ static int ReadOneLine(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork) | ||
1040 | 1052 | |
1041 | 1053 | if((SizeOnce == -2) || (AskTransferNow() == YES)) |
1042 | 1054 | // 転送中に全て中止を行うと不正なデータが得られる場合のバグ修正 |
1043 | - // エラーの種類によっては無限ループとスタックオーバーフローの可能性あり | |
1044 | 1055 | // DisconnectSet(); |
1045 | - { | |
1046 | - if(SizeOnce == -1) | |
1047 | - ReConnectTrnSkt(&cSkt); | |
1048 | - else | |
1049 | - DisconnectSet(); | |
1050 | - } | |
1056 | + cSkt = DoClose(cSkt); | |
1051 | 1057 | } |
1052 | 1058 | else |
1053 | 1059 | { |
@@ -657,7 +657,8 @@ struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *Canc | ||
657 | 657 | DoPrintf("# Start gethostbyname"); |
658 | 658 | #endif |
659 | 659 | Ret = NULL; |
660 | - *CancelCheckWork = NO; | |
660 | + // 同時接続対応 | |
661 | +// *CancelCheckWork = NO; | |
661 | 662 | |
662 | 663 | // UTF-8対応 |
663 | 664 | // 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 | ||
771 | 772 | #if DBG_MSG |
772 | 773 | DoPrintf("# Start connect (S=%x)", s); |
773 | 774 | #endif |
774 | - *CancelCheckWork = NO; | |
775 | + // 同時接続対応 | |
776 | +// *CancelCheckWork = NO; | |
775 | 777 | |
776 | 778 | #if DBG_MSG |
777 | 779 | 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 | ||
935 | 937 | DoPrintf("# Start recv (S=%x)", s); |
936 | 938 | #endif |
937 | 939 | *TimeOutErr = NO; |
938 | - *CancelCheckWork = NO; | |
940 | + // 同時接続対応 | |
941 | +// *CancelCheckWork = NO; | |
939 | 942 | Ret = SOCKET_ERROR; |
940 | 943 | Error = 0; |
941 | 944 |
@@ -981,9 +984,6 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance | ||
981 | 984 | Ret = recvS(s, buf, len, flags); |
982 | 985 | if(Ret != SOCKET_ERROR) |
983 | 986 | break; |
984 | - // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応 | |
985 | - if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES && recvS(s, buf, len, MSG_PEEK) <= 0) | |
986 | - break; | |
987 | 987 | Error = WSAGetLastError(); |
988 | 988 | Sleep(1); |
989 | 989 | if(BackgrndMessageProc() == YES) |
@@ -1035,7 +1035,8 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int | ||
1035 | 1035 | DoPrintf("# Start send (S=%x)", s); |
1036 | 1036 | #endif |
1037 | 1037 | *TimeOutErr = NO; |
1038 | - *CancelCheckWork = NO; | |
1038 | + // 同時接続対応 | |
1039 | +// *CancelCheckWork = NO; | |
1039 | 1040 | Ret = SOCKET_ERROR; |
1040 | 1041 | Error = 0; |
1041 | 1042 |
@@ -1094,9 +1095,6 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int | ||
1094 | 1095 | #endif |
1095 | 1096 | break; |
1096 | 1097 | } |
1097 | - // 何故か一部のホストとWindows 2000の組み合わせで通信できないバグに暫定対応 | |
1098 | - if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES) | |
1099 | - break; | |
1100 | 1098 | Error = WSAGetLastError(); |
1101 | 1099 | Sleep(1); |
1102 | 1100 | if(BackgrndMessageProc() == YES) |
@@ -82,13 +82,13 @@ LPSSLCONFIRMCALLBACK g_pOpenSSLConfirmCallback; | ||
82 | 82 | SSL_CTX* g_pOpenSSLCTX; |
83 | 83 | SSL* g_pOpenSSLHandle[MAX_SSL_SOCKET]; |
84 | 84 | |
85 | -BOOL __stdcall DefaultSSLTimeoutCallback() | |
85 | +BOOL __stdcall DefaultSSLTimeoutCallback(BOOL* pbAborted) | |
86 | 86 | { |
87 | 87 | Sleep(100); |
88 | - return FALSE; | |
88 | + return *pbAborted; | |
89 | 89 | } |
90 | 90 | |
91 | -BOOL __stdcall DefaultSSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName) | |
91 | +BOOL __stdcall DefaultSSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName) | |
92 | 92 | { |
93 | 93 | return bVerified; |
94 | 94 | } |
@@ -220,7 +220,7 @@ SSL** FindSSLPointerFromSocket(SOCKET s) | ||
220 | 220 | return NULL; |
221 | 221 | } |
222 | 222 | |
223 | -BOOL ConfirmSSLCertificate(SSL* pSSL) | |
223 | +BOOL ConfirmSSLCertificate(SSL* pSSL, BOOL* pbAborted) | |
224 | 224 | { |
225 | 225 | BOOL bResult; |
226 | 226 | BOOL bVerified; |
@@ -281,7 +281,7 @@ BOOL ConfirmSSLCertificate(SSL* pSSL) | ||
281 | 281 | if(pCN = strchr(pCN, ',')) |
282 | 282 | pCN++; |
283 | 283 | } |
284 | - bResult = g_pOpenSSLConfirmCallback(bVerified, pData, pCN); | |
284 | + bResult = g_pOpenSSLConfirmCallback(pbAborted, bVerified, pData, pCN); | |
285 | 285 | if(pData) |
286 | 286 | free(pData); |
287 | 287 | if(pSubject) |
@@ -333,7 +333,7 @@ BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName) | ||
333 | 333 | return bResult; |
334 | 334 | } |
335 | 335 | |
336 | -BOOL AttachSSL(SOCKET s, SOCKET parent) | |
336 | +BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted) | |
337 | 337 | { |
338 | 338 | BOOL r; |
339 | 339 | DWORD Time; |
@@ -380,7 +380,7 @@ BOOL AttachSSL(SOCKET s, SOCKET parent) | ||
380 | 380 | if(Error == SSL_ERROR_WANT_READ || Error == SSL_ERROR_WANT_WRITE) |
381 | 381 | { |
382 | 382 | 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)) | |
384 | 384 | r = FALSE; |
385 | 385 | EnterCriticalSection(&g_OpenSSLLock); |
386 | 386 | } |
@@ -389,7 +389,7 @@ BOOL AttachSSL(SOCKET s, SOCKET parent) | ||
389 | 389 | } |
390 | 390 | if(r) |
391 | 391 | { |
392 | - if(ConfirmSSLCertificate(*ppSSL)) | |
392 | + if(ConfirmSSLCertificate(*ppSSL, pbAborted)) | |
393 | 393 | { |
394 | 394 | } |
395 | 395 | else |
@@ -470,8 +470,10 @@ int listenS(SOCKET s, int backlog) | ||
470 | 470 | SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen) |
471 | 471 | { |
472 | 472 | SOCKET r; |
473 | + BOOL bAborted; | |
473 | 474 | r = accept(s, addr, addrlen); |
474 | - if(!AttachSSL(r, INVALID_SOCKET)) | |
475 | + bAborted = FALSE; | |
476 | + if(!AttachSSL(r, INVALID_SOCKET, &bAborted)) | |
475 | 477 | { |
476 | 478 | closesocket(r); |
477 | 479 | return INVALID_SOCKET; |
@@ -482,8 +484,10 @@ SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen) | ||
482 | 484 | int connectS(SOCKET s, const struct sockaddr *name, int namelen) |
483 | 485 | { |
484 | 486 | int r; |
487 | + BOOL bAborted; | |
485 | 488 | r = connect(s, name, namelen); |
486 | - if(!AttachSSL(r, INVALID_SOCKET)) | |
489 | + bAborted = FALSE; | |
490 | + if(!AttachSSL(r, INVALID_SOCKET, &bAborted)) | |
487 | 491 | return SOCKET_ERROR; |
488 | 492 | return r; |
489 | 493 | } |
@@ -7,8 +7,8 @@ | ||
7 | 7 | |
8 | 8 | #define USE_OPENSSL |
9 | 9 | |
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); | |
12 | 12 | |
13 | 13 | BOOL LoadOpenSSL(); |
14 | 14 | void FreeOpenSSL(); |
@@ -16,7 +16,7 @@ BOOL IsOpenSSLLoaded(); | ||
16 | 16 | void SetSSLTimeoutCallback(DWORD Timeout, LPSSLTIMEOUTCALLBACK pCallback); |
17 | 17 | void SetSSLConfirmCallback(LPSSLCONFIRMCALLBACK pCallback); |
18 | 18 | BOOL IsHostNameMatched(LPCSTR HostName, LPCSTR CommonName); |
19 | -BOOL AttachSSL(SOCKET s, SOCKET parent); | |
19 | +BOOL AttachSSL(SOCKET s, SOCKET parent, BOOL* pbAborted); | |
20 | 20 | BOOL DetachSSL(SOCKET s); |
21 | 21 | BOOL IsSSLAttached(SOCKET s); |
22 | 22 | SOCKET socketS(int af, int type, int protocol); |
@@ -395,6 +395,8 @@ static LRESULT CALLBACK HistEditBoxWndProc(HWND hWnd, UINT message, WPARAM wPara | ||
395 | 395 | } |
396 | 396 | else |
397 | 397 | { |
398 | + // 同時接続対応 | |
399 | + CancelFlg = NO; | |
398 | 400 | SendMessage(hWndDirRemoteEdit, WM_GETTEXT, FMAX_PATH+1, (LPARAM)Tmp); |
399 | 401 | if(CheckClosedAndReconnect() == FFFTP_SUCCESS) |
400 | 402 | { |