OSDN Git Service

Add support for dummy commands for keep alive.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Wed, 16 Nov 2011 05:26:37 +0000 (14:26 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Wed, 16 Nov 2011 05:26:37 +0000 (14:26 +0900)
Add UI for IPv6.
Modify documents.

22 files changed:
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/FFFTP-eng.rc
Resource_eng/resource.h
common.h
connect.c
doc/eng/FFFTP.txt
doc/eng/history.txt
doc/jpn/FFFTP.txt
doc/jpn/history.txt
ftpproc.c
getput.c
history.c
hostman.c
main.c
mesg-eng.h
mesg-eng.old.h
mesg-jpn.h
mesg-jpn.old.h
registry.c

index 99db118..9d18a0a 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index d7d320f..3953d38 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 2461492..154c397 100644 (file)
@@ -308,7 +308,7 @@ BEGIN
     PUSHBUTTON      "\83w\83\8b\83v",9,165,102,50,14\r
 END\r
 \r
-hset_main_dlg DIALOG  0, 0, 207, 139\r
+hset_main_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -626,7 +626,7 @@ BEGIN
     CONTROL         "\83z\83X\83g\88ê\97\97\82É\96¢\93o\98^\82Ì\83z\83X\83g\82ÍPASV\83\82\81[\83h\82ð\8eg\82¤(&V)",FIRE_PASV,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,122,197,10\r
 END\r
 \r
-hset_adv_dlg DIALOG  0, 0, 207, 139\r
+hset_adv_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -638,6 +638,8 @@ BEGIN
     PUSHBUTTON      "\95W\8f\80",HSET_PORT_NOR,30,66,25,13\r
     LTEXT           "\83A\83J\83E\83\93\83g(&C)",-1,7,87,65,8\r
     EDITTEXT        HSET_ACCOUNT,7,97,62,12,ES_AUTOHSCROLL\r
+    LTEXT           "\83l\83b\83g\83\8f\81[\83N\82Ì\8eí\97Þ(&N)",-1,7,115,81,8\r
+    COMBOBOX        HSET_NETTYPE,7,125,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
     LTEXT           "\83z\83X\83g\82Ì\83^\83C\83\80\83]\81[\83\93(&T)",-1,103,7,81,8\r
     COMBOBOX        HSET_TIMEZONE,103,17,71,102,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
     LTEXT           "\83Z\83L\83\85\83\8a\83e\83B(&Q)",-1,103,35,72,8\r
@@ -722,7 +724,7 @@ BEGIN
     EDITTEXT        UPDOWN_ERR_MSG,7,29,168,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
-hset_code_dlg DIALOGEX 0, 0, 207, 139\r
+hset_code_dlg DIALOGEX 0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x0\r
 BEGIN\r
@@ -982,7 +984,7 @@ BEGIN
     CTEXT           "\81i\8cv\8eZ\82É\8e\9e\8aÔ\82ª\82©\82©\82é\8fê\8d\87\82ª\82 \82è\82Ü\82·\81j",FSNOTIFY_TITLE,7,19,141,8\r
 END\r
 \r
-hset_adv2_dlg DIALOG  0, 0, 207, 139\r
+hset_adv2_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -1223,7 +1225,7 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,172,55,8,8\r
 END\r
 \r
-hset_dialup_dlg DIALOG  0, 0, 207, 139\r
+hset_dialup_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -1343,7 +1345,7 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,172,42,8,8\r
 END\r
 \r
-hset_crypt_dlg DIALOG  0, 0, 207, 139\r
+hset_crypt_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -1356,7 +1358,7 @@ BEGIN
     EDITTEXT        HSET_PRIVATE_KEY,7,79,193,44,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL\r
 END\r
 \r
-hset_adv3_dlg DIALOG  0, 0, 207, 139\r
+hset_adv3_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
@@ -1365,6 +1367,10 @@ BEGIN
     CONTROL         "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14\r
     LTEXT           "(1\81`4)",-1,102,10,31,8\r
     CONTROL         "\83\81\83C\83\93\83E\83B\83\93\83h\83E\82Ì\83\\83P\83b\83g\82ð\8dÄ\97\98\97p",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10\r
+    LTEXT           "\90Ú\91±\88Û\8e\9d\97p\83R\83}\83\93\83h\8eü\8aú",-1,7,44,84,8\r
+    EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
+    CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
+    LTEXT           "(0\81`300\95b\81F 0=\96³\8cø)",-1,122,44,76,8\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 50\r
@@ -1441,7 +1447,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     opt_user_dlg, DIALOG\r
@@ -1584,7 +1590,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     diskfull_dlg, DIALOG\r
@@ -1640,7 +1646,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     opt_trmode1_dlg, DIALOG\r
@@ -1784,7 +1790,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     cwderr_dlg, DIALOG\r
@@ -1928,7 +1934,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     rasreconnect_dlg, DIALOG\r
@@ -2008,7 +2014,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     hset_adv3_dlg, DIALOG\r
@@ -2016,7 +2022,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     savecrypt_dlg, DIALOG\r
index ed0bcb6..73c8472 100644 (file)
 #define HSET_THREAD_COUNT_SPN           1205\r
 #define HSET_UTF8BOM_CNV                1206\r
 #define HSET_REUSE_SOCKET               1207\r
+#define HSET_NOOP_INTERVAL              1208\r
+#define HSET_NOOP_INTERVAL_SPN          1209\r
+#define HSET_NETTYPE                    1210\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
 #define _APS_NEXT_COMMAND_VALUE         40176\r
-#define _APS_NEXT_CONTROL_VALUE         1208\r
+#define _APS_NEXT_CONTROL_VALUE         1211\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 5dd9fbf..4a8a85b 100644 (file)
@@ -308,7 +308,7 @@ BEGIN
     PUSHBUTTON      "Help",9,165,102,50,14\r
 END\r
 \r
-hset_main_dlg DIALOG  0, 0, 207, 139\r
+hset_main_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -631,7 +631,7 @@ BEGIN
     EDITTEXT        FIRE_DELIMIT,154,65,35,12,ES_AUTOHSCROLL\r
 END\r
 \r
-hset_adv_dlg DIALOG  0, 0, 207, 139\r
+hset_adv_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -643,6 +643,8 @@ BEGIN
     PUSHBUTTON      "Default",HSET_PORT_NOR,30,66,28,13\r
     LTEXT           "&Account",-1,7,87,65,8\r
     EDITTEXT        HSET_ACCOUNT,7,97,62,12,ES_AUTOHSCROLL\r
+    LTEXT           "&Network Type",-1,7,115,81,8\r
+    COMBOBOX        HSET_NETTYPE,7,125,83,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
     LTEXT           "Host &Timezone",-1,103,7,81,8\r
     COMBOBOX        HSET_TIMEZONE,103,17,83,102,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP\r
     LTEXT           "&Security",-1,103,35,72,8\r
@@ -729,7 +731,7 @@ BEGIN
     EDITTEXT        UPDOWN_ERR_MSG,7,32,153,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
-hset_code_dlg DIALOGEX 0, 0, 207, 139\r
+hset_code_dlg DIALOGEX 0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif", 0, 0, 0x0\r
 BEGIN\r
@@ -1003,7 +1005,7 @@ BEGIN
     CTEXT           "( This may take a few minutes. )",FSNOTIFY_TITLE,7,19,141,8\r
 END\r
 \r
-hset_adv2_dlg DIALOG  0, 0, 207, 139\r
+hset_adv2_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -1247,7 +1249,7 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,172,55,8,8\r
 END\r
 \r
-hset_dialup_dlg DIALOG  0, 0, 207, 139\r
+hset_dialup_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -1368,7 +1370,7 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,173,39,8,8\r
 END\r
 \r
-hset_crypt_dlg DIALOG  0, 0, 207, 139\r
+hset_crypt_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -1382,7 +1384,7 @@ BEGIN
     EDITTEXT        HSET_PRIVATE_KEY,7,79,193,44,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_VSCROLL | WS_HSCROLL\r
 END\r
 \r
-hset_adv3_dlg DIALOG  0, 0, 207, 139\r
+hset_adv3_dlg DIALOG  0, 0, 207, 155\r
 STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
 FONT 9, "MS Sans Serif"\r
 BEGIN\r
@@ -1391,6 +1393,10 @@ BEGIN
     CONTROL         "Spin1",HSET_THREAD_COUNT_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,89,7,9,14\r
     LTEXT           "(1 to 4 threads)",-1,102,10,53,8\r
     CONTROL         "Reuse socket of the main window",HSET_REUSE_SOCKET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,27,131,10\r
+    LTEXT           "Command for Keep Alive",-1,7,44,84,8\r
+    EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
+    CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
+    LTEXT           "(0 to 300sec: 0=Never)",-1,122,44,76,8\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 50\r
@@ -1467,7 +1473,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     opt_user_dlg, DIALOG\r
@@ -1610,7 +1616,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     diskfull_dlg, DIALOG\r
@@ -1666,7 +1672,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 204\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     opt_trmode1_dlg, DIALOG\r
@@ -1810,7 +1816,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     cwderr_dlg, DIALOG\r
@@ -1954,7 +1960,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     rasreconnect_dlg, DIALOG\r
@@ -2031,7 +2037,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     hset_adv3_dlg, DIALOG\r
@@ -2039,7 +2045,7 @@ BEGIN
         LEFTMARGIN, 7\r
         RIGHTMARGIN, 200\r
         TOPMARGIN, 7\r
-        BOTTOMMARGIN, 132\r
+        BOTTOMMARGIN, 148\r
     END\r
 \r
     savecrypt_dlg, DIALOG\r
index 477bfeb..828460d 100644 (file)
 #define HSET_THREAD_COUNT_SPN           1205\r
 #define HSET_UTF8BOM_CNV                1206\r
 #define HSET_REUSE_SOCKET               1207\r
+#define HSET_NOOP_INTERVAL              1208\r
+#define HSET_NOOP_INTERVAL_SPN          1209\r
+#define HSET_NETTYPE                    1210\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
 #define _APS_NEXT_COMMAND_VALUE         40176\r
-#define _APS_NEXT_CONTROL_VALUE         1208\r
+#define _APS_NEXT_CONTROL_VALUE         1211\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index aa0f07b..d194ab2 100644 (file)
--- a/common.h
+++ b/common.h
@@ -890,6 +890,11 @@ LIST_UNIX_70
 #define FEATURE_EPRT           0x00000004\r
 #define FEATURE_EPSV           0x00000008\r
 \r
+// IPv6対応\r
+#define NTYPE_AUTO                     0               /* 自動 */\r
+#define NTYPE_IPV4                     1               /* TCP/IPv4 */\r
+#define NTYPE_IPV6                     2               /* TCP/IPv6 */\r
+\r
 // 暗号化通信対応\r
 // REG_SECT_MAXの値を加味する必要がある\r
 #define MAX_CERT_CACHE_HASH 256\r
@@ -954,8 +959,10 @@ typedef struct {
        // MLSD対応\r
        int UseMLSD;                                            /* "MLSD"コマンドを使用する */\r
        // IPv6対応\r
-       int InetFamily;                                         /* IPv6接続かどうか (AF_INET/AF_INET6) */\r
-       int UseIPv6;                                            /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
+       int NetType;                                            /* ネットワークの種類 (NTYPE_xxx) */\r
+       int CurNetType;                                         /* 接続中のネットワークの種類 (NTYPE_xxx) */\r
+       // 自動切断対策\r
+       int NoopInterval;                                       /* 無意味なコマンドを送信する間隔(秒数、0で無効)*/\r
 } HOSTDATA;\r
 \r
 \r
@@ -1014,7 +1021,9 @@ typedef struct historydata {
        // MLSD対応\r
        int UseMLSD;                                            /* "MLSD"コマンドを使用する */\r
        // IPv6対応\r
-       int UseIPv6;                                            /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
+       int NetType;                                            /* ネットワークの種類 (NTYPE_xxx) */\r
+       // 自動切断対策\r
+       int NoopInterval;                                       /* NOOPコマンドを送信する間隔(秒数、0で無効)*/\r
        struct historydata *Next;\r
 } HISTORYDATA;\r
 \r
@@ -1450,8 +1459,9 @@ int AskHostFeature(void);
 // MLSD対応\r
 int AskUseMLSD(void);\r
 // IPv6対応\r
-int AskInetFamily(void);\r
-int AskUseIPv6(void);\r
+int AskCurNetType(void);\r
+// 自動切断対策\r
+int AskNoopInterval(void);\r
 \r
 /*===== cache.c =====*/\r
 \r
@@ -1500,6 +1510,8 @@ void ReformToVMSstylePathName(char *Path);
 #if defined(HAVE_OPENVMS)\r
 void ReformVMSDirName(char *DirName, int Flg);\r
 #endif\r
+// 自動切断対策\r
+void NoopProc(void);\r
 \r
 /*===== local.c =====*/\r
 \r
index e530013..c0937e3 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -160,6 +160,8 @@ void ConnectProc(int Type, int Num)
                CopyHostFromList(AskCurrentHost(), &CurHost);\r
                // UTF-8対応\r
                CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
+               // IPv6対応\r
+               CurHost.CurNetType = CurHost.NetType;\r
 \r
                if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS)\r
                {\r
@@ -285,6 +287,8 @@ void QuickConnectProc(void)
                CopyDefaultHost(&CurHost);\r
                // UTF-8対応\r
                CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
+               // IPv6対応\r
+               CurHost.CurNetType = CurHost.NetType;\r
                if(SplitUNCpath(Tmp, CurHost.HostAdrs, CurHost.RemoteInitDir, File, CurHost.UserName, CurHost.PassWord, &CurHost.Port) == FFFTP_SUCCESS)\r
                {\r
                        if(strlen(CurHost.UserName) == 0)\r
@@ -475,6 +479,8 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
                CurHost.KanaCnv = YES;                  /* とりあえず */\r
                // UTF-8対応\r
                CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
+               // IPv6対応\r
+               CurHost.CurNetType = CurHost.NetType;\r
 \r
                SetHostKanaCnvImm(CurHost.KanaCnv);\r
                SetHostKanjiCodeImm(CurHost.KanjiCode);\r
@@ -559,6 +565,8 @@ void HistoryConnectProc(int MenuCmd)
                CopyHistoryToHost(&Hist, &CurHost);\r
                // UTF-8対応\r
                CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
+               // IPv6対応\r
+               CurHost.CurNetType = CurHost.NetType;\r
 \r
                if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS)\r
                {\r
@@ -1074,6 +1082,8 @@ int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)
                HostData.UseSFTP = NO;\r
        // UTF-8対応\r
        HostData.CurNameKanjiCode = HostData.NameKanjiCode;\r
+       // IPv6対応\r
+       HostData.CurNetType = HostData.NetType;\r
        // 暗号化通信対応\r
        // 同時接続対応\r
 //     if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
@@ -1825,19 +1835,21 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork)
 {\r
        SOCKET Result;\r
        Result = INVALID_SOCKET;\r
-       switch(CurHost.InetFamily)\r
+       switch(CurHost.CurNetType)\r
        {\r
-       case AF_UNSPEC:\r
+       case NTYPE_AUTO:\r
                if((Result = connectsockIPv4(host, port, PreMsg, CancelCheckWork)) != INVALID_SOCKET)\r
-                       CurHost.InetFamily = AF_INET;\r
-               else if(CurHost.UseIPv6 == YES && (Result = connectsockIPv6(host, port, PreMsg, CancelCheckWork)) != INVALID_SOCKET)\r
-                       CurHost.InetFamily = AF_INET6;\r
+                       CurHost.CurNetType = NTYPE_IPV4;\r
+               else if((Result = connectsockIPv6(host, port, PreMsg, CancelCheckWork)) != INVALID_SOCKET)\r
+                       CurHost.CurNetType = NTYPE_IPV6;\r
                break;\r
-       case AF_INET:\r
+       case NTYPE_IPV4:\r
                Result = connectsockIPv4(host, port, PreMsg, CancelCheckWork);\r
+               CurHost.CurNetType = NTYPE_IPV4;\r
                break;\r
-       case AF_INET6:\r
+       case NTYPE_IPV6:\r
                Result = connectsockIPv6(host, port, PreMsg, CancelCheckWork);\r
+               CurHost.CurNetType = NTYPE_IPV6;\r
                break;\r
        }\r
        return Result;\r
@@ -2216,14 +2228,12 @@ SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork)
 {\r
        SOCKET Result;\r
        Result = INVALID_SOCKET;\r
-       switch(CurHost.InetFamily)\r
+       switch(CurHost.CurNetType)\r
        {\r
-       case AF_UNSPEC:\r
-               break;\r
-       case AF_INET:\r
+       case NTYPE_IPV4:\r
                Result = GetFTPListenSocketIPv4(ctrl_skt, CancelCheckWork);\r
                break;\r
-       case AF_INET6:\r
+       case NTYPE_IPV6:\r
                Result = GetFTPListenSocketIPv6(ctrl_skt, CancelCheckWork);\r
                break;\r
        }\r
@@ -2944,13 +2954,14 @@ int AskUseMLSD(void)
 }\r
 \r
 // IPv6対応\r
