#include <time.h>\r
// IPv6対応\r
//#include <winsock.h>\r
-#include <ws2tcpip.h>\r
+#include <winsock2.h>\r
#include <windowsx.h>\r
#include <commctrl.h>\r
\r
\r
/*===== プロトタイプ =====*/\r
\r
-static BOOL CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
static int SendInitCommand(char *Cmd);\r
static void AskUseFireWall(char *Host, int *Fire, int *Pasv, int *List);\r
static void SaveCurrentSetToHistory(void);\r
static SOCKET CmdCtrlSocket = INVALID_SOCKET;\r
static SOCKET TrnCtrlSocket = INVALID_SOCKET;\r
static HOSTDATA CurHost;\r
-// UTF-8対応\r
-static int TmpNameKanjiCode;\r
\r
/* 接続中の接続先、SOCKSサーバのアドレス情報を保存しておく */\r
/* この情報はlistenソケットを取得する際に用いる */\r
InitPWDcommand();\r
CopyHostFromList(AskCurrentHost(), &CurHost);\r
// UTF-8対応\r
- TmpNameKanjiCode = CurHost.NameKanjiCode;\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
CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, Save, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
- // UTF-8対応\r
- if(TmpNameKanjiCode == KANJI_AUTO)\r
+ if(CmdCtrlSocket != INVALID_SOCKET)\r
{\r
- if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ // 暗号化通信対応\r
+ switch(CurHost.CryptMode)\r
{\r
- SetCache(999, "");\r
- TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+ case CRYPT_NONE:\r
+ if(CurHost.UseFTPIS != NO || CurHost.UseSFTP != NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savecrypt_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ SetHostExcryption(AskCurrentHost(), CurHost.UseNoEncryption, CurHost.UseFTPES, NO, NO);\r
+ }\r
+ break;\r
+ case CRYPT_FTPES:\r
+ if(CurHost.UseNoEncryption != NO || CurHost.UseFTPIS != NO || CurHost.UseSFTP != NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savecrypt_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ SetHostExcryption(AskCurrentHost(), NO, CurHost.UseFTPES, NO, NO);\r
+ }\r
+ break;\r
+ case CRYPT_FTPIS:\r
+ if(CurHost.UseNoEncryption != NO || CurHost.UseFTPES != NO || CurHost.UseSFTP != NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savecrypt_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ SetHostExcryption(AskCurrentHost(), NO, NO, CurHost.UseFTPIS, NO);\r
+ }\r
+ break;\r
+ case CRYPT_SFTP:\r
+ if(CurHost.UseNoEncryption != NO || CurHost.UseFTPES != NO || CurHost.UseFTPIS != NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savecrypt_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ SetHostExcryption(AskCurrentHost(), NO, NO, NO, CurHost.UseSFTP);\r
+ }\r
+ break;\r
+ }\r
+\r
+ // UTF-8対応\r
+ if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
+ {\r
+ if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
}\r
- }\r
\r
- if(CmdCtrlSocket != INVALID_SOCKET)\r
- {\r
strcpy(TitleHostName, CurHost.HostName);\r
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
InitPWDcommand();\r
CopyDefaultHost(&CurHost);\r
// UTF-8対応\r
- TmpNameKanjiCode = CurHost.NameKanjiCode;\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
CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
- // UTF-8対応\r
- if(TmpNameKanjiCode == KANJI_AUTO)\r
+ if(CmdCtrlSocket != INVALID_SOCKET)\r
{\r
- if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ // UTF-8対応\r
+ if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
{\r
- SetCache(999, "");\r
- TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+ if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
}\r
- }\r
\r
- if(CmdCtrlSocket != INVALID_SOCKET)\r
- {\r
strcpy(TitleHostName, CurHost.HostAdrs);\r
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
{\r
static char *Buf;\r
int i;\r
CurHost.NameKanjiCode = Fkanji;\r
CurHost.KanaCnv = YES; /* とりあえず */\r
// UTF-8対応\r
- TmpNameKanjiCode = CurHost.NameKanjiCode;\r
+ CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
+ // IPv6対応\r
+ CurHost.CurNetType = CurHost.NetType;\r
\r
SetHostKanaCnvImm(CurHost.KanaCnv);\r
SetHostKanjiCodeImm(CurHost.KanjiCode);\r
CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
- // UTF-8対応\r
- if(TmpNameKanjiCode == KANJI_AUTO)\r
+ if(CmdCtrlSocket != INVALID_SOCKET)\r
{\r
- if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ // UTF-8対応\r
+ if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
{\r
- SetCache(999, "");\r
- TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+ if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
}\r
- }\r
\r
- if(CmdCtrlSocket != INVALID_SOCKET)\r
- {\r
strcpy(TitleHostName, CurHost.HostAdrs);\r
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
InitPWDcommand();\r
CopyHistoryToHost(&Hist, &CurHost);\r
// UTF-8対応\r
- TmpNameKanjiCode = CurHost.NameKanjiCode;\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
CmdCtrlSocket = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg);\r
TrnCtrlSocket = CmdCtrlSocket;\r
\r
- // UTF-8対応\r
- if(TmpNameKanjiCode == KANJI_AUTO)\r
+ if(CmdCtrlSocket != INVALID_SOCKET)\r
{\r
- if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ // UTF-8対応\r
+ if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
{\r
- SetCache(999, "");\r
- TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+ if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
+ CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
}\r
- }\r
\r
- if(CmdCtrlSocket != INVALID_SOCKET)\r
- {\r
strcpy(TitleHostName, CurHost.HostAdrs);\r
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
// CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
//\r
// return(CurHost.NameKanjiCode);\r
- return(TmpNameKanjiCode);\r
+ return(CurHost.CurNameKanjiCode);\r
}\r
\r
\r
HostData.UseFTPIS = NO;\r
if(HostData.CryptMode != CRYPT_SFTP)\r
HostData.UseSFTP = NO;\r
+ // UTF-8対応\r
+ HostData.CurNameKanjiCode = HostData.NameKanjiCode;\r
+ // IPv6対応\r
+ HostData.CurNetType = HostData.NetType;\r
+ // 同時接続対応\r
+ HostData.NoDisplayUI = YES;\r
// 暗号化通信対応\r
// 同時接続対応\r
// if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
else\r
{\r
Anony = NO;\r
+ // 同時接続対応\r
+// if((strlen(User) != 0) || \r
+// (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
if((strlen(User) != 0) || \r
- (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(username_dlg, GetMainHwnd(), NULL, User, USER_NAME_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))\r
{\r
if(Anony == YES)\r
{\r
Sts = FTP_ERROR;\r
}\r
\r
+ // FTPIS対応\r
+ // "PBSZ 0"と"PROT P"は黙示的に設定されているはずだが念のため\r
+ if(CryptMode == CRYPT_FTPIS)\r
+ {\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200)\r
+ {\r
+ if((Sts = command(ContSock, Reply, CancelCheckWork, "PROT P")) == 200)\r
+ {\r
+ }\r
+ }\r
+ }\r
+\r
ReInPass = NO;\r
do\r
{\r
// if((Sts = command(ContSock, Reply, &CancelFlg, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
if((Sts = command(ContSock, Reply, CancelCheckWork, "USER %s", Buf) / 100) == FTP_CONTINUE)\r
{\r
+ // 同時接続対応\r
+// if((strlen(Pass) != 0) || \r
+// (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
if((strlen(Pass) != 0) || \r
- (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))\r
{\r
CheckOneTimePassword(Pass, Reply, Security);\r
\r
if(Sts == FTP_ERROR)\r
{\r
strcpy(Pass, "");\r
- if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)\r
+ // 同時接続対応\r
+// if(InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)\r
+ if(HostData->NoDisplayUI == NO && InputDialogBox(re_passwd_dlg, GetMainHwnd(), NULL, Pass, PASSWORD_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)\r
Continue = YES;\r
else\r
DoPrintf("No password specified.");\r
}\r
else if(Sts == FTP_CONTINUE)\r
{\r
+ // 同時接続対応\r
+// if((strlen(Acct) != 0) || \r
+// (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
if((strlen(Acct) != 0) || \r
- (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES))\r
+ ((HostData->NoDisplayUI == NO) && (InputDialogBox(account_dlg, GetMainHwnd(), NULL, Acct, ACCOUNT_LEN+1, &Anony, IDH_HELP_TOPIC_0000001) == YES)))\r
{\r
// 同時接続対応\r
// Sts = command(ContSock, NULL, &CancelFlg, "ACCT %s", Acct) / 100;\r
}\r
else if((SavePass == YES) && (ReInPass == YES))\r
{\r
- if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ // 同時接続対応\r
+// if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ if(HostData->NoDisplayUI == NO && DialogBox(GetFtpInst(), MAKEINTRESOURCE(savepass_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
SetHostPassword(AskCurrentHost(), Pass);\r
}\r
}\r
HostData->Feature |= FEATURE_EPRT | FEATURE_EPSV;\r
}\r
// UTF-8対応\r
- if(TmpNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
+ if(HostData->CurNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
{\r
if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)\r
- TmpNameKanjiCode = KANJI_UTF8N;\r
+ HostData->CurNameKanjiCode = KANJI_UTF8N;\r
}\r
}\r
}\r
SOCKET ContSock;\r
ContSock = INVALID_SOCKET;\r
*CancelCheckWork = NO;\r
- if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
- {\r
- SetTaskMsg(MSGJPN317);\r
- if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
- HostData->CryptMode = CRYPT_SFTP;\r
- }\r
+// if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
+// {\r
+// SetTaskMsg(MSGJPN317);\r
+// if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
+// HostData->CryptMode = CRYPT_SFTP;\r
+// }\r
if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
{\r
SetTaskMsg(MSGJPN316);\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
if(listen_skt != INVALID_SOCKET)\r
{\r
-#define US(w) (((int)w)&0xffff)\r
+#define UC(b) (((int)b)&0xff)\r
// 同時接続対応\r
// if((command(ctrl_skt,NULL, &CancelFlg, "PORT %d,%d,%d,%d,%d,%d",\r
// UC(a[0]), UC(a[1]), UC(a[2]), UC(a[3]),\r
// UC(p[0]), UC(p[1])) / 100) != FTP_COMPLETE)\r
if((command(ctrl_skt,NULL, CancelCheckWork, "EPRT |2|%s|%d|",\r
AddressToStringIPv6(Adrs, a),\r
- US(p[0])) / 100) != FTP_COMPLETE)\r
+ (UC(p[0]) << 8) | UC(p[1])) / 100) != FTP_COMPLETE)\r
{\r
SetTaskMsg(MSGJPN031);\r
do_closesocket(listen_skt);\r
}\r
\r
// IPv6対応\r
-int AskInetFamily(void)\r
+int AskCurNetType(void)\r
+{\r
+ return(CurHost.CurNetType);\r
+}\r
+\r
+// 自動切断対策\r
+int AskNoopInterval(void)\r
+{\r
+ return(CurHost.NoopInterval);\r
+}\r
+\r
+// 再転送対応\r
+int AskTransferErrorMode(void)\r
{\r
- return(CurHost.InetFamily);\r
+ return(CurHost.TransferErrorMode);\r
}\r
\r
-int AskUseIPv6(void)\r
+int AskTransferErrorNotify(void)\r
{\r
- return(CurHost.UseIPv6);\r
+ return(CurHost.TransferErrorNotify);\r
}\r
\r