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