-int AskInetFamily(void)\r
+int AskCurNetType(void)\r
 {\r
-       return(CurHost.InetFamily);\r
+       return(CurHost.CurNetType);\r
 }\r
 \r
-int AskUseIPv6(void)\r
+// 自動切断対策\r
+int AskNoopInterval(void)\r
 {\r
-       return(CurHost.UseIPv6);\r
+       return(CurHost.NoopInterval);\r
 }\r
 \r
index 05bf22e..b4d4e3d 100644 (file)
@@ -45,17 +45,16 @@ Changes in Ver.1.99
 -- Fixed bugs of launching wrong files if correct ones contain no extensions.\r
 \r
 -- Internet Protocol Version 6 became available.\r
-   IPv6 will be used when name resolution for IPv4 is unavailable.\r
+   IPv6 will be used when name resolution for IPv4 is unavailable by default.\r
 \r
 -- Changed to detect encoding of strings in INI file automatically.\r
 \r
--- Added settings to reuse connection of the main window for transfer threads.\r
-   This may allow to transfer files successfully as with 1.97b or earlier,\r
-   but sometimes may cause some errors.\r
-\r
 -- Changed to verify SSL/TLS certificates with root CAs in FTPS connections.\r
    Please modify "ssl.pem" in PEM format if you want to update root CA list.\r
 \r
