• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

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

Loweynet


Commit MetaInfo

Revisão0753f12ff930efe77518679bf9523cb63efbb7f7 (tree)
Hora2012-01-25 22:19:55
Autors_kawamoto <s_kawamoto@user...>
Commiters_kawamoto

Mensagem de Log

Fix bugs of simultaneous connection.
Change default settings for simultaneous connection.
Fix bugs of handling errors of transferring.

Mudança Sumário

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
@@ -1837,7 +1837,8 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
18371837 // 同時接続対応
18381838 void RemoveReceivedData(SOCKET s);
18391839 int CheckClosedAndReconnect(void);
1840-void CheckAllEventClosed(void);
1840+// 同時接続対応
1841+int CheckClosedAndReconnectTrnSkt(SOCKET *Skt, int *CancelCheckWork);
18411842
18421843 /*===== updatebell.c =====*/
18431844
--- a/getput.c
+++ b/getput.c
@@ -753,40 +753,40 @@ static ULONG WINAPI TransferThread(void *Dummy)
753753 {
754754 if(TransPacketBase && NewCmdSkt != INVALID_SOCKET && ThreadCount < AskMaxThreadCount())
755755 {
756+ ReleaseMutex(hListAccMutex);
756757 if(TrnSkt == INVALID_SOCKET || NewCmdSkt != CmdSkt)
757- {
758- ReleaseMutex(hListAccMutex);
759758 ReConnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]);
760- // 同時ログイン数制限対策
761- if(TrnSkt != INVALID_SOCKET)
762- LastUsed = timeGetTime();
763- else
764- {
765- // 同時ログイン数制限に引っかかった可能性あり
766- // 負荷を下げるために約10秒間待機
767- i = 10000;
768- while(NewCmdSkt != CmdSkt && i > 0)
769- {
770- BackgrndMessageProc();
771- Sleep(1);
772- i--;
773- }
774- }
775-// WaitForSingleObject(hListAccMutex, INFINITE);
776- while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
759+ else
760+ CheckClosedAndReconnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]);
761+ // 同時ログイン数制限対策
762+ if(TrnSkt != INVALID_SOCKET)
763+ LastUsed = timeGetTime();
764+ else
765+ {
766+ // 同時ログイン数制限に引っかかった可能性あり
767+ // 負荷を下げるために約10秒間待機
768+ i = 10000;
769+ while(NewCmdSkt != CmdSkt && i > 0)
777770 {
778771 BackgrndMessageProc();
779772 Sleep(1);
773+ i--;
780774 }
781775 }
776+// WaitForSingleObject(hListAccMutex, INFINITE);
777+ while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT)
778+ {
779+ BackgrndMessageProc();
780+ Sleep(1);
781+ }
782782 }
783783 else
784784 {
785785 if(TrnSkt != INVALID_SOCKET)
786786 {
787787 // 同時ログイン数制限対策
788- // 10秒間は再利用を許可
789- if(timeGetTime() - LastUsed > 10000)
788+ // 60秒間使用されなければログアウト
789+ if(timeGetTime() - LastUsed > 60000)
790790 {
791791 ReleaseMutex(hListAccMutex);
792792 SendData(TrnSkt, "QUIT\r\n", 6, 0, &Canceled[ThreadCount]);
@@ -1305,7 +1305,8 @@ int DoDownLoad(SOCKET cSkt, TRANSPACKET *Pkt, int DirList, int *CancelCheckWork)
13051305 {
13061306 iRetCode = 500;
13071307 SetTaskMsg(MSGJPN085, GetFileName(Pkt->LocalFile));
1308- DispDownloadFinishMsg(Pkt, iRetCode);
1308+ // エラーによってはダイアログが表示されない場合があるバグ対策
1309+// DispDownloadFinishMsg(Pkt, iRetCode);
13091310 }
13101311 else if(Pkt->Mode != EXIST_IGNORE)
13111312 {
@@ -1352,6 +1353,8 @@ int DoDownLoad(SOCKET cSkt, TRANSPACKET *Pkt, int DirList, int *CancelCheckWork)
13521353 SetTaskMsg(MSGJPN089, Pkt->RemoteFile);
13531354 iRetCode = 200;
13541355 }
1356+ // エラーによってはダイアログが表示されない場合があるバグ対策
1357+ DispDownloadFinishMsg(Pkt, iRetCode);
13551358 return(iRetCode);
13561359 }
13571360
@@ -1466,7 +1469,8 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
14661469 iRetCode = 500;
14671470 SetErrorMsg(MSGJPN279);
14681471 }
1469- DispDownloadFinishMsg(Pkt, iRetCode);
1472+ // エラーによってはダイアログが表示されない場合があるバグ対策
1473+// DispDownloadFinishMsg(Pkt, iRetCode);
14701474
14711475 return(iRetCode);
14721476 }
@@ -1563,7 +1567,8 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
15631567 else
15641568 SetErrorMsg(Buf);
15651569
1566- DispDownloadFinishMsg(Pkt, iRetCode);
1570+ // エラーによってはダイアログが表示されない場合があるバグ対策
1571+// DispDownloadFinishMsg(Pkt, iRetCode);
15671572
15681573 return(iRetCode);
15691574 }
@@ -2600,7 +2605,8 @@ static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt)
26002605 SetTaskMsg(MSGJPN105, Pkt->LocalFile);
26012606 iRetCode = 500;
26022607 Pkt->Abort = ABORT_ERROR;
2603- DispUploadFinishMsg(Pkt, iRetCode);
2608+ // エラーによってはダイアログが表示されない場合があるバグ対策
2609+// DispUploadFinishMsg(Pkt, iRetCode);
26042610 }
26052611 }
26062612 else
@@ -2609,6 +2615,8 @@ static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt)
26092615 SetTaskMsg(MSGJPN107, Pkt->LocalFile);
26102616 iRetCode = 200;
26112617 }
2618+ // エラーによってはダイアログが表示されない場合があるバグ対策
2619+ DispUploadFinishMsg(Pkt, iRetCode);
26122620 return(iRetCode);
26132621 }
26142622
@@ -2737,7 +2745,8 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
27372745 SetErrorMsg(MSGJPN279);
27382746 iRetCode = 500;
27392747 }
2740- DispUploadFinishMsg(Pkt, iRetCode);
2748+ // エラーによってはダイアログが表示されない場合があるバグ対策
2749+// DispUploadFinishMsg(Pkt, iRetCode);
27412750
27422751 return(iRetCode);
27432752 }
@@ -2854,7 +2863,8 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
28542863 else
28552864 SetErrorMsg(Buf);
28562865
2857- DispUploadFinishMsg(Pkt, iRetCode);
2866+ // エラーによってはダイアログが表示されない場合があるバグ対策
2867+// DispUploadFinishMsg(Pkt, iRetCode);
28582868
28592869 return(iRetCode);
28602870 }
--- a/hostman.c
+++ b/hostman.c
@@ -1344,7 +1344,7 @@ void CopyDefaultHost(HOSTDATA *Set)
13441344 strcpy(Set->PrivateKey, "");
13451345 // 同時接続対応
13461346 Set->MaxThreadCount = 1;
1347- Set->ReuseCmdSkt = NO;
1347+ Set->ReuseCmdSkt = YES;
13481348 Set->NoDisplayUI = NO;
13491349 // MLSD対応
13501350 Set->Feature = 0;
--- a/mbswrapper.c
+++ b/mbswrapper.c
@@ -699,10 +699,28 @@ END_ROUTINE
699699 ATOM RegisterClassExM(CONST WNDCLASSEXA * v0)
700700 {
701701 ATOM r = 0;
702+ wchar_t* pw0 = NULL;
703+ wchar_t* pw1 = NULL;
704+ WNDCLASSEXW a0;
702705 START_ROUTINE
703- // WNDPROCがShift_JIS用であるため
704- r = RegisterClassExA(v0);
706+ a0.cbSize = sizeof(WNDCLASSEXW);
707+ a0.style = v0->style;
708+ a0.lpfnWndProc = v0->lpfnWndProc;
709+ a0.cbClsExtra = v0->cbClsExtra;
710+ a0.cbWndExtra = v0->cbWndExtra;
711+ a0.hInstance = v0->hInstance;
712+ a0.hIcon = v0->hIcon;
713+ a0.hCursor = v0->hCursor;
714+ a0.hbrBackground = v0->hbrBackground;
715+ pw0 = DuplicateMtoW(v0->lpszMenuName, -1);
716+ a0.lpszMenuName = pw0;
717+ pw1 = DuplicateMtoW(v0->lpszClassName, -1);
718+ a0.lpszClassName = pw1;
719+ a0.hIconSm = v0->hIconSm;
720+ r = RegisterClassExW(&a0);
705721 END_ROUTINE
722+ FreeDuplicatedString(pw0);
723+ FreeDuplicatedString(pw1);
706724 return r;
707725 }
708726
@@ -725,7 +743,6 @@ LONG GetWindowLongM(HWND hWnd, int nIndex)
725743 {
726744 LONG r = 0;
727745 START_ROUTINE
728- // WNDPROCがShift_JIS用であるため
729746 if(IsWindowUnicode(hWnd))
730747 r = GetWindowLongW(hWnd, nIndex);
731748 else
@@ -738,7 +755,6 @@ LONG SetWindowLongM(HWND hWnd, int nIndex, LONG dwNewLong)
738755 {
739756 LONG r = 0;
740757 START_ROUTINE
741- // WNDPROCがShift_JIS用であるため
742758 if(IsWindowUnicode(hWnd))
743759 r = SetWindowLongW(hWnd, nIndex, dwNewLong);
744760 else
@@ -751,7 +767,6 @@ LONG_PTR GetWindowLongPtrM(HWND hWnd, int nIndex)
751767 {
752768 LONG_PTR r = 0;
753769 START_ROUTINE
754- // WNDPROCがShift_JIS用であるため
755770 if(IsWindowUnicode(hWnd))
756771 r = GetWindowLongPtrW(hWnd, nIndex);
757772 else
@@ -764,7 +779,6 @@ LONG_PTR SetWindowLongPtrM(HWND hWnd, int nIndex, LONG_PTR dwNewLong)
764779 {
765780 LONG_PTR r = 0;
766781 START_ROUTINE
767- // WNDPROCがShift_JIS用であるため
768782 if(IsWindowUnicode(hWnd))
769783 r = SetWindowLongPtrW(hWnd, nIndex, dwNewLong);
770784 else
@@ -777,7 +791,6 @@ LRESULT DefWindowProcM(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
777791 {
778792 LRESULT r = 0;
779793 START_ROUTINE
780- // WNDPROCがShift_JIS用であるため
781794 if(IsWindowUnicode(hWnd))
782795 r = DefWindowProcW(hWnd, Msg, wParam, lParam);
783796 else
@@ -790,7 +803,6 @@ LRESULT CallWindowProcM(WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wPara
790803 {
791804 LRESULT r = 0;
792805 START_ROUTINE
793- // WNDPROCがShift_JIS用であるため
794806 if(IsWindowUnicode(hWnd))
795807 r = CallWindowProcW(lpPrevWndFunc, hWnd, Msg, wParam, lParam);
796808 else
@@ -1978,6 +1990,7 @@ BOOL ChooseFontM(LPCHOOSEFONTA v0)
19781990 {
19791991 BOOL r = FALSE;
19801992 wchar_t* pw0 = NULL;
1993+ wchar_t* pw1 = NULL;
19811994 CHOOSEFONTW a0;
19821995 LOGFONTW* pwlf;
19831996 START_ROUTINE
@@ -2010,9 +2023,11 @@ START_ROUTINE
20102023 a0.rgbColors = v0->rgbColors;
20112024 a0.lCustData = v0->lCustData;
20122025 a0.lpfnHook = v0->lpfnHook;
2013- a0.lpTemplateName = DuplicateMtoW(v0->lpTemplateName, -1);
2026+ pw0 = DuplicateMtoW(v0->lpTemplateName, -1);
2027+ a0.lpTemplateName = pw0;
20142028 a0.hInstance = v0->hInstance;
2015- a0.lpszStyle = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);
2029+ pw1 = DuplicateMtoWBuffer(v0->lpszStyle, -1, LF_FACESIZE * 4);
2030+ a0.lpszStyle = pw1;
20162031 a0.nFontType = v0->nFontType;
20172032 a0.nSizeMin = v0->nSizeMin;
20182033 a0.nSizeMax = v0->nSizeMax;
@@ -2036,15 +2051,14 @@ START_ROUTINE
20362051 TerminateStringM(v0->lpLogFont->lfFaceName, LF_FACESIZE);
20372052 }
20382053 v0->rgbColors = a0.rgbColors;
2039- WtoM(v0->lpszStyle, LF_FACESIZE, a0.lpszStyle, -1);
2054+ WtoM(v0->lpszStyle, LF_FACESIZE, pw1, -1);
20402055 TerminateStringM(v0->lpszStyle, LF_FACESIZE);
20412056 v0->nFontType = a0.nFontType;
20422057 if(pwlf)
20432058 free(pwlf);
2044- FreeDuplicatedString((void*)a0.lpTemplateName);
2045- FreeDuplicatedString(a0.lpszStyle);
20462059 END_ROUTINE
20472060 FreeDuplicatedString(pw0);
2061+ FreeDuplicatedString(pw1);
20482062 return r;
20492063 }
20502064
--- a/registry.c
+++ b/registry.c
@@ -960,6 +960,12 @@ int LoadRegistory(void)
960960 // 同時接続対応
961961 ReadIntValueFromReg(hKey5, "ThreadCount", &Host.MaxThreadCount);
962962 ReadIntValueFromReg(hKey5, "ReuseCmdSkt", &Host.ReuseCmdSkt);
963+ // 1.98d以前で同時接続数が1より大きい場合はソケットの再利用なし
964+ if(Version < 1985)
965+ {
966+ if(Host.MaxThreadCount > 1)
967+ Host.ReuseCmdSkt = NO;
968+ }
963969 // MLSD対応
964970 ReadIntValueFromReg(hKey5, "MLSD", &Host.UseMLSD);
965971 // IPv6対応
--- a/socket.c
+++ b/socket.c
@@ -1225,3 +1225,19 @@ int CheckClosedAndReconnect(void)
12251225
12261226
12271227
1228+// 同時接続対応
1229+int CheckClosedAndReconnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)
1230+{
1231+ int Error;
1232+ int Sts;
1233+
1234+//SetTaskMsg("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
1235+
1236+ Sts = FFFTP_SUCCESS;
1237+ if(AskAsyncDone(*Skt, &Error, FD_CLOSE) == YES)
1238+ {
1239+ Sts = ReConnectTrnSkt(Skt, CancelCheckWork);
1240+ }
1241+ return(Sts);
1242+}
1243+
--- a/socketwrapper.c
+++ b/socketwrapper.c
@@ -1045,6 +1045,7 @@ BOOL LoadPuTTY()
10451045 // ビルドしたputty.dllに合わせてSHA1ハッシュ値を変更すること
10461046 RegisterTrustedModuleSHA1Hash("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
10471047 #endif
1048+ // デバッグ用
10481049 // g_hPuTTY = LoadLibrary("putty.dll");
10491050 g_hPuTTY = LoadLibrary("C:\\SourceForge\\ffftp\\putty\\Debug\\PuTTY.dll");
10501051 if(!g_hPuTTY