OSDN Git Service

Fix bugs of drag-and-drop handling.
[ffftp/ffftp.git] / hostman.c
index 07c2ffc..e07dee7 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -103,6 +103,9 @@ static HOSTDATA TmpHost;                                    /* ホスト情報コピー用 */
 static int Apply;                                                      /* プロパティシートでOKを押したフラグ */\r
 static WNDPROC HostListProcPtr;\r
 \r
+// ホスト共通設定機能\r
+HOSTDATA DefaultHost;\r
+\r
 \r
 \r
 /*----- ホスト一覧ウインドウ --------------------------------------------------\r
@@ -127,7 +130,7 @@ int SelectHost(int Type)
 \r
        /* ホスト設定を保存 */\r
        SetNodeLevelAll();\r
-       SaveRegistory();\r
+       SaveRegistry();\r
 \r
        return(Sts);\r
 }\r
@@ -150,7 +153,9 @@ int SelectHost(int Type)
 static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
        static DIALOGSIZE DlgSize = {\r
-               { HOST_NEW, HOST_FOLDER, HOST_SET, HOST_COPY, HOST_DEL, HOST_DOWN, HOST_UP, IDHELP, HOST_SIZEGRIP, -1 },\r
+               // ホスト共通設定機能\r
+//             { HOST_NEW, HOST_FOLDER, HOST_SET, HOST_COPY, HOST_DEL, HOST_DOWN, HOST_UP, IDHELP, HOST_SIZEGRIP, -1 },\r
+               { HOST_NEW, HOST_FOLDER, HOST_SET, HOST_COPY, HOST_DEL, HOST_DOWN, HOST_UP, HOST_SET_DEFAULT, IDHELP, HOST_SIZEGRIP, -1 },\r
                { IDOK, IDCANCEL, HOST_SIZEGRIP, -1 },\r
                { HOST_LIST, -1 },\r
                { 0, 0 },\r
@@ -168,9 +173,18 @@ static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, L
        NM_TREEVIEWW *tView;\r
        HTREEITEM tViewPos;\r
        TV_HITTESTINFO HitInfo;\r
+       // バグ修正\r
+       RECT Rect;\r
 \r
        switch (message)\r
        {\r
+               // バグ修正\r
+               case WM_SIZE :\r
+                       GetWindowRect(hDlg, &Rect);\r
+                       DlgSizeChange(hDlg, &DlgSize, &Rect, 0);\r
+                       RedrawWindow(hDlg, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN);\r
+                   break;\r
+\r
                case WM_INITDIALOG :\r
                        /* TreeViewでのダブルクリックをつかまえるため */\r
                        // 64ビット対応\r
@@ -319,8 +333,11 @@ static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, L
                                                CurrentHost = Item.lParam;\r
                                                Level1 = IsNodeGroup(CurrentHost);\r
 \r
-                                               if(((Level1 == YES) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(groupdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)) ||\r
-                                                  ((Level1 == NO) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(hostdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)))\r
+                                               // バグ修正\r
+//                                             if(((Level1 == YES) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(groupdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)) ||\r
+//                                                ((Level1 == NO) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(hostdel_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)))\r
+                                               if(((Level1 == YES) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(groupdel_dlg), hDlg, ExeEscDialogProc) == YES)) ||\r
+                                                  ((Level1 == NO) && (DialogBox(GetFtpInst(), MAKEINTRESOURCE(hostdel_dlg), hDlg, ExeEscDialogProc) == YES)))\r
                                                {\r
                                                        DelHostFromList(CurrentHost);\r
                                                        if(CurrentHost >= Hosts)\r
@@ -536,6 +553,13 @@ static INT_PTR CALLBACK SelectHostProc(HWND hDlg, UINT message, WPARAM wParam, L
                                        }\r
                                        break;\r
 \r
+                               // ホスト共通設定機能\r
+                               case HOST_SET_DEFAULT :\r
+                                       CopyDefaultHost(&TmpHost);\r
+                                       if(DispHostSetDlg(hDlg) == YES)\r
+                                               SetDefaultHost(&TmpHost);\r
+                                       break;\r
+\r
                                case HOST_LIST :\r
                                        if(HIWORD(wParam) == LBN_DBLCLK)\r
                                                PostMessage(hDlg, WM_COMMAND, MAKEWORD(IDOK, 0), 0);\r
@@ -1048,6 +1072,8 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
                Set->UseFTPES = Pos->Set.UseFTPES;\r
                Set->UseFTPIS = Pos->Set.UseFTPIS;\r
                Set->UseSFTP = Pos->Set.UseSFTP;\r
+               strcpy(Set->PrivateKey, Pos->Set.PrivateKey);\r
+               Set->NoWeakEncryption = Pos->Set.NoWeakEncryption;\r
                // 同時接続対応\r
                Set->MaxThreadCount = Pos->Set.MaxThreadCount;\r
                Set->ReuseCmdSkt = Pos->Set.ReuseCmdSkt;\r
@@ -1060,6 +1086,8 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
                // 再転送対応\r
                Set->TransferErrorMode = Pos->Set.TransferErrorMode;\r
                Set->TransferErrorNotify = Pos->Set.TransferErrorNotify;\r
+               // セッションあたりの転送量制限対策\r
+               Set->TransferErrorReconnect = Pos->Set.TransferErrorReconnect;\r
                Sts = FFFTP_SUCCESS;\r
        }\r
        return(Sts);\r
