OSDN Git Service

Add conditions to send dummy commands for keep alive.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Thu, 6 Sep 2012 08:50:44 +0000 (17:50 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Thu, 6 Sep 2012 08:50:44 +0000 (17:50 +0900)
Set the interval of dummy commands to 60 seconds by default.

FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
common.h
ftpproc.c
getput.c
hostman.c
main.c
remote.c

index 93a0c74..93fc720 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 160bf08..20751fc 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index c424585..8fa750a 100644 (file)
--- a/common.h
+++ b/common.h
@@ -1611,7 +1611,7 @@ void ReformToVMSstylePathName(char *Path);
 void ReformVMSDirName(char *DirName, int Flg);\r
 #endif\r
 // 自動切断対策\r
-void NoopProc(void);\r
+void NoopProc(int Force);\r
 \r
 /*===== local.c =====*/\r
 \r
@@ -1654,7 +1654,9 @@ int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork);
 #if defined(HAVE_TANDEM)\r
 void SwitchOSSProc(void);\r
 #endif\r
-int CommandProcCmd(char *Reply, char *fmt, ...);\r
+// 同時接続対応\r
+//int CommandProcCmd(char *Reply, char *fmt, ...);\r
+int CommandProcCmd(char *Reply, int* CancelCheckWork, char *fmt, ...);\r
 // 同時接続対応\r
 //int CommandProcTrn(char *Reply, char *fmt, ...);\r
 int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...);\r
index 3554389..b3a99c5 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -3731,11 +3731,11 @@ static int RenameUnuseableName(char *Fname)
 \r
 // 自動切断対策\r
 // NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