+-- Added a feature to send commands for keep alive.\r
+   This is disabled by default.\r
+\r
 \r
 Outline\r
 -------\r
index 571aa6c..3e49742 100644 (file)
@@ -17,13 +17,16 @@ Changes in Ver.1.99
 -- Fixed bugs of launching wrong files if correct ones contain no extensions.\r
 \r
 -- Internet Protocol Version 6 became available.\r
-   IPv6 will be used when name resolution for IPv4 is unavailable.\r
+   IPv6 will be used when name resolution for IPv4 is unavailable by default.\r
 \r
 -- Changed to detect encoding of strings in INI file automatically.\r
 \r
 -- Changed to verify SSL/TLS certificates with root CAs in FTPS connections.\r
    Please modify "ssl.pem" in PEM format if you want to update root CA list.\r
 \r
+-- Added a feature to send commands for keep alive.\r
+   This is disabled by default.\r
+\r
 Changes in Ver.1.98c\r
 --------------------\r
 \r
index d6338f7..4bc5754 100644 (file)
@@ -46,8 +46,8 @@ Ver 1.99
 \81@\83t\83@\83C\83\8b\82ª\95\\8e¦\82³\82ê\82é\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
 \r
 \81E\83z\83X\83g\82Æ\82Ì\90Ú\91±\82ÉInternet Protocol Version 6\81i\97ª\8fÌIPv6\81j\82ª\8eg\97p\82Å\82«\82é\r
