X-Git-Url: http://git.sourceforge.jp/view?p=ffftp%2Fffftp.git;a=blobdiff_plain;f=common.h;h=bd7737ee07634944608297b94688db56f47d6906;hp=b22bbe1f859ae1418316ca3f2663d7cd441b1921;hb=c3ccec885437f6ad3e4f4cee46b64f6f8700f5a3;hpb=4a6f29d2616cdecbb9366e5f462c5815c64fbaf6 diff --git a/common.h b/common.h index b22bbe1..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 1990 /* 設定バージョン */ -#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/" @@ -295,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 @@ -666,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 + ------------------------------------*/ /*===== 接続ウインドウの形式 =====*/ @@ -687,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 /*===== サウンド =====*/ @@ -882,6 +901,11 @@ 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 @@ -913,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) */ @@ -938,12 +964,20 @@ typedef struct { 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; @@ -998,10 +1032,16 @@ typedef struct historydata { 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; @@ -1028,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; @@ -1173,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 /* 最初の固定部分のサイズ */ @@ -1235,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 =====*/ @@ -1275,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 =====*/ @@ -1372,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 =====*/ @@ -1397,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); @@ -1406,9 +1453,17 @@ 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); @@ -1418,12 +1473,18 @@ 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 =====*/ @@ -1459,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 =====*/ @@ -1495,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); @@ -1505,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); @@ -1619,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); @@ -1667,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 =====*/ @@ -1708,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); @@ -1716,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);