Add UI for IPv6.
Modify documents.
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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
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\82r \82o\83S\83V\83b\83N", 0, 0, 0x0\r
BEGIN\r
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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\82r \82o\83S\83V\83b\83N"\r
BEGIN\r
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
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
opt_user_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
diskfull_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
opt_trmode1_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
cwderr_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
rasreconnect_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
hset_adv3_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
savecrypt_dlg, DIALOG\r
#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
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
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
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
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
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
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
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
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
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
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
opt_user_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
diskfull_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 204\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
opt_trmode1_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
cwderr_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
rasreconnect_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
hset_adv3_dlg, DIALOG\r
LEFTMARGIN, 7\r
RIGHTMARGIN, 200\r
TOPMARGIN, 7\r
- BOTTOMMARGIN, 132\r
+ BOTTOMMARGIN, 148\r
END\r
\r
savecrypt_dlg, DIALOG\r
#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
#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
// 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
// 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
// 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
#if defined(HAVE_OPENVMS)\r
void ReformVMSDirName(char *DirName, int Flg);\r
#endif\r
+// 自動切断対策\r
+void NoopProc(void);\r
\r
/*===== local.c =====*/\r
\r
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
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
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
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
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
{\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
{\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
}\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
-- 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
-- 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
\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
\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
\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
\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
}\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
// 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
// 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
\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
// 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
// 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
// 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
{\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
// 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
// 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
// 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
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
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
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
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
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
\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
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
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
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
#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
#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
#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
#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
// 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
// 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
// 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
// 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