-\81@\82æ\82¤\82É\82È\82è\82Ü\82µ\82½\81B\8f]\97\88\82ÌIPv4\82Å\96¼\91O\89ð\8c\88\82ª\82Å\82«\82È\82¢\8fê\8d\87\82ÉIPv6\82Å\90Ú\91±\82ð\r
-\81@\8e\8e\82Ý\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B\r
+\81@\82æ\82¤\82É\82È\82è\82Ü\82µ\82½\81B\83f\83t\83H\83\8b\83g\82Å\82Í\8f]\97\88\82ÌIPv4\82Å\96¼\91O\89ð\8c\88\82ª\82Å\82«\82È\82¢\8fê\8d\87\82É\r
+\81@IPv6\82Å\90Ú\91±\82ð\8e\8e\82Ý\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B\r
 \r
 \81EINI\83t\83@\83C\83\8b\82Ì\95\8e\9a\97ñ\82Ì\95\8e\9a\83R\81[\83h\82ð\8e©\93®\94»\95Ê\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
 \r
@@ -59,6 +59,9 @@ Ver 1.99
 \81@\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\83\8b\81[\83g\8fØ\96¾\8f\91\82ð\8dX\90V\82·\82é\82É\82Í\93¯\8d«\82Ì"ssl.pem"\r
 \81@\83t\83@\83C\83\8b\82ðPEM\8c`\8e®\82É\8f]\82Á\82Ä\8f\91\82«\8a·\82¦\82Ä\82­\82¾\82³\82¢\81B\r
 \r
+\81E\83z\83X\83g\82Æ\82Ì\90Ú\91±\82ð\88Û\8e\9d\82·\82é\82½\82ß\82É\88ê\92è\8e\9e\8aÔ\82²\82Æ\82É\83R\83}\83\93\83h\82ð\91\97\90M\82·\82é\8b@\94\\82ð\r
+\81@\92Ç\89Á\82µ\82Ü\82µ\82½\81B\82½\82¾\82µ\82±\82Ì\8b@\94\\82Í\83f\83t\83H\83\8b\83g\82Å\82Í\96³\8cø\82É\90Ý\92è\82³\82ê\82Ü\82·\81B\r
+\r
 \r
 Ver 1.96d\88È\91O\82Ö\96ß\82·\8fê\8d\87\r
 -----------------------\r
index d4105d6..621189a 100644 (file)
@@ -18,8 +18,8 @@ FFFTP
 \81@\83t\83@\83C\83\8b\82ª\95\\8e¦\82³\82ê\82é\83o\83O\82ð\8fC\90³\82µ\82Ü\82µ\82½\81B\r
 \r
 \81E\83z\83X\83g\82Æ\82Ì\90Ú\91±\82ÉInternet Protocol Version 6\81i\97ª\8fÌIPv6\81j\82ª\8eg\97p\82Å\82«\82é\r
-\81@\82æ\82¤\82É\82È\82è\82Ü\82µ\82½\81B\8f]\97\88\82ÌIPv4\82Å\96¼\91O\89ð\8c\88\82ª\82Å\82«\82È\82¢\8fê\8d\87\82ÉIPv6\82Å\90Ú\91±\82ð\r
-\81@\8e\8e\82Ý\82é\82æ\82¤\82É\82µ\82Ü\82µ\82½\81B\r
+\81@\82æ\82¤\82É\82È\82è\82Ü\82µ\82½\81B\83f\83t\83H\83\8b\83g\82Å\82Í\8f]\97\88\82ÌIPv4\82Å\96¼\91O\89ð\8c\88\82ª\82Å\82«\82È\82¢\8fê\8d\87\82É\r
+\81@IPv6\82Å\90Ú\91±\82ð\8e\8e\82Ý\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B\r
 \r
 \81EINI\83t\83@\83C\83\8b\82Ì\95\8e\9a\97ñ\82Ì\95\8e\9a\83R\81[\83h\82ð\8e©\93®\94»\95Ê\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\r
 \r
@@ -31,6 +31,9 @@ FFFTP
 \81@\82·\82é\82æ\82¤\82É\95Ï\8dX\82µ\82Ü\82µ\82½\81B\83\8b\81[\83g\8fØ\96¾\8f\91\82ð\8dX\90V\82·\82é\82É\82Í\93¯\8d«\82Ì"ssl.pem"\r
 \81@\83t\83@\83C\83\8b\82ðPEM\8c`\8e®\82É\8f]\82Á\82Ä\8f\91\82«\8a·\82¦\82Ä\82­\82¾\82³\82¢\81B\r
 \r
+\81E\83z\83X\83g\82Æ\82Ì\90Ú\91±\82ð\88Û\8e\9d\82·\82é\82½\82ß\82É\88ê\92è\8e\9e\8aÔ\82²\82Æ\82É\83R\83}\83\93\83h\82ð\91\97\90M\82·\82é\8b@\94\\82ð\r
+\81@\92Ç\89Á\82µ\82Ü\82µ\82½\81B\82½\82¾\82µ\82±\82Ì\8b@\94\\82Í\83f\83t\83H\83\8b\83g\82Å\82Í\96³\8cø\82É\90Ý\92è\82³\82ê\82Ü\82·\81B\r
+\r
 \81¡Ver 1.98c\r
 \r
 \81E\93ú\96{\8cê\83h\83\81\83C\83\93\96¼\82Ì\83z\83X\83g\82Ö\82Ì\90Ú\91±\8e\9e\82É\83A\83h\83\8c\83X\82ðPunycode\82Ö\95Ï\8a·\82µ\82Ä\82©\82ç\r
index 648488a..ee92ecb 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -3361,3 +3361,20 @@ static int RenameUnuseableName(char *Fname)
 }\r
 \r
 \r
