OSDN Git Service

Fix bugs of automatic detection for Kanji code of filenames.
[ffftp/ffftp.git] / common.h
index 4cfb78e..c9a450a 100644 (file)
--- a/common.h
+++ b/common.h
 //#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
 \r
 #define LIST_MASKFLG   0xFF\r
 \r
+// UTF-8対応\r
+#define LIST_RAW_NAME  0x80000000\r
+\r
 /* ファイル一覧情報例 ---------------\r
 \r
 *LIST_UNIX_10\r
@@ -684,9 +692,12 @@ LIST_UNIX_70
 #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
@@ -875,6 +886,13 @@ LIST_UNIX_70
 #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
@@ -903,6 +921,8 @@ typedef struct {
        int KanjiCode;                                          /* ホストの漢字コード (KANJI_xxx) */\r
        int KanaCnv;                                            /* 半角カナを全角に変換(YES/NO) */\r
        int NameKanjiCode;                                      /* ファイル名の漢字コード (KANJI_xxx) */\r
+       // UTF-8対応\r
+       int CurNameKanjiCode;                           /* 自動判別後のファイル名の漢字コード (KANJI_xxx) */\r
        int NameKanaCnv;                                        /* ファイル名の半角カナを全角に変換(YES/NO) */\r
        int Pasv;                                                       /* PASVモード (YES/NO) */\r
        int FireWall;                                           /* FireWallを使う (YES/NO) */\r
@@ -921,15 +941,21 @@ typedef struct {
        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
+       int ReuseCmdSkt;                                        /* メインウィンドウのソケットを再利用する (YES/NO) */\r
        // FEAT対応\r
        int Feature;                                            /* 利用可能な機能のフラグ (FEATURE_xxx) */\r
        // MLSD対応\r
        int UseMLSD;                                            /* "MLSD"コマンドを使用する */\r
+       // IPv6対応\r
+       int InetFamily;                                         /* IPv6接続かどうか (AF_INET/AF_INET6) */\r
+       int UseIPv6;                                            /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
 } HOSTDATA;\r
 \r
 \r
@@ -977,13 +1003,18 @@ typedef struct historydata {
        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
+       int ReuseCmdSkt;                                        /* メインウィンドウのソケットを再利用する (YES/NO) */\r
        // MLSD対応\r
        int UseMLSD;                                            /* "MLSD"コマンドを使用する */\r
+       // IPv6対応\r
+       int UseIPv6;                                            /* IPv6接続を許可しEPRT/EPSVコマンドを使用する */\r
        struct historydata *Next;\r
 } HISTORYDATA;\r
 \r
@@ -1010,8 +1041,6 @@ typedef struct transpacket {
        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
@@ -1155,9 +1184,11 @@ typedef struct {
        char Rsv;                               /* (予約) */\r
        char Type;                              /* アドレスのタイプ */\r
                                                        /* 以後(可変長部分) */\r
-       ulong AdrsInt;                  /* アドレス */\r
-       ushort Port;                    /* ポート */\r
-       char _dummy[2];                 /* dummy */\r
+       // IPv6対応\r
+//     ulong AdrsInt;                  /* アドレス */\r
+//     ushort Port;                    /* ポート */\r
+//     char _dummy[2];                 /* dummy */\r
+       char _dummy[255+1+2];   /* dummy */\r
 } SOCKS5REPLY;\r
 \r
 #define SOCKS5REPLY_SIZE 4     /* 最初の固定部分のサイズ */\r
@@ -1217,7 +1248,8 @@ int BackgrndMessageProc(void);
 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
@@ -1256,6 +1288,8 @@ FILELIST *SearchFileList(char *Fname, FILELIST *Base, int Caps);
 int Assume1900or2000(int Year);\r
 void SetFilter(int *CancelCheckWork);\r
 void doDeleteRemoteFile(void);\r
+// UTF-8対応\r
+int AnalyzeNameKanjiCode(int Num);\r
 \r
 \r
 /*===== toolmenu.c =====*/\r
@@ -1378,7 +1412,7 @@ void SaveCurrentSetToHost(void);
 int ReConnectCmdSkt(void);\r
 // int ReConnectTrnSkt(void);\r
 // 同時接続対応\r
-int ReConnectTrnSkt(SOCKET *Skt);\r
+int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork);\r
 SOCKET AskCmdCtrlSkt(void);\r
 SOCKET AskTrnCtrlSkt(void);\r
 void SktShareProh(void);\r
@@ -1387,20 +1421,34 @@ void DisconnectProc(void);
 void DisconnectSet(void);\r
 int AskConnecting(void);\r
 SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
+// IPv6対応\r
+SOCKET connectsockIPv4(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
+SOCKET connectsockIPv6(char *host, int port, char *PreMsg, int *CancelCheckWork);\r
 SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);\r
+// IPv6対応\r
+SOCKET GetFTPListenSocketIPv4(SOCKET ctrl_skt, int *CancelCheckWork);\r
+SOCKET GetFTPListenSocketIPv6(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
+int AskReuseCmdSkt(void);\r
 // FEAT対応\r
 int AskHostFeature(void);\r
 // MLSD対応\r
 int AskUseMLSD(void);\r
+// IPv6対応\r
+int AskInetFamily(void);\r
+int AskUseIPv6(void);\r
 \r
 /*===== cache.c =====*/\r
 \r
@@ -1441,7 +1489,9 @@ void SomeCmdProc(void);
 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
@@ -1472,9 +1522,10 @@ int DoRENAME(char *Src, char *Dst);
 int DoCHMOD(char *Path, char *Mode);\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 DoSIZE(SOCKET cSkt, char *Path, LONGLONG *Size);\r
-int DoMDTM(SOCKET cSkt, 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
@@ -1482,7 +1533,7 @@ int DoDirListCmdSkt(char *AddOpt, char *Path, int Num, int *CancelCheckWork);
 int CommandProcCmd(char *Reply, char *fmt, ...);\r
 // 同時接続対応\r
 //int CommandProcTrn(char *Reply, char *fmt, ...);\r
-int CommandProcTrn(SOCKET cSkt, 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
@@ -1685,7 +1736,10 @@ char *AskLocalFreeSpace(char *Path);
 \r
 int MakeSocketWin(HWND hWnd, HINSTANCE hInst);\r
 void DeleteSocketWin(void);\r
-struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *CancelCheckWork);\r
+// IPv6対応\r
+//struct hostent *do_gethostbyname(const char *Name, char *Buf, int Len, int *CancelCheckWork);\r
+struct hostent *do_gethostbynameIPv4(const char *Name, char *Buf, int Len, int *CancelCheckWork);\r
+struct hostent *do_gethostbynameIPv6(const char *Name, char *Buf, int Len, int *CancelCheckWork);\r
 SOCKET do_socket(int af, int type, int protocol);\r
 int do_connect(SOCKET s, const struct sockaddr *name, int namelen, int *CancelCheckWork);\r
 int do_closesocket(SOCKET s);\r
@@ -1693,8 +1747,14 @@ int do_listen(SOCKET s,  int backlog);
 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
+// IPv6対応\r
+char* AddressToStringIPv6(char* str, void* in6);\r
+char* inet6_ntoa(struct in6_addr in6);\r
+struct in6_addr inet6_addr(const char* cp);\r
 \r
 /*===== updatebell.c =====*/\r
 \r