\r
// 同時接続対応\r
extern int CancelFlg;\r
+// 自動切断対策\r
+extern time_t LastDataConnectionTime;\r
\r
/*===== ローカルなワーク =====*/\r
\r
Sts = FTP_COMPLETE * 100;\r
\r
if(strcmp(Path, "..") == 0)\r
- Sts = CommandProcCmd(NULL, "CDUP");\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "CDUP");\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "CDUP");\r
else if(strcmp(Path, "") != 0)\r
{\r
if((AskHostType() != HTYPE_VMS) || (strchr(Path, '[') != NULL))\r
- Sts = CommandProcCmd(NULL, "CWD %s", Path);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "CWD %s", Path);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "CWD %s", Path);\r
else\r
- Sts = CommandProcCmd(NULL, "CWD [.%s]", Path); /* VMS用 */\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "CWD [.%s]", Path); /* VMS用 */\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "CWD [.%s]", Path); /* VMS用 */\r
}\r
\r
if((Sts/100 >= FTP_CONTINUE) && (ErrorBell == YES))\r
\r
if(PwdCommandType == PWD_XPWD)\r
{\r
- Sts = CommandProcCmd(Tmp, "XPWD");\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(Tmp, "XPWD");\r
+ Sts = CommandProcCmd(Tmp, &CancelFlg, "XPWD");\r
if(Sts/100 != FTP_COMPLETE)\r
PwdCommandType = PWD_PWD;\r
}\r
if(PwdCommandType == PWD_PWD)\r
- Sts = CommandProcCmd(Tmp, "PWD");\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(Tmp, "PWD");\r
+ Sts = CommandProcCmd(Tmp, &CancelFlg, "PWD");\r
\r
if(Sts/100 == FTP_COMPLETE)\r
{\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "MKD %s", Path);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "MKD %s", Path);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "MKD %s", Path);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
+ // 自動切断対策\r
+ if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(YES);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+\r
return(Sts/100);\r
}\r
\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "RMD %s", Path);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "RMD %s", Path);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "RMD %s", Path);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
+ // 自動切断対策\r
+ if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(YES);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+\r
return(Sts/100);\r
}\r
\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "DELE %s", Path);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "DELE %s", Path);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "DELE %s", Path);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
+ // 自動切断対策\r
+ if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(YES);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+\r
return(Sts/100);\r
}\r
\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "RNFR %s", Src);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "RNFR %s", Src);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "RNFR %s", Src);\r
if(Sts == 350)\r
// 同時接続対応\r
// Sts = command(AskCmdCtrlSkt(), NULL, &CheckCancelFlg, "RNTO %s", Dst);\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
+ // 自動切断対策\r
+ if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(YES);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+\r
return(Sts/100);\r
}\r
\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
+ // 同時接続対応\r
+// Sts = CommandProcCmd(NULL, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
+ Sts = CommandProcCmd(NULL, &CancelFlg, "%s %s %s", AskHostChmodCmd(), Mode, Path);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
\r
+ // 自動切断対策\r
+ if(CancelFlg == NO && AskNoopInterval() > 0 && time(NULL) - LastDataConnectionTime >= AskNoopInterval())\r
+ {\r
+ NoopProc(YES);\r
+ LastDataConnectionTime = time(NULL);\r
+ }\r
+\r
return(Sts/100);\r
}\r
\r
Time->dwHighDateTime = 0;\r
\r
// 同時接続対応\r
+ // ホスト側の日時取得\r
// Sts = CommandProcTrn(Tmp, "MDTM %s", Path);\r
- Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MDTM %s", Path);\r
+ Sts = 500;\r
+ if(AskHostFeature() & FEATURE_MDTM)\r
+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MDTM %s", Path);\r
if(Sts/100 == FTP_COMPLETE)\r
{\r
sTime.wMilliseconds = 0;\r
&sTime.wHour, &sTime.wMinute, &sTime.wSecond) == 6)\r
{\r
SystemTimeToFileTime(&sTime, Time);\r
- SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());\r
+ // 時刻はGMT\r
+// SpecificLocalFileTime2FileTime(Time, AskHostTimeZone());\r
\r
}\r
}\r
}\r
\r
\r
+// ホスト側の日時設定\r
+int DoMFMT(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork)\r
+{\r
+ int Sts;\r
+ char Tmp[1024];\r
+ SYSTEMTIME sTime;\r
+\r
+ FileTimeToSystemTime(Time, &sTime);\r
+\r
+ Sts = 500;\r
+ if(AskHostFeature() & FEATURE_MFMT)\r
+ Sts = CommandProcTrn(cSkt, Tmp, CancelCheckWork, "MFMT %04d%02d%02d%02d%02d%02d %s", sTime.wYear, sTime.wMonth, sTime.wDay, sTime.wHour, sTime.wMinute, sTime.wSecond, Path);\r
+ return(Sts/100);\r
+}\r
+\r
+\r
/*----- リモート側のコマンドを実行 --------------------------------------------\r
*\r
* Parameter\r
* int 応答コードの1桁目\r
*----------------------------------------------------------------------------*/\r
\r
-int DoQUOTE(char *CmdStr)\r
+// 同時接続対応\r
+//int DoQUOTE(char *CmdStr)\r
+int DoQUOTE(SOCKET cSkt, char *CmdStr, int *CancelCheckWork)\r
{\r
int Sts;\r
\r
- Sts = CommandProcCmd(NULL, "%s", CmdStr);\r
+// Sts = CommandProcCmd(NULL, "%s", CmdStr);\r
+ Sts = CommandProcTrn(cSkt, NULL, CancelCheckWork, "%s", CmdStr);\r
\r
if(Sts/100 >= FTP_CONTINUE)\r
SoundPlay(SND_ERROR);\r
* int 応答コードの1桁目\r
*----------------------------------------------------------------------------*/\r
\r
-int DoQUIT(SOCKET ctrl_skt)\r
+// 同時接続対応\r
+//int DoQUIT(SOCKET ctrl_skt)\r
+int DoQUIT(SOCKET ctrl_skt, int *CancelCheckWork)\r
{\r
int Ret;\r
\r
if(SendQuit == YES)\r
// 同時接続対応\r
// Ret = command(ctrl_skt, NULL, &CheckCancelFlg, "QUIT") / 100;\r
- Ret = command(ctrl_skt, NULL, &CancelFlg, "QUIT") / 100;\r
+ Ret = command(ctrl_skt, NULL, CancelCheckWork, "QUIT") / 100;\r
\r
return(Ret);\r
}\r
MainTransPkt.KanjiCode = KANJI_NOCNV;\r
MainTransPkt.KanaCnv = YES;\r
MainTransPkt.Mode = EXIST_OVW;\r
+ // ミラーリング設定追加\r
+ MainTransPkt.NoTransfer = NO;\r
MainTransPkt.ExistSize = 0;\r
MainTransPkt.hWndTrans = hWnd;\r
MainTransPkt.Next = NULL;\r
\r
- Sts = DoDownLoad(cSkt, &MainTransPkt, YES, CancelCheckWork);\r
+ Sts = DoDownload(cSkt, &MainTransPkt, YES, CancelCheckWork);\r
\r
//#pragma aaa\r
//DoPrintf("===== DoDirList Done.");\r
* コマンドコントロールソケットを使う\r
*----------------------------------------------------------------------------*/\r
\r
-int CommandProcCmd(char *Reply, char *fmt, ...)\r
+// 同時接続対応\r
+//int CommandProcCmd(char *Reply, char *fmt, ...)\r
+int CommandProcCmd(char *Reply, int* CancelCheckWork, char *fmt, ...)\r
{\r
va_list Args;\r
char Cmd[1024];\r
// {\r
// 同時接続対応\r
// Sts = command(AskCmdCtrlSkt(), Reply, &CheckCancelFlg, "%s", Cmd);\r
- Sts = command(AskCmdCtrlSkt(), Reply, &CancelFlg, "%s", Cmd);\r
+ Sts = command(AskCmdCtrlSkt(), Reply, CancelCheckWork, "%s", Cmd);\r
// }\r
// }\r
return(Sts);\r
\r
/* DoPWD でノード名の \ を保存するために OSSフラグも変更する */\r
if(AskOSS() == YES) {\r
- DoQUOTE("GUARDIAN");\r
+ DoQUOTE(AskCmdCtrlSkt(), "GUARDIAN", &CancelFlg);\r
SetOSS(NO);\r
} else {\r
- DoQUOTE("OSS");\r
+ DoQUOTE(AskCmdCtrlSkt(), "OSS", &CancelFlg);\r
SetOSS(YES);\r
}\r
/* Current Dir 再取得 */\r
/*----- リモート側へコマンドを送りリプライを待つ(転送ソケット)---------------\r
*\r
* Parameter\r
+* SOCKET cSkt : ソケット\r
* char *Reply : リプライのコピー先 (NULL=コピーしない)\r
+* int *CancelCheckWork :\r
* char *fmt : フォーマット文字列\r
* ... : パラメータ\r
*\r
//#pragma aaa\r
//static int cntcnt = 0;\r
\r
-// SFTP対応\r
-int ConvertFTPCommandToPuTTYSFTP(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *Cmd)\r
-{\r
- // TODO:\r
- // 未実装\r
- int Sts;\r
- char NewCmd[FMAX_PATH*2];\r
- static char RenameFrom[FMAX_PATH+1];\r
- Sts = 429;\r
- Reply[0] = '\0';\r
- if(strcmp(Cmd, "QUIT") == 0)\r
- {\r
- sprintf(NewCmd, "ls\r\n");\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- if(strcmp(Cmd, "LIST") == 0)\r
- {\r
- sprintf(NewCmd, "ls\r\n");\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "REST ", 5) == 0)\r
- {\r
- SFTP_SetFilePosition(cSkt, (LONGLONG)_strtoi64(&Cmd[5], NULL, 10));\r
- }\r
- else if(strncmp(Cmd, "RETR ", 5) == 0)\r
- {\r
- sprintf(NewCmd, "get \"%s\"\r\n", &Cmd[5]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "STOR ", 5) == 0)\r
- {\r
- sprintf(NewCmd, "put \"%s\"\r\n", &Cmd[5]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "APPE ", 5) == 0)\r
- {\r
- sprintf(NewCmd, "reput \"%s\"\r\n", &Cmd[5]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "DELE ", 5) == 0)\r
- {\r
- sprintf(NewCmd, "rm \"%s\"\r\n", &Cmd[5]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "CWD ", 4) == 0)\r
- {\r
- sprintf(NewCmd, "cd \"%s\"\r\n", &Cmd[4]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strcmp(Cmd, "PWD") == 0)\r
- {\r
- sprintf(NewCmd, "pwd\r\n");\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strcmp(Cmd, "XPWD") == 0)\r
- {\r
- sprintf(NewCmd, "pwd\r\n");\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "MKD ", 4) == 0)\r
- {\r
- sprintf(NewCmd, "mkdir \"%s\"\r\n", &Cmd[4]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "RMD ", 4) == 0)\r
- {\r
- sprintf(NewCmd, "rmdir \"%s\"\r\n", &Cmd[4]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "RNFR ", 5) == 0)\r
- {\r
- strcpy(RenameFrom, &Cmd[5]);\r
- }\r
- else if(strncmp(Cmd, "RNTO ", 5) == 0)\r
- {\r
- sprintf(NewCmd, "mv \"%s\" \"%s\"\r\n", RenameFrom, &Cmd[5]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- else if(strncmp(Cmd, "SITE CHMOD ", 11) == 0)\r
- {\r
- Cmd[14] = '\0';\r
- sprintf(NewCmd, "chmod %s \"%s\"\r\n", &Cmd[11], &Cmd[15]);\r
- SFTP_send(cSkt, NewCmd, strlen(NewCmd), 0);\r
- }\r
- return Sts;\r
-}\r
-\r
int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...)\r
{\r
va_list Args;\r
wvsprintf(Cmd, fmt, Args);\r
va_end(Args);\r
\r
- // SFTP対応\r
- if(IsSFTPAttached(cSkt))\r
- return ConvertFTPCommandToPuTTYSFTP(cSkt, Reply, CancelCheckWork, Cmd);\r
-\r
if(strncmp(Cmd, "PASS ", 5) == 0)\r
SetTaskMsg(">PASS [xxxxxx]");\r
else if((strncmp(Cmd, "USER ", 5) == 0) ||\r
{\r
ChangeSepaLocal2Remote(Cmd);\r
SetTaskMsg(">%s", Cmd);\r
- ChangeFnameLocal2Remote(Cmd, FMAX_PATH*2);\r
+ // UTF-8対応\r
+// ChangeFnameLocal2Remote(Cmd, FMAX_PATH*2);\r
}\r
+ // UTF-8対応\r
+ ChangeFnameLocal2Remote(Cmd, FMAX_PATH*2);\r
\r
// DoPrintf("SEND : %s", Cmd);\r
strcat(Cmd, "\x0D\x0A");\r
// *(Buf + cInfo.OutLen) = NUL;\r
// strcpy(Pos, Buf);\r
// break;\r
+\r
+ // UTF-8 HFS+対応\r
+ case KANJI_UTF8HFSX :\r
+ ConvUTF8HFSXtoUTF8N(&cInfo);\r
+ *(Buf + cInfo.OutLen) = NUL;\r
+ strcpy(Fname, Buf);\r
+ Pos = strchr(Fname, NUL);\r
+ FlushRestData(&cInfo);\r
+ *(Buf + cInfo.OutLen) = NUL;\r
+ strcpy(Pos, Buf);\r
+ break;\r
}\r
// バッファ上書きバグ対策\r
free(Buf2);\r
// *(Buf + cInfo.OutLen) = NUL;\r
// strcpy(Pos, Buf);\r
// break;\r
+\r
+ // UTF-8 HFS+対応\r
+ case KANJI_UTF8HFSX :\r
+ ConvUTF8NtoUTF8HFSX(&cInfo);\r
+ *(Buf + cInfo.OutLen) = NUL;\r
+ strcpy(Fname, Buf);\r
+ Pos = strchr(Fname, NUL);\r
+ FlushRestData(&cInfo);\r
+ *(Buf + cInfo.OutLen) = NUL;\r
+ strcpy(Pos, Buf);\r
+ break;\r
}\r
// バッファ上書きバグ対策\r
free(Buf2);\r