+// 自動切断対策\r
+// NOOPコマンドでは効果が無いホストが多いためLISTコマンドを使用\r
+void NoopProc(void)\r
+{\r
+       int CancelCheckWork;\r
+       CancelCheckWork = NO;\r
+       if(AskConnecting() == YES && AskUserOpeDisabled() == NO)\r
+       {\r
+               if(AskReuseCmdSkt() == NO || AskShareProh() == YES)\r
+               {\r
+                       DisableUserOpe();\r
+                       DoDirListCmdSkt("", "", 999, &CancelCheckWork);\r
+                       EnableUserOpe();\r
+               }\r
+       }\r
+}\r
+\r
index efb1806..70d82fc 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -1341,13 +1341,13 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
                                        // IPv6対応\r
 //                                     iLength = sizeof(saSockAddr1);\r
 //                                     data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength);\r
-                                       switch(AskInetFamily())\r
+                                       switch(AskCurNetType())\r
                                        {\r
-                                       case AF_INET:\r
+                                       case NTYPE_IPV4:\r
                                                iLength=sizeof(saSockAddrIPv4);\r
                                                data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv4, (int *)&iLength);\r
                                                break;\r
-                                       case AF_INET6:\r
+                                       case NTYPE_IPV6:\r
                                                iLength=sizeof(saSockAddrIPv6);\r
                                                data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv6, (int *)&iLength);\r
                                                break;\r
