X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;ds=sidebyside;f=common.h;h=bd7737ee07634944608297b94688db56f47d6906;hb=c3ccec885437f6ad3e4f4cee46b64f6f8700f5a3;hp=37573450c429e71902f4080967c19011b203140f;hpb=193bc37b9f55b9a1dd24a72e06203cb1503eab15;p=ffftp%2Fffftp.git diff --git a/common.h b/common.h index 3757345..bd7737e 100644 --- a/common.h +++ b/common.h @@ -70,12 +70,14 @@ //#define VER_STR "1.97b" //#define VER_NUM 1921 /* 設定バージョン */ //#define PROGRAM_VERSION_NUM 1972 /* バージョン */ -#define VER_STR "1.99" -#define VER_NUM 1980 /* 設定バージョン */ -#define PROGRAM_VERSION_NUM 1990 /* バージョン */ +#define VER_STR "1.98d" +#define VER_NUM 1984 /* 設定バージョン */ +#define PROGRAM_VERSION_NUM 1984 /* バージョン */ -#define MYWEB_URL "http://www2.biglobe.ne.jp/~sota/ffftp-qa.html" +// SourceForge.JPによるフォーク +//#define MYWEB_URL "http://www2.biglobe.ne.jp/~sota/ffftp-qa.html" +#define MYWEB_URL "http://sourceforge.jp/projects/ffftp/" @@ -139,6 +141,9 @@ #define ONELINE_BUF_SIZE (10*1024) +// 暗号化通信対応 +#define PRIVATE_KEY_LEN 4096 + /*===== 初期値 =====*/ #define SAMBA_HEX_TAG ':' /* Samba-HEX の区切り文字 */ @@ -292,13 +297,18 @@ #define LIST_UNIX_73 45 /* UNIX 73 */ #define LIST_UNIX_74 46 /* UNIX 74 */ #define LIST_UNIX_75 47 /* UNIX 75 */ +// linux-ftpd +#define LIST_UNIX_16 48 /* UNIX 16 */ // MLSD対応 -#define LIST_MLSD 48 +#define LIST_MLSD 49 #define LIST_MELCOM 0x100 /* MELCOM80 */ #define LIST_MASKFLG 0xFF +// UTF-8対応 +#define LIST_RAW_NAME 0x80000000 + /* ファイル一覧情報例 --------------- *LIST_UNIX_10 @@ -663,6 +673,15 @@ LIST_UNIX_70 61191 Aug-30-2002 17:30:38 FILENAME.C +// linux-ftpd +*LIST_UNIX_16 + 0 1 2 3 4 5 6 7 + ------------------------------------------------------- + 合計 12345 + drwxr-x--- 2 root root 4096 2011-12-06 23:39 . + drwxr-x--- 3 root root 4096 2011-12-06 23:39 .. + -rw-r----- 1 root root 251 2011-12-06 23:39 .hoge + ------------------------------------*/ /*===== 接続ウインドウの形式 =====*/ @@ -684,9 +703,12 @@ LIST_UNIX_70 #define KANJI_SMB_HEX 3 /* Samba-HEX */ #define KANJI_SMB_CAP 4 /* Samba-CAP */ #define KANJI_UTF8N 5 /* UTF-8 */ +// UTF-8対応 +#define KANJI_UTF8BOM 6 /* UTF-8 BOM */ #define KANJI_NOCNV -1 /* 漢字コード変換なし */ +// UTF-8対応 #define KANJI_AUTO -1 /*===== サウンド =====*/ @@ -879,6 +901,15 @@ LIST_UNIX_70 #define FEATURE_EPRT 0x00000004 #define FEATURE_EPSV 0x00000008 +// IPv6対応 +#define NTYPE_AUTO 0 /* 自動 */ +#define NTYPE_IPV4 1 /* TCP/IPv4 */ +#define NTYPE_IPV6 2 /* TCP/IPv6 */ + +// 暗号化通信対応 +// REG_SECT_MAXの値を加味する必要がある +#define MAX_CERT_CACHE_HASH 256 + /*================================================= * ストラクチャ @@ -906,6 +937,8 @@ typedef struct { int KanjiCode; /* ホストの漢字コード (KANJI_xxx) */ int KanaCnv; /* 半角カナを全角に変換(YES/NO) */ int NameKanjiCode; /* ファイル名の漢字コード (KANJI_xxx) */ + // UTF-8対応 + int CurNameKanjiCode; /* 自動判別後のファイル名の漢字コード (KANJI_xxx) */ int NameKanaCnv; /* ファイル名の半角カナを全角に変換(YES/NO) */ int Pasv; /* PASVモード (YES/NO) */ int FireWall; /* FireWallを使う (YES/NO) */ @@ -928,14 +961,23 @@ typedef struct { int UseFTPES; /* FTPESで接続する (YES/NO) */ int UseFTPIS; /* FTPISで接続する (YES/NO) */ int UseSFTP; /* SFTPで接続する (YES/NO) */ + char PrivateKey[PRIVATE_KEY_LEN+1]; /* テキスト形式の秘密鍵 */ // 同時接続対応 int MaxThreadCount; /* 同時接続数 */ + int ReuseCmdSkt; /* メインウィンドウのソケットを再利用する (YES/NO) */ + int NoDisplayUI; /* UIを表示しない (YES/NO) */ // FEAT対応 int Feature; /* 利用可能な機能のフラグ (FEATURE_xxx) */ // MLSD対応 int UseMLSD; /* "MLSD"コマンドを使用する */ // IPv6対応 - int UseIPv6; /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */ + int NetType; /* ネットワークの種類 (NTYPE_xxx) */ + int CurNetType; /* 接続中のネットワークの種類 (NTYPE_xxx) */ + // 自動切断対策 + int NoopInterval; /* 無意味なコマンドを送信する間隔(秒数、0で無効)*/ + // 再転送対応 + int TransferErrorMode; /* 転送エラー時の処理 (EXIST_xxx) */ + int TransferErrorNotify; /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */ } HOSTDATA; @@ -983,15 +1025,23 @@ typedef struct historydata { int DialupNotify; /* 再接続の際に確認する (YES/NO) */ char DialEntry[RAS_NAME_LEN+1]; /* ダイアルアップエントリ */ // 暗号化通信対応 + int UseNoEncryption; /* 暗号化なしで接続する (YES/NO) */ int UseFTPES; /* FTPESで接続する (YES/NO) */ int UseFTPIS; /* FTPISで接続する (YES/NO) */ int UseSFTP; /* SFTPで接続する (YES/NO) */ + char PrivateKey[PRIVATE_KEY_LEN+1]; /* テキスト形式の秘密鍵 */ // 同時接続対応 int MaxThreadCount; /* 同時接続数 */ + int ReuseCmdSkt; /* メインウィンドウのソケットを再利用する (YES/NO) */ // MLSD対応 int UseMLSD; /* "MLSD"コマンドを使用する */ // IPv6対応 - int UseIPv6; /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */ + int NetType; /* ネットワークの種類 (NTYPE_xxx) */ + // 自動切断対策 + int NoopInterval; /* NOOPコマンドを送信する間隔(秒数、0で無効)*/ + // 再転送対応 + int TransferErrorMode; /* 転送エラー時の処理 (EXIST_xxx) */ + int TransferErrorNotify; /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */ struct historydata *Next; } HISTORYDATA; @@ -1018,8 +1068,6 @@ typedef struct transpacket { int Mode; /* 転送モード (EXIST_xxx) */ HWND hWndTrans; /* 転送中ダイアログのウインドウハンドル */ int Abort; /* 転送中止フラグ (ABORT_xxx) */ - // 暗号化通信対応 - int CryptMode; /* 暗号化通信モード (CRYPT_xxx) */ // 同時接続対応 int ThreadCount; struct transpacket *Next; @@ -1163,9 +1211,11 @@ typedef struct { char Rsv; /* (予約) */ char Type; /* アドレスのタイプ */ /* 以後(可変長部分) */ - ulong AdrsInt; /* アドレス */ - ushort Port; /* ポート */ - char _dummy[2]; /* dummy */ + // IPv6対応 +// ulong AdrsInt; /* アドレス */ +// ushort Port; /* ポート */ +// char _dummy[2]; /* dummy */ + char _dummy[255+1+2]; /* dummy */ } SOCKS5REPLY; #define SOCKS5REPLY_SIZE 4 /* 最初の固定部分のサイズ */ @@ -1225,8 +1275,11 @@ int BackgrndMessageProc(void); void ResetAutoExitFlg(void); int AskAutoExit(void); // 暗号化通信対応 -BOOL __stdcall SSLTimeoutCallback(); -BOOL __stdcall SSLConfirmCallback(BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName); +BOOL __stdcall SSLTimeoutCallback(BOOL* pbAborted); +BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName); +BOOL LoadSSLRootCAFile(); +// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 +BOOL IsMainThread(); /*===== filelist.c =====*/ @@ -1265,6 +1318,8 @@ FILELIST *SearchFileList(char *Fname, FILELIST *Base, int Caps); int Assume1900or2000(int Year); void SetFilter(int *CancelCheckWork); void doDeleteRemoteFile(void); +// UTF-8対応 +int AnalyzeNameKanjiCode(int Num); /*===== toolmenu.c =====*/ @@ -1362,6 +1417,8 @@ void SetCurrentHost(int Num); void CopyDefaultHost(HOSTDATA *Set); int SearchHostName(char *Name); void ImportFromWSFTP(void); +// 暗号化通信対応 +int SetHostExcryption(int Num, int UseNoEncryption, int UseFTPES, int UseFTPIS, int UseSFTP); /*===== connect.c =====*/ @@ -1387,7 +1444,7 @@ void SaveCurrentSetToHost(void); int ReConnectCmdSkt(void); // int ReConnectTrnSkt(void); // 同時接続対応 -int ReConnectTrnSkt(SOCKET *Skt); +int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork); SOCKET AskCmdCtrlSkt(void); SOCKET AskTrnCtrlSkt(void); void SktShareProh(void); @@ -1396,22 +1453,38 @@ void DisconnectProc(void); void DisconnectSet(void); int AskConnecting(void); SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork); +// IPv6対応 +SOCKET connectsockIPv4(char *host, int port, char *PreMsg, int *CancelCheckWork); +SOCKET connectsockIPv6(char *host, int port, char *PreMsg, int *CancelCheckWork); SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork); +// IPv6対応 +SOCKET GetFTPListenSocketIPv4(SOCKET ctrl_skt, int *CancelCheckWork); +SOCKET GetFTPListenSocketIPv6(SOCKET ctrl_skt, int *CancelCheckWork); int AskTryingConnect(void); -int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data); +// 同時接続対応 +//int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data); +int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data, int *CancelCheckWork); // 暗号化通信対応 int AskCryptMode(void); +int AskUseNoEncryption(void); int AskUseFTPES(void); int AskUseFTPIS(void); int AskUseSFTP(void); +char *AskPrivateKey(void); // 同時接続対応 int AskMaxThreadCount(void); +int AskReuseCmdSkt(void); // FEAT対応 int AskHostFeature(void); // MLSD対応 int AskUseMLSD(void); // IPv6対応 -int AskUseIPv6(void); +int AskCurNetType(void); +// 自動切断対策 +int AskNoopInterval(void); +// 再転送対応 +int AskTransferErrorMode(void); +int AskTransferErrorNotify(void); /*===== cache.c =====*/ @@ -1447,17 +1520,23 @@ void ChangeDirBmarkProc(int MarkID); void ChangeDirDirectProc(int Win); void ChangeDirDropFileProc(WPARAM wParam); void ChmodProc(void); -BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//BOOL CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +INT_PTR CALLBACK ChmodDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); void SomeCmdProc(void); void CalcFileSizeProc(void); void DispCWDerror(HWND hWnd); void CopyURLtoClipBoard(void); -int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type); +// 同時接続対応 +//int ProcForNonFullpath(char *Path, char *CurDir, HWND hWnd, int Type); +int ProcForNonFullpath(SOCKET cSkt, char *Path, char *CurDir, HWND hWnd, int *CancelCheckWork); void ReformToVMSstyleDirName(char *Path); void ReformToVMSstylePathName(char *Path); #if defined(HAVE_OPENVMS) void ReformVMSDirName(char *DirName, int Flg); #endif +// 自動切断対策 +void NoopProc(void); /*===== local.c =====*/ @@ -1483,9 +1562,10 @@ int DoRENAME(char *Src, char *Dst); int DoCHMOD(char *Path, char *Mode); // 同時接続対応 //int DoSIZE(char *Path, LONGLONG *Size); +int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size, int *CancelCheckWork); +// 同時接続対応 //int DoMDTM(char *Path, FILETIME *Time); -int DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size); -int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time); +int DoMDTM(SOCKET cSkt, char *Path, FILETIME *Time, int *CancelCheckWork); int DoQUOTE(char *CmdStr); SOCKET DoClose(SOCKET Sock); int DoQUIT(SOCKET ctrl_skt); @@ -1493,7 +1573,7 @@ int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork); int CommandProcCmd(char *Reply, char *fmt, ...); // 同時接続対応 //int CommandProcTrn(char *Reply, char *fmt, ...); -int CommandProcTrn(SOCKET cSkt, char *Reply, char *fmt, ...); +int CommandProcTrn(SOCKET cSkt, char *Reply, int* CancelCheckWork, char *fmt, ...); int command(SOCKET cSkt, char *Reply, int *CancelCheckWork, char *fmt, ...); int SendData(SOCKET Skt, char *Data, int Size, int Mode, int *CancelCheckWork); int ReadReplyMessage(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork, char *Tmp); @@ -1607,8 +1687,12 @@ int ConnectRas(int Dialup, int UseThis, int Notify, char *Name); /*===== misc.c =====*/ int InputDialogBox(int Res, HWND hWnd, char *Title, char *Buf, int Max, int *Flg, int Help); -BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//BOOL CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +INT_PTR CALLBACK ExeEscDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//BOOL CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +INT_PTR CALLBACK ExeEscTextDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); void SetYenTail(char *Str); void RemoveYenTail(char *Str); void SetSlashTail(char *Str); @@ -1655,6 +1739,10 @@ int ConvertNum(int x, int Dir, const INTCONVTBL *Tbl, int Num); int MoveFileToTrashCan(char *Path); LONGLONG MakeLongLong(DWORD High, DWORD Low); char *MakeNumString(LONGLONG Num, char *Buf, BOOL Comma); +// 異なるファイルが表示されるバグ修正 +char* MakeDistinguishableFileName(char* Out, char* In); +// 環境依存の不具合対策 +char* GetAppTempPath(char* Buf); /*===== dlgsize.c =====*/ @@ -1696,7 +1784,10 @@ char *AskLocalFreeSpace(char *Path); int MakeSocketWin(HWND hWnd, HINSTANCE hInst); void DeleteSocketWin(void); -struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *CancelCheckWork); +// IPv6対応 +//struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *CancelCheckWork); +struct hostent *do_gethostbynameIPv4(const char *Name, char *Buf, int Len, int *CancelCheckWork); +struct hostent *do_gethostbynameIPv6(const char *Name, char *Buf, int Len, int *CancelCheckWork); SOCKET do_socket(int af, int type, int protocol); int do_connect(SOCKET s, const struct sockaddr *name, int namelen, int *CancelCheckWork); int do_closesocket(SOCKET s); @@ -1704,6 +1795,8 @@ int do_listen(SOCKET s, int backlog); SOCKET do_accept(SOCKET s, struct sockaddr *addr, int *addrlen); int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOut, int *CancelCheckWork); int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int *CancelCheckWork); +// 同時接続対応 +void RemoveReceivedData(SOCKET s); int CheckClosedAndReconnect(void); void CheckAllEventClosed(void);