@@ -1300,6 +1328,62 @@ void SetCurrentHost(int Num)
 \r
 void CopyDefaultHost(HOSTDATA *Set)\r
 {\r
+       // ホスト共通設定機能\r
+//     Set->Level = 0;\r
+//     strcpy(Set->HostName, "");\r
+//     strcpy(Set->HostAdrs, "");\r
+//     strcpy(Set->UserName, "");\r
+//     strcpy(Set->PassWord, "");\r
+//     strcpy(Set->Account, "");\r
+//     strcpy(Set->LocalInitDir, DefaultLocalPath);\r
+//     strcpy(Set->RemoteInitDir, "");\r
+//     memcpy(Set->BookMark, "\0\0", 2);\r
+//     strcpy(Set->ChmodCmd, CHMOD_CMD_NOR);\r
+//     strcpy(Set->LsName, LS_FNAME);\r
+//     strcpy(Set->InitCmd, "");\r
+//     Set->Port = PORT_NOR;\r
+//     Set->Anonymous = NO;\r
+//     Set->KanjiCode = KANJI_NOCNV;\r
+//     Set->KanaCnv = YES;\r
+//     Set->NameKanjiCode = KANJI_NOCNV;\r
+//     Set->NameKanaCnv = NO;\r
+//     Set->Pasv = YES;\r
+//     Set->FireWall = NO;\r
+//     Set->ListCmdOnly = YES;\r
+//     Set->UseNLST_R = YES;\r
+//     Set->LastDir = NO;\r
+//     Set->TimeZone = 9;                              /* GMT+9 (JST) */\r
+//     Set->HostType = HTYPE_AUTO;\r
+//     Set->SyncMove = NO;\r
+//     Set->NoFullPath = NO;\r
+//     Set->Sort = SORT_NOTSAVED;\r
+//     Set->Security = SECURITY_AUTO;\r
+//     Set->Dialup = NO;\r
+//     Set->DialupAlways = NO;\r
+//     Set->DialupNotify = YES;\r
+//     strcpy(Set->DialEntry, "");\r
+       memcpy(Set, &DefaultHost, sizeof(HOSTDATA));\r
+       return;\r
+}\r
+\r
+\r
+// ホスト共通設定機能\r
+void ResetDefaultHost(void)\r
+{\r
+       CopyDefaultDefaultHost(&DefaultHost);\r
+       return;\r
+}\r
+\r
+void SetDefaultHost(HOSTDATA *Set)\r
+{\r
+       memcpy(&DefaultHost, Set, sizeof(HOSTDATA));\r
+       return;\r
+}\r
+\r
+void CopyDefaultDefaultHost(HOSTDATA *Set)\r
+{\r
+       // 国際化対応\r
+       TIME_ZONE_INFORMATION tzi;\r
        Set->Level = 0;\r
        strcpy(Set->HostName, "");\r
        strcpy(Set->HostAdrs, "");\r
@@ -1325,7 +1409,10 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->ListCmdOnly = YES;\r
        Set->UseNLST_R = YES;\r
        Set->LastDir = NO;\r
-       Set->TimeZone = 9;                              /* GMT+9 (JST) */\r
+       // 国際化対応\r
+//     Set->TimeZone = 9;                              /* GMT+9 (JST) */\r
+       GetTimeZoneInformation(&tzi);\r
+       Set->TimeZone = (int)(tzi.Bias / -60);\r
        Set->HostType = HTYPE_AUTO;\r
        Set->SyncMove = NO;\r
        Set->NoFullPath = NO;\r
@@ -1342,6 +1429,7 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->UseFTPIS = YES;\r
        Set->UseSFTP = YES;\r
        strcpy(Set->PrivateKey, "");\r
+       Set->NoWeakEncryption = YES;\r
        // 同時接続対応\r
        Set->MaxThreadCount = 1;\r
        Set->ReuseCmdSkt = YES;\r
@@ -1353,14 +1441,15 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->NetType = NTYPE_AUTO;\r
        Set->CurNetType = NTYPE_AUTO;\r
        // 自動切断対策\r
-       Set->NoopInterval = 0;\r
+       Set->NoopInterval = 60;\r
        // 再転送対応\r
        Set->TransferErrorMode = EXIST_OVW;\r
        Set->TransferErrorNotify = YES;\r
+       // セッションあたりの転送量制限対策\r
+       Set->TransferErrorReconnect = YES;\r
        return;\r
 }\r
 \r