@@ -1367,12 +1367,12 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
                                                // IPv6対応\r
 //                                             DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));\r
                                        {\r
-                                               switch(AskInetFamily())\r
+                                               switch(AskCurNetType())\r
                                                {\r
-                                               case AF_INET:\r
+                                               case NTYPE_IPV4:\r
                                                        DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddrIPv4.sin_addr), ntohs(saSockAddrIPv4.sin_port));\r
                                                        break;\r
-                                               case AF_INET6:\r
+                                               case NTYPE_IPV6:\r
                                                        DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet6_ntoa(saSockAddrIPv6.sin6_addr), ntohs(saSockAddrIPv6.sin6_port));\r
                                                        break;\r
                                                }\r
@@ -1443,12 +1443,12 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
 \r
        // IPv6対応\r
 //     iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV");\r
-       switch(AskInetFamily())\r
+       switch(AskCurNetType())\r
        {\r
-       case AF_INET:\r
+       case NTYPE_IPV4:\r
                iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV");\r
                break;\r
-       case AF_INET6:\r
+       case NTYPE_IPV6:\r
                iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "EPSV");\r
                break;\r
        }\r
@@ -2549,13 +2549,13 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
                                // IPv6対応\r
 //                             iLength=sizeof(saSockAddr1);\r
 //                             data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);\r
-                               switch(AskInetFamily())\r
+                               switch(AskCurNetType())\r
                                {\r
-                               case AF_INET:\r
+                               case NTYPE_IPV4:\r
                                        iLength=sizeof(saSockAddrIPv4);\r
                                        data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv4, (int *)&iLength);\r
                                        break;\r
-                               case AF_INET6:\r
+                               case NTYPE_IPV6:\r
                                        iLength=sizeof(saSockAddrIPv6);\r
                                        data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv6, (int *)&iLength);\r
                                        break;\r
@@ -2575,12 +2575,12 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
                                        // IPv6対応\r
 //                                     DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));\r
                                {\r
-                                       switch(AskInetFamily())\r
+                                       switch(AskCurNetType())\r
                                        {\r
-                                       case AF_INET:\r
+                                       case NTYPE_IPV4:\r
                                                DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddrIPv4.sin_addr), ntohs(saSockAddrIPv4.sin_port));\r
                                                break;\r
-                                       case AF_INET6:\r
+                                       case NTYPE_IPV6:\r
                                                DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet6_ntoa(saSockAddrIPv6.sin6_addr), ntohs(saSockAddrIPv6.sin6_port));\r
                                                break;\r
                                        }\r
@@ -2650,12 +2650,12 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
 //     iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled, "PASV");\r
        // IPv6対応\r
 //     iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "PASV");\r
-       switch(AskInetFamily())\r
+       switch(AskCurNetType())\r
        {\r
-       case AF_INET:\r
+       case NTYPE_IPV4:\r
                iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "PASV");\r
                break;\r
-       case AF_INET6:\r
+       case NTYPE_IPV6:\r
                iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "EPSV");\r
                break;\r
        }\r
@@ -3765,12 +3765,12 @@ static int GetAdrsAndPort(SOCKET Skt, char *Str, char *Adrs, int *Port, int Max)
 {\r
        int Result;\r
        Result = FFFTP_FAIL;\r
-       switch(AskInetFamily())\r
+       switch(AskCurNetType())\r
        {\r
-       case AF_INET:\r
+       case NTYPE_IPV4:\r
                Result = GetAdrsAndPortIPv4(Skt, Str, Adrs, Port, Max);\r
                break;\r
-       case AF_INET6:\r
+       case NTYPE_IPV6:\r
                Result = GetAdrsAndPortIPv6(Skt, Str, Adrs, Port, Max);\r
                break;\r
        }\r
index b17fe89..db993ac 100644 (file)
--- a/history.c
+++ b/history.c
@@ -238,7 +238,9 @@ static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New)
        // MLSD対応\r
        New->UseMLSD = Host->UseMLSD;\r
        // IPv6対応\r
-       New->UseIPv6 = Host->UseIPv6;\r
+       New->NetType = Host->NetType;\r
+       // 自動切断対策\r
+       New->NoopInterval = Host->NoopInterval;\r
        return;\r
 }\r
 \r
@@ -300,7 +302,9 @@ void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host)
        // MLSD対応\r
        Host->UseMLSD = Hist->UseMLSD;\r
        // IPv6対応\r
-       Host->UseIPv6 = Hist->UseIPv6;\r
+       Host->NetType = Hist->NetType;\r
+       // 自動切断対策\r
+       Host->NoopInterval = Hist->NoopInterval;\r
        return;\r
 }\r
 \r
index 8f99611..0567946 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1042,7 +1042,9 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
                // MLSD対応\r
                Set->UseMLSD = Pos->Set.UseMLSD;\r
                // IPv6対応\r
-               Set->UseIPv6 = Pos->Set.UseIPv6;\r
+               Set->NetType = Pos->Set.NetType;\r
+               // 自動切断対策\r
+               Set->NoopInterval = Pos->Set.NoopInterval;\r
                Sts = FFFTP_SUCCESS;\r
        }\r
        return(Sts);\r
