//#define VER_STR "1.97b"\r
//#define VER_NUM 1921 /* 設定バージョン */\r
//#define PROGRAM_VERSION_NUM 1972 /* バージョン */\r
-#define VER_STR "1.98"\r
-#define VER_NUM 1980 /* 設定バージョン */\r
-#define PROGRAM_VERSION_NUM 1980 /* バージョン */\r
+#define VER_STR "1.99"\r
+#define VER_NUM 1990 /* 設定バージョン */\r
+#define PROGRAM_VERSION_NUM 1990 /* バージョン */\r
\r
\r
-#define MYWEB_URL "http://www2.biglobe.ne.jp/~sota/ffftp-qa.html"\r
+// SourceForge.JPによるフォーク\r
+//#define MYWEB_URL "http://www2.biglobe.ne.jp/~sota/ffftp-qa.html"\r
+#define MYWEB_URL "http://sourceforge.jp/projects/ffftp/"\r
\r
\r
\r
\r
#define ONELINE_BUF_SIZE (10*1024)\r
\r
+// 暗号化通信対応\r
+#define PRIVATE_KEY_LEN 4096\r
+\r
/*===== 初期値 =====*/\r
\r
#define SAMBA_HEX_TAG ':' /* Samba-HEX の区切り文字 */\r
#define LIST_UNIX_73 45 /* UNIX 73 */\r
#define LIST_UNIX_74 46 /* UNIX 74 */\r
#define LIST_UNIX_75 47 /* UNIX 75 */\r
+// MLSD対応\r
+#define LIST_MLSD 48\r
\r
#define LIST_MELCOM 0x100 /* MELCOM80 */\r
\r
#define KANJI_SMB_HEX 3 /* Samba-HEX */\r
#define KANJI_SMB_CAP 4 /* Samba-CAP */\r
#define KANJI_UTF8N 5 /* UTF-8 */\r
+// UTF-8対応\r
+#define KANJI_UTF8BOM 6 /* UTF-8 BOM */\r
\r
#define KANJI_NOCNV -1 /* 漢字コード変換なし */\r
\r
+// UTF-8対応\r
#define KANJI_AUTO -1\r
\r
/*===== サウンド =====*/\r
#define REGTYPE_REG 0 /* レジストリ */\r
#define REGTYPE_INI 1 /* INIファイル */\r
\r
-#define REG_SECT_MAX (16*1024) /* レジストリの1セクションの最大データサイズ */\r
+// UTF-8対応\r
+//#define REG_SECT_MAX (16*1024) /* レジストリの1セクションの最大データサイズ */\r
+#define REG_SECT_MAX (64*1024) /* レジストリの1セクションの最大データサイズ */\r
\r
/*===== ホスト設定で明示的に指定するホストのタイプ =====*/\r
\r
#define CRYPT_FTPIS 2\r
#define CRYPT_SFTP 3\r
\r
+// FEAT対応\r
+// UTF-8対応\r
+#define FEATURE_UTF8 0x00000001\r
+// MLSD対応\r
+#define FEATURE_MLSD 0x00000002\r
+// IPv6対応\r
+#define FEATURE_EPRT 0x00000004\r
+#define FEATURE_EPSV 0x00000008\r
+\r
+// 暗号化通信対応\r
+// REG_SECT_MAXの値を加味する必要がある\r
+#define MAX_CERT_CACHE_HASH 256\r
+\r
\r
/*=================================================\r
* ストラクチャ\r
char DialEntry[RAS_NAME_LEN+1]; /* ダイアルアップエントリ */\r
// 暗号化通信対応\r
int CryptMode; /* 暗号化通信モード (CRYPT_xxx) */\r
+ int UseNoEncryption; /* 暗号化なしで接続する (YES/NO) */\r
int UseFTPES; /* FTPESで接続する (YES/NO) */\r
int UseFTPIS; /* FTPISで接続する (YES/NO) */\r
int UseSFTP; /* SFTPで接続する (YES/NO) */\r
+ char PrivateKey[PRIVATE_KEY_LEN+1]; /* テキスト形式の秘密鍵 */\r
+ // 同時接続対応\r
+ int MaxThreadCount; /* 同時接続数 */\r
+ // FEAT対応\r
+ int Feature; /* 利用可能な機能のフラグ (FEATURE_xxx) */\r
+ // MLSD対応\r
+ int UseMLSD; /* "MLSD"コマンドを使用する */\r
+ // IPv6対応\r
+ int UseIPv6; /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
} HOSTDATA;\r
\r
\r
int DialupNotify; /* 再接続の際に確認する (YES/NO) */\r
char DialEntry[RAS_NAME_LEN+1]; /* ダイアルアップエントリ */\r
// 暗号化通信対応\r
+ int UseNoEncryption; /* 暗号化なしで接続する (YES/NO) */\r
int UseFTPES; /* FTPESで接続する (YES/NO) */\r
int UseFTPIS; /* FTPISで接続する (YES/NO) */\r
int UseSFTP; /* SFTPで接続する (YES/NO) */\r
+ char PrivateKey[PRIVATE_KEY_LEN+1]; /* テキスト形式の秘密鍵 */\r
+ // 同時接続対応\r
+ int MaxThreadCount; /* 同時接続数 */\r
+ // MLSD対応\r
+ int UseMLSD; /* "MLSD"コマンドを使用する */\r
+ // IPv6対応\r
+ int UseIPv6; /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
struct historydata *Next;\r
} HISTORYDATA;\r
\r
int Mode; /* 転送モード (EXIST_xxx) */\r
HWND hWndTrans; /* 転送中ダイアログのウインドウハンドル */\r
int Abort; /* 転送中止フラグ (ABORT_xxx) */\r
- // 暗号化通信対応\r
- int CryptMode; /* 暗号化通信モード (CRYPT_xxx) */\r
+ // 同時接続対応\r
+ int ThreadCount;\r
struct transpacket *Next;\r
} TRANSPACKET;\r
\r
void ResetAutoExitFlg(void);\r
int AskAutoExit(void);\r
// 暗号化通信対応\r
-BOOL __stdcall SSLTimeoutCallback();\r
+BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted);\r
+BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName);\r
\r
/*===== filelist.c =====*/\r
\r
void DispHostKanjiCode(void);\r
int AskHostKanjiCode(void);\r
void HideHostKanjiButton(void);\r
-// ローカルの漢字コード\r
+// UTF-8対応\r
void SetLocalKanjiCodeImm(int Mode);\r
void SetLocalKanjiCode(int Type);\r
void DispLocalKanjiCode(void);\r
int AskLocalKanjiCode(void);\r
void HideLocalKanjiButton(void);\r
-// ここまで\r
void SetHostKanaCnvImm(int Mode);\r
void SetHostKanaCnv(void);\r
void DispHostKanaCnv(void);\r
void SaveCurrentSetToHost(void);\r
int ReConnectCmdSkt(void);\r
// int ReConnectTrnSkt(void);\r
+// 同時接続対応\r
+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork);\r
SOCKET AskCmdCtrlSkt(void);\r
SOCKET AskTrnCtrlSkt(void);\r
void SktShareProh(void);\r
SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);\r
int AskTryingConnect(void);\r
-int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
+// 同時接続対応\r
+//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
+int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork);\r
// 暗号化通信対応\r
int AskCryptMode(void);\r
+int AskUseNoEncryption(void);\r
int AskUseFTPES(void);\r
int AskUseFTPIS(void);\r
int AskUseSFTP(void);\r
+char *AskPrivateKey(void);\r
+// 同時接続対応\r
+int AskMaxThreadCount(void);\r
+// FEAT対応\r
+int AskHostFeature(void);\r
+// MLSD対応\r
+int AskUseMLSD(void);\r
+// IPv6対応\r
+int AskUseIPv6(void);\r
\r
/*===== cache.c =====*/\r
\r
void CalcFileSizeProc(void);\r
void DispCWDerror(HWND hWnd);\r
void CopyURLtoClipBoard(void);\r
-int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);\r
+// 同時接続対応\r
+//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type);\r
+int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork);\r
void ReformToVMSstyleDirName(char *Path);\r
void ReformToVMSstylePathName(char *Path);\r
#if defined(HAVE_OPENVMS)\r
int DoDELE(char *Path);\r
int DoRENAME(char *Src, char *Dst);\r
int DoCHMOD(char *Path, char *Mode);\r
-int DoSIZE(char *Path, LONGLONG *Size);\r
-int DoMDTM(char *Path, FILETIME *Time);\r
+// 同時接続対応\r
+//int DoSIZE(char *Path, LONGLONG *Size);\r
+int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork);\r
+// 同時接続対応\r
+//int DoMDTM(char *Path, FILETIME *Time);\r
+int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork);\r
int DoQUOTE(char *CmdStr);\r
SOCKET DoClose(SOCKET Sock);\r
int DoQUIT(SOCKET ctrl_skt);\r
int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork);\r
int CommandProcCmd(char *Reply, char *fmt, ...);\r
-int CommandProcTrn(char *Reply, char *fmt, ...);\r
+// 同時接続対応\r
+//int CommandProcTrn(char *Reply, char *fmt, ...);\r
+int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...);\r
int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...);\r
int SendData(SOCKET Skt, char *Data, int Size, int Mode, int *CancelCheckWork);\r
int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp);\r
\r
void SetOption(int Start);\r
int SortSetting(void);\r
+// hostman.cで使用\r
+int GetDecimalText(HWND hDlg, int Ctrl);\r
+void SetDecimalText(HWND hDlg, int Ctrl, int Num);\r
+void CheckRange2(int *Cur, int Max, int Min);\r
+void AddTextToListBox(HWND hDlg, char *Str, int CtrlList, int BufSize);\r
+void SetMultiTextToList(HWND hDlg, int CtrlList, char *Text);\r
+void GetMultiTextFromList(HWND hDlg, int CtrlList, char *Buf, int BufSize);\r
\r
/*===== bookmark.c =====*/\r
\r
SOCKET do_accept(SOCKET s, struct sockaddr *addr, int *addrlen);\r
int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOut, int *CancelCheckWork);\r
int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int *CancelCheckWork);\r
+// 同時接続対応\r
+void RemoveReceivedData(SOCKET s);\r
int CheckClosedAndReconnect(void);\r
void CheckAllEventClosed(void);\r
\r