• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

FFFTPのソースコードです。


Commit MetaInfo

Revisiónffd9ce66d16fb452725a6bb1b5d1ef848fcd2628 (tree)
Tiempo2011-12-03 22:33:21
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Log Message

Fix bugs of simultaneous connection.
Fix bugs of parsing MLSD response.

Cambiar Resumen

Diferencia incremental

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
@@ -954,6 +954,7 @@ typedef struct {
954954 // 同時接続対応
955955 int MaxThreadCount; /* 同時接続数 */
956956 int ReuseCmdSkt; /* メインウィンドウのソケットを再利用する (YES/NO) */
957+ int NoDisplayUI; /* UIを表示しない (YES/NO) */
957958 // FEAT対応
958959 int Feature; /* 利用可能な機能のフラグ (FEATURE_xxx) */
959960 // MLSD対応
--- a/connect.c
+++ b/connect.c
@@ -1088,6 +1088,8 @@ int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)
10881088 HostData.CurNameKanjiCode = HostData.NameKanjiCode;
10891089 // IPv6対応
10901090 HostData.CurNetType = HostData.NetType;
1091+ // 同時接続対応
1092+ HostData.NoDisplayUI = YES;
10911093 // 暗号化通信対応
10921094 // 同時接続対応
10931095 // if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)
@@ -1500,8 +1502,11 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15001502 else
15011503 {
15021504 Anony = NO;
1505+ // 同時接続対応
1506+// if((strlen(User) != 0) ||
1507+// (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
15031508 if((strlen(User) != 0) ||
1504- (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
1509+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))
15051510 {
15061511 if(Anony == YES)
15071512 {
@@ -1567,8 +1572,11 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15671572 // if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)
15681573 if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", Buf) / 100) == FTP_CONTINUE)
15691574 {
1575+ // 同時接続対応
1576+// if((strlen(Pass) != 0) ||
1577+// (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
15701578 if((strlen(Pass) != 0) ||
1571- (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
1579+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))
15721580 {
15731581 CheckOneTimePassword(Pass, Reply, Security);
15741582
@@ -1582,7 +1590,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15821590 if(Sts == FTP_ERROR)
15831591 {
15841592 strcpy(Pass, "");
1585- if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)
1593+ // 同時接続対応
1594+// if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)
1595+ if(HostData->NoDisplayUI == NO && InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)
15861596 Continue = YES;
15871597 else
15881598 DoPrintf("No password specified.");
@@ -1590,8 +1600,11 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
15901600 }
15911601 else if(Sts == FTP_CONTINUE)
15921602 {
1603+ // 同時接続対応
1604+// if((strlen(Acct) != 0) ||
1605+// (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
15931606 if((strlen(Acct) != 0) ||
1594- (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))
1607+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))
15951608 {
15961609 // 同時接続対応
15971610 // Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;
@@ -1624,7 +1637,9 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
16241637 }
16251638 else if((SavePass == YES) && (ReInPass == YES))
16261639 {
1627- if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)
1640+ // 同時接続対応
1641+// if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)
1642+ if(HostData->NoDisplayUI == NO && DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)
16281643 SetHostPassword(AskCurrentHost(), Pass);
16291644 }
16301645 }
--- a/filelist.c
+++ b/filelist.c
@@ -4911,6 +4911,7 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
49114911 sTime.wHour = atoi_n(Value + 8, 2);
49124912 sTime.wMinute = atoi_n(Value + 10, 2);
49134913 sTime.wSecond = atoi_n(Value + 12, 2);
4914+ sTime.wMilliseconds = 0;
49144915 SystemTimeToFileTime(&sTime, Time);
49154916 // SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());
49164917 *InfoExist |= FINFO_DATE | FINFO_TIME;
--- a/getput.c
+++ b/getput.c
@@ -697,6 +697,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
697697 SOCKET TrnSkt;
698698 RECT WndRect;
699699 int i;
700+ DWORD LastUsed;
700701
701702 hWndTrans = NULL;
702703 Down = NO;
@@ -756,10 +757,13 @@ static ULONG WINAPI TransferThread(void *Dummy)
756757 {
757758 ReleaseMutex(hListAccMutex);
758759 ReConnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]);
759- // 同時ログイン数制限に引っかかった可能性あり
760- // 負荷を下げるためにしばらく待機
761- if(TrnSkt == INVALID_SOCKET)
760+ // 同時ログイン数制限対策
761+ if(TrnSkt != INVALID_SOCKET)
762+ LastUsed = timeGetTime();
763+ else
762764 {
765+ // 同時ログイン数制限に引っかかった可能性あり
766+ // 負荷を下げるために約10秒間待機
763767 i = 10000;
764768 while(NewCmdSkt != CmdSkt && i > 0)
765769 {
@@ -780,15 +784,20 @@ static ULONG WINAPI TransferThread(void *Dummy)
780784 {
781785 if(TrnSkt != INVALID_SOCKET)
782786 {
783- ReleaseMutex(hListAccMutex);
784- SendData(TrnSkt, "QUIT\r\n", 6, 0, &Canceled[ThreadCount]);
785- DoClose(TrnSkt);
786- TrnSkt = INVALID_SOCKET;
787-// WaitForSingleObject(hListAccMutex, INFINITE);
788- while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
787+ // 同時ログイン数制限対策
788+ // 10秒間は再利用を許可
789+ if(timeGetTime() - LastUsed > 10000)
789790 {
790- BackgrndMessageProc();
791- Sleep(1);
791+ ReleaseMutex(hListAccMutex);
792+ SendData(TrnSkt, "QUIT\r\n", 6, 0, &Canceled[ThreadCount]);
793+ DoClose(TrnSkt);
794+ TrnSkt = INVALID_SOCKET;
795+// WaitForSingleObject(hListAccMutex, INFINITE);
796+ while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
797+ {
798+ BackgrndMessageProc();
799+ Sleep(1);
800+ }
792801 }
793802 }
794803 }
@@ -1150,6 +1159,7 @@ static ULONG WINAPI TransferThread(void *Dummy)
11501159 SendMessage(hWndTrans, WM_SET_PACKET, 0, 0);
11511160 if(Pos != NULL)
11521161 strcpy(Pos->Cmd, "");
1162+ LastUsed = timeGetTime();
11531163 }
11541164 // else
11551165 else if(TransPacketBase == NULL)
--- a/hostman.c
+++ b/hostman.c
@@ -1345,6 +1345,7 @@ void CopyDefaultHost(HOSTDATA *Set)
13451345 // 同時接続対応
13461346 Set->MaxThreadCount = 1;
13471347 Set->ReuseCmdSkt = NO;
1348+ Set->NoDisplayUI = NO;
13481349 // MLSD対応
13491350 Set->Feature = 0;
13501351 Set->UseMLSD = YES;