@@ -1332,8 +1334,10 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->Feature = 0;\r
        Set->UseMLSD = YES;\r
        // IPv6対応\r
-       Set->InetFamily = AF_UNSPEC;\r
-       Set->UseIPv6 = YES;\r
+       Set->NetType = NTYPE_AUTO;\r
+       Set->CurNetType = NTYPE_AUTO;\r
+       // 自動切断対策\r
+       Set->NoopInterval = 0;\r
        return;\r
 }\r
 \r
@@ -1807,6 +1811,11 @@ static BOOL CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPA
                        SendDlgItemMessage(hDlg, HSET_SECURITY, CB_SETCURSEL, TmpHost.Security, 0);\r
                        SendDlgItemMessage(hDlg, HSET_INITCMD, EM_LIMITTEXT, INITCMD_LEN, 0);\r
                        SendDlgItemMessage(hDlg, HSET_INITCMD, WM_SETTEXT, 0, (LPARAM)TmpHost.InitCmd);\r
+                       // IPv6対応\r
+                       SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN332);\r
+                       SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN333);\r
+                       SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_ADDSTRING, 0, (LPARAM)MSGJPN334);\r
+                       SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_SETCURSEL, TmpHost.NetType, 0);\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -1823,6 +1832,8 @@ static BOOL CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPA
                                        TmpHost.TimeZone = SendDlgItemMessage(hDlg, HSET_TIMEZONE, CB_GETCURSEL, 0, 0) - 12;\r
                                        TmpHost.Security = SendDlgItemMessage(hDlg, HSET_SECURITY, CB_GETCURSEL, 0, 0);\r
                                        SendDlgItemMessage(hDlg, HSET_INITCMD, WM_GETTEXT, INITCMD_LEN+1, (LPARAM)TmpHost.InitCmd);\r
+                                       // IPv6対応\r
+                                       TmpHost.NetType = SendDlgItemMessage(hDlg, HSET_NETTYPE, CB_GETCURSEL, 0, 0);\r
                                        Apply = YES;\r
                                        break;\r
 \r
@@ -2221,6 +2232,9 @@ static BOOL CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                        SetDecimalText(hDlg, HSET_THREAD_COUNT, TmpHost.MaxThreadCount);\r
                        SendDlgItemMessage(hDlg, HSET_THREAD_COUNT_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(MAX_DATA_CONNECTION, 1));\r
                        SendDlgItemMessage(hDlg, HSET_REUSE_SOCKET, BM_SETCHECK, TmpHost.ReuseCmdSkt, 0);\r
+                       SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL, EM_LIMITTEXT, (WPARAM)3, 0);\r
+                       SetDecimalText(hDlg, HSET_NOOP_INTERVAL, TmpHost.NoopInterval);\r
+                       SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(300, 0));\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -2231,6 +2245,8 @@ static BOOL CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                                        TmpHost.MaxThreadCount = GetDecimalText(hDlg, HSET_THREAD_COUNT);\r
                                        CheckRange2(&TmpHost.MaxThreadCount, MAX_DATA_CONNECTION, 1);\r
                                        TmpHost.ReuseCmdSkt = SendDlgItemMessage(hDlg, HSET_REUSE_SOCKET, BM_GETCHECK, 0, 0);\r
+                                       TmpHost.NoopInterval = GetDecimalText(hDlg, HSET_NOOP_INTERVAL);\r
+                                       CheckRange2(&TmpHost.NoopInterval, 300, 0);\r
                                        Apply = YES;\r
                                        break;\r
 \r