-void NoopProc(void)\r
+void NoopProc(int Force)\r
 {\r
        int CancelCheckWork;\r
        CancelCheckWork = NO;\r
-       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       if(Force == YES || (AskConnecting() == YES && AskUserOpeDisabled() == NO))\r
        {\r
                if(AskReuseCmdSkt() == NO || AskShareProh() == YES || AskTransferNow() == NO)\r
                {\r
index fb0e1f6..3daa3e6 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -184,6 +184,8 @@ extern int FolderAttr;
 extern int FolderAttrNum;\r
 // 同時接続対応\r
 extern int SendQuit;\r
+// 自動切断対策\r
+extern time_t LastDataConnectionTime;\r
 \r
 \r
 /*----- ファイル転送スレッドを起動する ----------------------------------------\r
@@ -2260,6 +2262,8 @@ static int DownloadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
        if(shutdown(dSkt, 1) != 0)\r
                ReportWSError("shutdown", WSAGetLastError());\r
 \r
+       // 自動切断対策\r
+       LastDataConnectionTime = time(NULL);\r
        DoClose(dSkt);\r
 \r
        if(ForceAbort == NO)\r
@@ -3535,6 +3539,8 @@ static int UploadFile(TRANSPACKET *Pkt, SOCKET dSkt)
                Pkt->Abort = ABORT_ERROR;\r
        }\r
 \r
+       // 自動切断対策\r
+       LastDataConnectionTime = time(NULL);\r
        if(shutdown(dSkt, 1) != 0)\r
                ReportWSError("shutdown", WSAGetLastError());\r
 \r
index fc6117a..e5f373d 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1356,7 +1356,7 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->NetType = NTYPE_AUTO;\r
        Set->CurNetType = NTYPE_AUTO;\r
        // 自動切断対策\r
-       Set->NoopInterval = 0;\r
+       Set->NoopInterval = 60;\r
        // 再転送対応\r
        Set->TransferErrorMode = EXIST_OVW;\r
        Set->TransferErrorNotify = YES;\r
diff --git a/main.c b/main.c
index dc92e4e..1b5d7e8 100644 (file)
--- a/main.c
+++ b/main.c
@@ -35,6 +35,8 @@
 #include <stdlib.h>\r
 #include <string.h>\r
 #include <mbstring.h>\r
+// 自動切断対策\r
+#include <time.h>\r
 #include <malloc.h>\r
 #include <windowsx.h>\r
 #include <commctrl.h>\r
@@ -248,6 +250,9 @@ int DispFileIcon = NO;
 int MakeAllDir = YES;\r
 // UTF-8対応\r
 int LocalKanjiCode = KANJI_SJIS;\r
+// 自動切断対策\r
+int NoopEnable = NO;\r
+time_t LastDataConnectionTime = 0;\r
 \r
 \r
 \r
@@ -939,9 +944,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                                SendMessage(GetLocalHwnd(), LVM_ENSUREVISIBLE, (WPARAM)Pos, (LPARAM)TRUE);\r
                                        }\r
                                }\r
-                               break;\r
-                       case 2:\r
-                               NoopProc();\r
+                               if(NoopEnable == YES && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+                                       NoopProc(NO);\r
                                break;\r
                        }\r
                        break;\r
@@ -955,20 +959,18 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                        {\r
                                case MENU_CONNECT :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 2);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_CON, -1);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_CONNECT_NUM :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 2);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_CON, (int)lParam);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        if(AskConnecting() == YES)\r
                                        {\r
                                                if(HIWORD(wParam) & OPT_MIRROR)\r
@@ -990,20 +992,18 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
 \r
                                case MENU_SET_CONNECT :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 2);\r
+                                       NoopEnable = NO;\r
                                        ConnectProc(DLG_TYPE_SET, -1);\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_QUICK :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 2);\r
+                                       NoopEnable = NO;\r
                                        QuickConnectProc();\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_DISCONNECT :\r
@@ -1038,11 +1038,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                case MENU_HIST_19 :\r
                                case MENU_HIST_20 :\r
                                        // 自動切断対策\r
-                                       KillTimer(hWnd, 2);\r
+                                       NoopEnable = NO;\r
                                        HistoryConnectProc(LOWORD(wParam));\r
                                        // 自動切断対策\r
-                                       if(AskNoopInterval() > 0)\r
-                                               SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL);\r
+                                       NoopEnable = YES;\r
                                        break;\r
 \r
                                case MENU_UPDIR :\r
index 30a75fe..2692f29 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -66,6 +66,8 @@ extern int SendQuit;
 \r
 // 同時接続対応\r
 extern int CancelFlg;\r
+// 自動切断対策\r
+extern time_t LastDataConnectionTime;\r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -96,13 +98,19 @@ int DoCWD(char *Path, int Disp, int ForceGet, int ErrorBell)
        Sts = FTP_COMPLETE * 100;\r
 \r
        if(strcmp(Path, "..") == 0)\r
-               Sts = CommandProcCmd(NULL, "CDUP");\r
+               // 同時接続対応\r
+//             Sts = CommandProcCmd(NULL, "CDUP");\r
+               Sts = CommandProcCmd(NULL, &CancelFlg, "CDUP");\r
        else if(strcmp(Path, "") != 0)\r
        {\r
                if((AskHostType() != HTYPE_VMS) || (strchr(Path, '[') != NULL))\r
-                       Sts = CommandProcCmd(NULL, "CWD %s", Path);\r
+                       // 同時接続対応\r
+//                     Sts = CommandProcCmd(NULL, "CWD %s", Path);\r
+                       Sts = CommandProcCmd(NULL, &CancelFlg, "CWD %s", Path);\r
                else\r
-                       Sts = CommandProcCmd(NULL, "CWD [.%s]", Path);  /* VMS用 */\r
+                       // 同時接続対応\r
+//                     Sts = CommandProcCmd(NULL, "CWD [.%s]", Path);  /* VMS用 */\r
+                       Sts = CommandProcCmd(NULL, &CancelFlg, "CWD [.%s]", Path);      /* VMS用 */\r
        }\r
 \r
        if((Sts/100 >= FTP_CONTINUE) && (ErrorBell == YES))\r
@@ -220,12 +228,16 @@ static int DoPWD(char *Buf)
 \r
        if(PwdCommandType == PWD_XPWD)\r
        {\r
-               Sts = CommandProcCmd(Tmp, "XPWD");\r
+               // 同時接続対応\r
+//             Sts = CommandProcCmd(Tmp, "XPWD");\r
+               Sts = CommandProcCmd(Tmp, &CancelFlg, "XPWD");\r
                if(Sts/100 != FTP_COMPLETE)\r
                        PwdCommandType = PWD_PWD;\r
        }\r
        if(PwdCommandType == PWD_PWD)\r
-               Sts = CommandProcCmd(Tmp, "PWD");\r
+               // 同時接続対応\r
+//             Sts = CommandProcCmd(Tmp, "PWD");\r
+               Sts = CommandProcCmd(Tmp, &CancelFlg, "PWD");\r
 \r
        if(Sts/100 == FTP_COMPLETE)\r
        {\r
@@ -279,11 +291,17 @@ int DoMKD(char *Path)
 {\r
        int Sts;\r
 \r
-       Sts = CommandProcCmd(NULL, "MKD %s", Path);\r
+       // 同時接続対応\r
+//     Sts = CommandProcCmd(NULL, "MKD %s", Path);\r
+       Sts = CommandProcCmd(NULL, &CancelFlg, "MKD %s", Path);\r
 \r
        if(Sts/100 >= FTP_CONTINUE)\r
                SoundPlay(SND_ERROR);\r
 \r
+       // 自動切断対策\r
+       if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+               NoopProc(YES);\r
+\r
        return(Sts/100);\r
 }\r
 \r
@@ -301,11 +319,17 @@ int DoRMD(char *Path)
 {\r
        int Sts;\r
 \r
-       Sts = CommandProcCmd(NULL, "RMD %s", Path);\r
+       // 同時接続対応\r
+//     Sts = CommandProcCmd(NULL, "RMD %s", Path);\r
+       Sts = CommandProcCmd(NULL, &CancelFlg, "RMD %s", Path);\r
 \r
        if(Sts/100 >= FTP_CONTINUE)\r
                SoundPlay(SND_ERROR);\r
 \r
+       // 自動切断対策\r
+       if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+               NoopProc(YES);\r
+\r
        return(Sts/100);\r
 }\r
 \r
@@ -323,11 +347,17 @@ int DoDELE(char *Path)
 {\r
        int Sts;\r
 \r
-       Sts = CommandProcCmd(NULL, "DELE %s", Path);\r
+       // 同時接続対応\r
+//     Sts = CommandProcCmd(NULL, "DELE %s", Path);\r
+       Sts = CommandProcCmd(NULL, &CancelFlg, "DELE %s", Path);\r
 \r
        if(Sts/100 >= FTP_CONTINUE)\r
                SoundPlay(SND_ERROR);\r
 \r
+       // 自動切断対策\r
+       if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+               NoopProc(YES);\r
+\r
        return(Sts/100);\r
 }\r
 \r
@@ -346,7 +376,9 @@ int DoRENAME(char *Src, char *Dst)
 {\r
        int Sts;\r
 \r
-       Sts = CommandProcCmd(NULL, "RNFR %s", Src);\r
+       // 同時接続対応\r
+//     Sts = CommandProcCmd(NULL, "RNFR %s", Src);\r
+       Sts = CommandProcCmd(NULL, &CancelFlg, "RNFR %s", Src);\r
        if(Sts == 350)\r
                // 同時接続対応\r
 //             Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);\r
@@ -355,6 +387,10 @@ int DoRENAME(char *Src, char *Dst)
        if(Sts/100 >= FTP_CONTINUE)\r
                SoundPlay(SND_ERROR);\r
 \r
+       // 自動切断対策\r
+       if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+               NoopProc(YES);\r
+\r
        return(Sts/100);\r
 }\r
 \r
@@ -373,11 +409,17 @@ int DoCHMOD(char *Path, char *Mode)
 {\r
        int Sts;\r
 \r
-       Sts = CommandProcCmd(NULL, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
+       // 同時接続対応\r
+//     Sts = CommandProcCmd(NULL, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
+       Sts = CommandProcCmd(NULL, &CancelFlg, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
 \r
        if(Sts/100 >= FTP_CONTINUE)\r
                SoundPlay(SND_ERROR);\r
 \r
+       // 自動切断対策\r
+       if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+               NoopProc(YES);\r
+\r
        return(Sts/100);\r
 }\r
 \r
@@ -681,7 +723,9 @@ static int DoDirList(HWND hWnd, SOCKET cSkt, char *AddOpt, char *Path, int Num,
 *              コマンドコントロールソケットを使う\r
 *----------------------------------------------------------------------------*/\r
 \r
-int CommandProcCmd(char *Reply, char *fmt, ...)\r
+// 同時接続対応\r
+//int CommandProcCmd(char *Reply, char *fmt, ...)\r
+int CommandProcCmd(char *Reply, int* CancelCheckWork, char *fmt, ...)\r
 {\r
        va_list Args;\r
        char Cmd[1024];\r
@@ -703,7 +747,7 @@ int CommandProcCmd(char *Reply, char *fmt, ...)
 //             {\r
                        // 同時接続対応\r
 //                     Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);\r
-                       Sts = command(AskCmdCtrlSkt(), Reply, &CancelFlg, "%s", Cmd);\r
+                       Sts = command(AskCmdCtrlSkt(), Reply, CancelCheckWork, "%s", Cmd);\r
 //             }\r
 //     }\r
        return(Sts);\r