\r
/*===== プロトタイプ =====*/\r
\r
-static BOOL CALLBACK QuickConDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
-static int SendInitCommand(char *Cmd);\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 int SendInitCommand(char *Cmd);\r
+static int SendInitCommand(SOCKET Socket, char *Cmd, int *CancelCheckWork);\r
static void AskUseFireWall(char *Host, int *Fire, int *Pasv, int *List);\r
static void SaveCurrentSetToHistory(void);\r
static int ReConnectSkt(SOCKET *Skt);\r
static int UseIPadrs;\r
static char DomainName[HOST_ADRS_LEN+1];\r
\r
+#if defined(HAVE_TANDEM)\r
+static int Oss = NO; /* OSS ファイルシステムへアクセスしている場合は YES */\r
+#endif\r
\r
\r
\r
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
\r
- SendInitCommand(CurHost.InitCmd);\r
+ SendInitCommand(CmdCtrlSocket, CurHost.InitCmd, &CancelFlg);\r
\r
if(strlen(CurHost.LocalInitDir) > 0)\r
{\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
DispWindowTitle();\r
SoundPlay(SND_CONNECT);\r
\r
- SendInitCommand(CurHost.InitCmd);\r
+ SendInitCommand(CmdCtrlSocket, CurHost.InitCmd, &CancelFlg);\r
\r
DoLocalCWD(CurHost.LocalInitDir);\r
GetLocalDirForWnd();\r
* cmd1\r\ncmd2\r\n\0\r
*----------------------------------------------------------------------------*/\r
\r
-static int SendInitCommand(char *Cmd)\r
+// 同時接続対応\r
+//static int SendInitCommand(char *Cmd)\r
+static int SendInitCommand(SOCKET Socket, char *Cmd, int *CancelCheckWork)\r
{\r
char Tmp[INITCMD_LEN+1];\r
char *Pos;\r
if((Pos = strchr(Tmp, '\r')) != NULL)\r
*Pos = NUL;\r
if(strlen(Tmp) > 0)\r
- DoQUOTE(Tmp);\r
+// DoQUOTE(Tmp);\r
+ DoQUOTE(Socket, Tmp, CancelCheckWork);\r
\r
if((Cmd = strchr(Cmd, '\n')) != NULL)\r
Cmd++;\r
if(AskCurrentHost() != HOSTNUM_NOENTRY)\r
CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
\r
+#if defined(HAVE_TANDEM)\r
+ /* OSS ファイルシステムは UNIX ファイルシステムと同じでいいので AUTO を返す\r
+ ただし、Guardian ファイルシステムに戻ったときにおかしくならないように\r
+ CurHost.HostType 変数は更新しない */\r
+ if(CurHost.HostType == HTYPE_TANDEM && Oss == YES)\r
+ return(HTYPE_AUTO);\r
+#endif\r
+\r
return(CurHost.HostType);\r
}\r
\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
if((*Skt = DoConnect(&HostData, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, CancelCheckWork)) != INVALID_SOCKET)\r
{\r
+ SendInitCommand(*Skt, CurHost.InitCmd, CancelCheckWork);\r
// AskRemoteCurDir(Path, FMAX_PATH);\r
// DoCWD(Path, YES, YES, YES);\r
Sts = FFFTP_SUCCESS;\r
// if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
if((*Skt = DoConnect(&CurHost, CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security, &CancelFlg)) != INVALID_SOCKET)\r
{\r
+ SendInitCommand(*Skt, CurHost.InitCmd, &CancelFlg);\r
AskRemoteCurDir(Path, FMAX_PATH);\r
DoCWD(Path, YES, YES, YES);\r
Sts = FFFTP_SUCCESS;\r
}\r
\r
\r
+#if defined(HAVE_TANDEM)\r
+/*----- 接続している本当のホストのホストタイプを返す --------------------------\r
+*\r
+* Parameter\r
+* なし\r
+*\r
+* Return Value\r
+* char *ファイル名/オプション\r
+*----------------------------------------------------------------------------*/\r
+\r
+int AskRealHostType(void)\r
+{\r
+ if(AskCurrentHost() != HOSTNUM_NOENTRY)\r
+ CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
+\r
+ return(CurHost.HostType);\r
+}\r
+\r
+/*----- OSS ファイルシステムにアクセスしているかどうかのフラグを変更する ------\r
+*\r
+* Parameter\r
+* int ステータス (YES/NO)\r
+*\r
+* Return Value\r
+* int ステータス (YES/NO)\r
+*----------------------------------------------------------------------------*/\r
+\r
+int SetOSS(int wkOss)\r
+{\r
+ if(Oss != wkOss) {\r
+ if (wkOss == YES) {\r
+ strcpy(CurHost.InitCmd, "OSS");\r
+ } else {\r
+ strcpy(CurHost.InitCmd, "GUARDIAN");\r
+ }\r
+ }\r
+ Oss = wkOss;\r
+ return(Oss);\r
+}\r
+\r
+/*----- OSS ファイルシステムにアクセスしているかどうかを返す ------------------\r
+*\r
+* Parameter\r
+* なし\r
+*\r
+* Return Value\r
+* int ステータス (YES/NO)\r
+*----------------------------------------------------------------------------*/\r
+\r
+int AskOSS(void)\r
+{\r
+ return(Oss);\r
+}\r
+#endif /* HAVE_TANDEM */\r
+\r
+\r
/*----- ホストへ接続する ------------------------------------------------------\r
*\r
* Parameter\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
// 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
DoPrintf("No password specified.");\r
}\r
}\r
+ // FTPES対応\r
+ if(Continue == YES)\r
+ Sts = FTP_COMPLETE;\r
}\r
while(Continue == YES);\r
}\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
}\r
else if(CryptMode == CRYPT_SFTP)\r
{\r
+ // TODO:\r
+ // テストコード\r
+ // ログイン成功を確認\r
+#define strrcmp(_Str1, _Str2) (strcmp(strstr(_Str1, _Str2) ? strstr(_Str1, _Str2) : "", _Str2))\r
+ size_t r;\r
+ ContSock = SFTP_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r
+ SFTP_SetTimeoutCallback(ContSock, SSLTimeoutCallback);\r
+ while(1)\r
+ {\r
+ r = SFTP_recv(ContSock, Reply, 1024, 0);\r
+ if(r == SOCKET_ERROR)\r
+ break;\r
+ if(r <= 0)\r
+ continue;\r
+ Reply[r] = '\0';\r
+ SetTaskMsg("%s", Reply);\r
+ if(strrcmp(Reply, "psftp> ") == 0)\r
+ break;\r
+ }\r
+ r = SFTP_send(ContSock, "open \"", strlen("open \""), 0);\r
+ r = SFTP_send(ContSock, Host, strlen(Host), 0);\r
+ r = SFTP_send(ContSock, "\"\r\n", strlen("\"\r\n"), 0);\r
+ while(1)\r
+ {\r
+ r = SFTP_recv(ContSock, Reply, 1024, 0);\r
+ if(r == SOCKET_ERROR)\r
+ break;\r
+ if(r <= 0)\r
+ continue;\r
+ Reply[r] = '\0';\r
+ SetTaskMsg("%s", Reply);\r
+ if(strrcmp(Reply, "Store key in cache? (y/n) ") == 0)\r
+ {\r
+ r = SFTP_send(ContSock, "n\r\n", strlen("n\r\n"), 0);\r
+ }\r
+ if(strrcmp(Reply, "Update cached key? (y/n, Return cancels connection) ") == 0)\r
+ {\r
+ r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
+ }\r
+ if(strrcmp(Reply, "login as: ") == 0)\r
+ {\r
+ r = SFTP_send(ContSock, User, strlen(User), 0);\r
+ r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
+ }\r
+ if(strrcmp(Reply, "password: ") == 0)\r
+ {\r
+ r = SFTP_send(ContSock, Pass, strlen(Pass), 0);\r
+ r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
+ }\r
+ if(strrcmp(Reply, "psftp> ") == 0)\r
+ break;\r
+ Sleep(1);\r
+ }\r
+ SFTP_closesocket(ContSock);\r
+ ContSock = INVALID_SOCKET;\r
}\r
\r
return(ContSock);\r