diff --git a/main.c b/main.c
index 8cdfef3..2c162f2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -847,6 +847,12 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
 \r
        switch (message)\r
        {\r
+               // 自動切断対策\r
+               case WM_TIMER :\r
+                       if(wParam == 1)\r
+                               NoopProc();\r
+                       break;\r
+\r
                case WM_COMMAND :\r
                        // 同時接続対応\r
                        // 中断後に受信バッファに応答が残っていると次のコマンドの応答が正しく処理できない\r
@@ -855,11 +861,21 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                        switch(LOWORD(wParam))\r
                        {\r
                                case MENU_CONNECT :\r
+                                       // 自動切断対策\r
+                                       KillTimer(hWnd, 1);\r
                                        ConnectProc(DLG_TYPE_CON, -1);\r
+                                       // 自動切断対策\r
+                                       if(AskNoopInterval() > 0)\r
+                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
                                        break;\r
 \r
                                case MENU_CONNECT_NUM :\r
+                                       // 自動切断対策\r
+                                       KillTimer(hWnd, 1);\r
                                        ConnectProc(DLG_TYPE_CON, (int)lParam);\r
+                                       // 自動切断対策\r
+                                       if(AskNoopInterval() > 0)\r
+                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
                                        if(AskConnecting() == YES)\r
                                        {\r
                                                if(HIWORD(wParam) & OPT_MIRROR)\r
@@ -880,11 +896,21 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        break;\r
 \r
                                case MENU_SET_CONNECT :\r
+                                       // 自動切断対策\r
+                                       KillTimer(hWnd, 1);\r
                                        ConnectProc(DLG_TYPE_SET, -1);\r
+                                       // 自動切断対策\r
+                                       if(AskNoopInterval() > 0)\r
+                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
                                        break;\r
 \r
                                case MENU_QUICK :\r
+                                       // 自動切断対策\r
+                                       KillTimer(hWnd, 1);\r
                                        QuickConnectProc();\r
+                                       // 自動切断対策\r
+                                       if(AskNoopInterval() > 0)\r
+                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
                                        break;\r
 \r
                                case MENU_DISCONNECT :\r
@@ -918,7 +944,12 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                case MENU_HIST_18 :\r
                                case MENU_HIST_19 :\r
                                case MENU_HIST_20 :\r
+                                       // 自動切断対策\r
+                                       KillTimer(hWnd, 1);\r
                                        HistoryConnectProc(LOWORD(wParam));\r
+                                       // 自動切断対策\r
+                                       if(AskNoopInterval() > 0)\r
+                                               SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL);\r
                                        break;\r
 \r
                                case MENU_UPDIR :\r
index 0d91977..5441ec3 100644 (file)
 #define MSGJPN329              "UTF-8 BOM"\r
 #define MSGJPN330              "UTF-8 BOM Kanji Code"\r
 #define MSGJPN331              "UTF-8 BOM Kanji Code (Local)"\r
+#define MSGJPN332              "Auto"\r
+#define MSGJPN333              "TCP/IPv4"\r
+#define MSGJPN334              "TCP/IPv6"\r
index 599963f..710c0e9 100644 (file)
 #define MSGJPN329              "UTF-8 BOM"\r
 #define MSGJPN330              "UTF-8 BOM Kanji Code"\r
 #define MSGJPN331              "UTF-8 BOM Kanji Code (Local)"\r
+#define MSGJPN332              "Auto"\r
+#define MSGJPN333              "TCP/IPv4"\r
+#define MSGJPN334              "TCP/IPv6"\r
index a6e6624..f1999b7 100644 (file)
 #define MSGJPN329              "UTF-8 BOM"\r
 #define MSGJPN330              "\xE3\x83\x9B\xE3\x82\xB9\xE3\x83\x88\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8 BOM"\r
 #define MSGJPN331              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8 BOM"\r
+#define MSGJPN332              "\xE8\x87\xAA\xE5\x8B\x95"\r
+#define MSGJPN333              "TCP/IPv4"\r
+#define MSGJPN334              "TCP/IPv6"\r
index 6c06669..6d75592 100644 (file)
 #define MSGJPN329              "UTF-8 BOM"\r
 #define MSGJPN330              "\83z\83X\83g\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍUTF-8 BOM"\r
 #define MSGJPN331              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍUTF-8 BOM"\r
+#define MSGJPN332              "\8e©\93®"\r
+#define MSGJPN333              "TCP/IPv4"\r
+#define MSGJPN334              "TCP/IPv6"\r
index b4bfa43..8f41e39 100644 (file)
@@ -490,7 +490,9 @@ void SaveRegistory(void)
                                                        // MLSD対応\r
                                                        SaveIntNum(hKey5, "MLSD", Hist.UseMLSD, DefaultHist.UseMLSD);\r
                                                        // IPv6対応\r
-                                                       SaveIntNum(hKey5, "IPv6", Hist.UseIPv6, DefaultHist.UseIPv6);\r
+                                                       SaveIntNum(hKey5, "NetType", Hist.NetType, DefaultHist.NetType);\r
+                                                       // 自動切断対策\r
+                                                       SaveIntNum(hKey5, "Noop", Hist.NoopInterval, DefaultHist.NoopInterval);\r
 \r
                                                        CloseSubKey(hKey5);\r
                                                        n++;\r
@@ -572,7 +574,9 @@ void SaveRegistory(void)
                                                        // MLSD対応\r
                                                        SaveIntNum(hKey5, "MLSD", Host.UseMLSD, DefaultHost.UseMLSD);\r
                                                        // IPv6対応\r
-                                                       SaveIntNum(hKey5, "IPv6", Host.UseIPv6, DefaultHost.UseIPv6);\r
+                                                       SaveIntNum(hKey5, "NetType", Host.NetType, DefaultHost.NetType);\r
+                                                       // 自動切断対策\r
+                                                       SaveIntNum(hKey5, "Noop", Host.NoopInterval, DefaultHost.NoopInterval);\r
                                                }\r
                                                CloseSubKey(hKey5);\r
                                        }\r
@@ -850,7 +854,9 @@ int LoadRegistory(void)
                                        // MLSD対応\r
                                        ReadIntValueFromReg(hKey5, "MLSD", &Hist.UseMLSD);\r
                                        // IPv6対応\r
-                                       ReadIntValueFromReg(hKey5, "IPv6", &Hist.UseIPv6);\r
+                                       ReadIntValueFromReg(hKey5, "NetType", &Hist.NetType);\r
+                                       // 自動切断対策\r
+                                       ReadIntValueFromReg(hKey5, "Noop", &Hist.NoopInterval);\r
 \r
                                        CloseSubKey(hKey5);\r
                                        AddHistoryToHistory(&Hist);\r
@@ -941,7 +947,9 @@ int LoadRegistory(void)
                                        // MLSD対応\r
                                        ReadIntValueFromReg(hKey5, "MLSD", &Host.UseMLSD);\r
                                        // IPv6対応\r
-                                       ReadIntValueFromReg(hKey5, "IPv6", &Host.UseIPv6);\r
+                                       ReadIntValueFromReg(hKey5, "NetType", &Host.NetType);\r
+                                       // 自動切断対策\r
+                                       ReadIntValueFromReg(hKey5, "Noop", &Host.NoopInterval);\r
 \r
                                        CloseSubKey(hKey5);\r
 \r