-\r
 /*----- 設定名一覧をウィンドウに送る ------------------------------------------\r
 *\r
 *      Parameter\r
@@ -1693,6 +1782,8 @@ static INT_PTR CALLBACK MainSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
        switch (iMessage)\r
        {\r
                case WM_INITDIALOG :\r
+                       // プロセス保護\r
+                       ProtectAllEditControls(hDlg);\r
                        SendDlgItemMessage(hDlg, HSET_HOST, EM_LIMITTEXT, HOST_NAME_LEN, 0);\r
                        SendDlgItemMessage(hDlg, HSET_ADRS, EM_LIMITTEXT, HOST_ADRS_LEN, 0);\r
                        SendDlgItemMessage(hDlg, HSET_USER, EM_LIMITTEXT, USER_NAME_LEN, 0);\r
@@ -1929,7 +2020,10 @@ static INT_PTR CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                { HSET_FN_EUC_CNV, KANJI_EUC },\r
                { HSET_FN_SMH_CNV, KANJI_SMB_HEX },\r
                { HSET_FN_SMC_CNV, KANJI_SMB_CAP },\r
-               { HSET_FN_UTF8N_CNV, KANJI_UTF8N }              // UTF-8対応\r
+               // UTF-8 HFS+対応\r
+//             { HSET_FN_UTF8N_CNV, KANJI_UTF8N }              // UTF-8対応\r
+               { HSET_FN_UTF8N_CNV, KANJI_UTF8N },             // UTF-8対応\r
+               { HSET_FN_UTF8HFSX_CNV, KANJI_UTF8HFSX }\r
        };\r
        #define NAMEKANJIBUTTONS        (sizeof(NameKanjiButton)/sizeof(RADIOBUTTON))\r
 \r
@@ -1939,6 +2033,9 @@ static INT_PTR CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                        SetRadioButtonByValue(hDlg, TmpHost.KanjiCode, KanjiButton, KANJIBUTTONS);\r
                        SendDlgItemMessage(hDlg, HSET_HANCNV, BM_SETCHECK, TmpHost.KanaCnv, 0);\r
                        SetRadioButtonByValue(hDlg, TmpHost.NameKanjiCode, NameKanjiButton, NAMEKANJIBUTTONS);\r
+                       // UTF-8 HFS+対応\r
+                       if(IsUnicodeNormalizationDllLoaded() == NO)\r
+                               EnableWindow(GetDlgItem(hDlg, HSET_FN_UTF8HFSX_CNV), FALSE);\r
                        SendDlgItemMessage(hDlg, HSET_FN_HANCNV, BM_SETCHECK, TmpHost.NameKanaCnv, 0);\r
                        return(TRUE);\r
 \r
@@ -1989,6 +2086,8 @@ static INT_PTR CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                                case HSET_FN_SMH_CNV :\r
                                case HSET_FN_SMC_CNV :\r
                                case HSET_FN_UTF8N_CNV :        // UTF-8対応\r
+                               // UTF-8 HFS+対応\r
+                               case HSET_FN_UTF8HFSX_CNV :\r
                                        EnableWindow(GetDlgItem(hDlg, HSET_FN_HANCNV), FALSE);\r
                                        break;\r
                        }\r
@@ -2265,18 +2364,11 @@ static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam
                                SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, BST_UNCHECKED, 0);\r
                                EnableWindow(GetDlgItem(hDlg, HSET_FTPIS), FALSE);\r
                        }\r
-                       if(IsPuTTYLoaded())\r
-                       {\r
-                               SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, TmpHost.UseSFTP, 0);\r
-                               SendDlgItemMessage(hDlg, HSET_PRIVATE_KEY, WM_SETTEXT, 0, (LPARAM)TmpHost.PrivateKey);\r
-                       }\r
-                       else\r
-                       {\r
-                               SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);\r
-                               EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);\r
-                               EnableWindow(GetDlgItem(hDlg, PKEY_FILE_BR), FALSE);\r
-                               EnableWindow(GetDlgItem(hDlg, HSET_PRIVATE_KEY), FALSE);\r
-                       }\r
+                       SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                       EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);\r
+                       EnableWindow(GetDlgItem(hDlg, PKEY_FILE_BR), FALSE);\r
+                       EnableWindow(GetDlgItem(hDlg, HSET_PRIVATE_KEY), FALSE);\r
+                       SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_SETCHECK, TmpHost.NoWeakEncryption, 0);\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -2290,11 +2382,7 @@ static INT_PTR CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam
                                                TmpHost.UseFTPES = SendDlgItemMessage(hDlg, HSET_FTPES, BM_GETCHECK, 0, 0);\r
                                                TmpHost.UseFTPIS = SendDlgItemMessage(hDlg, HSET_FTPIS, BM_GETCHECK, 0, 0);\r
                                        }\r
-                                       if(IsPuTTYLoaded())\r
-                                       {\r
-                                               TmpHost.UseSFTP = SendDlgItemMessage(hDlg, HSET_SFTP, BM_GETCHECK, 0, 0);\r
-                                               SendDlgItemMessage(hDlg, HSET_PRIVATE_KEY, WM_GETTEXT, PRIVATE_KEY_LEN+1, (LPARAM)TmpHost.PrivateKey);\r
-                                       }\r
+                                       TmpHost.NoWeakEncryption = SendDlgItemMessage(hDlg, HSET_NO_WEAK, BM_GETCHECK, 0, 0);\r
                                        Apply = YES;\r
                                        break;\r
 \r
@@ -2351,6 +2439,7 @@ static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                                SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 3, 0);\r
                        else\r
                                SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0);\r
+                       SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_SETCHECK, TmpHost.TransferErrorReconnect, 0);\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -2382,6 +2471,7 @@ static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
                                                TmpHost.TransferErrorNotify = NO;\r
                                                break;\r
                                        }\r
+                                       TmpHost.TransferErrorReconnect = SendDlgItemMessage(hDlg, HSET_ERROR_RECONNECT, BM_GETCHECK, 0, 0);\r
                                        Apply = YES;\r
                                        break;\r
 \r
@@ -2399,7 +2489,7 @@ static INT_PTR CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam,
 \r
 // 暗号化通信対応\r
 // ホストの暗号化設定を更新\r
-int SetHostExcryption(int Num, int UseNoEncryption, int UseFTPES, int UseFTPIS, int UseSFTP)\r
+int SetHostEncryption(int Num, int UseNoEncryption, int UseFTPES, int UseFTPIS, int UseSFTP)\r
 {\r
        int Sts;\r
        HOSTLISTDATA *Pos;\r