OSDN Git Service

Add options to add Zone Identifier to downloaded files.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 1 Jan 2018 07:38:28 +0000 (16:38 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Mon, 1 Jan 2018 07:59:31 +0000 (16:59 +0900)
14 files changed:
FFFTP_Eng_Release/FFFTP.exe
FFFTP_Eng_Release_64/FFFTP.exe
Release/FFFTP.exe
Release_64/FFFTP.exe
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/ffftp.rc
Resource_eng/resource.h
src/common.h
src/ftpproc.c
src/getput.c
src/main.c
src/option.c
src/registry.c

index 7d19ede..92a0451 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index a1ad71e..a9a0762 100644 (file)
Binary files a/FFFTP_Eng_Release_64/FFFTP.exe and b/FFFTP_Eng_Release_64/FFFTP.exe differ
index d9badbb..b719cae 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 2652022..10a8812 100644 (file)
Binary files a/Release_64/FFFTP.exe and b/Release_64/FFFTP.exe differ
index 80a1464..75faaf8 100644 (file)
@@ -1461,6 +1461,7 @@ BEGIN
     CONTROL         "EUC",TRMODE4_EUC_CNV,"Button",BS_AUTORADIOBUTTON,12,45,41,10\r
     CONTROL         "UTF-8",TRMODE4_UTF8N_CNV,"Button",BS_AUTORADIOBUTTON,12,57,41,10\r
     CONTROL         "UTF-8 BOM",TRMODE4_UTF8BOM_CNV,"Button",BS_AUTORADIOBUTTON,12,69,81,10\r
+    CONTROL         "\83C\83\93\83^\81[\83l\83b\83g\82©\82ç\93ü\8eè\82µ\82½\82à\82Ì\82Æ\82µ\82Ä\83t\83@\83C\83\8b\82É\8fî\95ñ\82ð\95t\89Á\82·\82é(&I)",TRMODE4_MARK_INTERNET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,96,196,10\r
 END\r
 \r
 opt_disp2_dlg DIALOG  0, 0, 211, 155\r
index 9c390a5..71e6d71 100644 (file)
 #define TRMODE_LISTERROR                1228\r
 #define MIRROR_NO_TRANSFER              1229\r
 #define HSET_NO_PASV_ADRS               1230\r
+#define TRMODE4_MARK_INTERNET           1231\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        200\r
 #define _APS_NEXT_COMMAND_VALUE         40183\r
-#define _APS_NEXT_CONTROL_VALUE         1231\r
+#define _APS_NEXT_CONTROL_VALUE         1232\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 8210132..a58a0fe 100644 (file)
@@ -1502,6 +1502,7 @@ BEGIN
     CONTROL         "EUC",TRMODE4_EUC_CNV,"Button",BS_AUTORADIOBUTTON,12,45,41,10\r
     CONTROL         "UTF-8",TRMODE4_UTF8N_CNV,"Button",BS_AUTORADIOBUTTON,12,57,41,10\r
     CONTROL         "UTF-8 BOM",TRMODE4_UTF8BOM_CNV,"Button",BS_AUTORADIOBUTTON,12,69,81,10\r
+    CONTROL         "Add information to files as obtained from the &Internet",TRMODE4_MARK_INTERNET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,96,196,10\r
 END\r
 \r
 opt_disp2_dlg DIALOG  0, 0, 211, 155\r
index 9c390a5..71e6d71 100644 (file)
 #define TRMODE_LISTERROR                1228\r
 #define MIRROR_NO_TRANSFER              1229\r
 #define HSET_NO_PASV_ADRS               1230\r
+#define TRMODE4_MARK_INTERNET           1231\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        200\r
 #define _APS_NEXT_COMMAND_VALUE         40183\r
-#define _APS_NEXT_CONTROL_VALUE         1231\r
+#define _APS_NEXT_CONTROL_VALUE         1232\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 7b2dd85..379716f 100644 (file)
 // 同時接続対応\r
 #define WM_RECONNECTSOCKET     (WM_USER+11)\r
 \r
+// ゾーンID設定追加\r
+#define WM_MARKFILEASDOWNLOADEDFROMINTERNET    (WM_USER+12)\r
+\r
 /*===== ホスト番号 =====*/\r
 /* ホスト番号は 0~ の値を取る */\r
 \r
@@ -1386,6 +1389,14 @@ typedef struct
        int Port;\r
 } REMOVEPORTMAPPINGDATA;\r
 \r
+// ゾーンID設定追加\r
+typedef struct\r
+{\r
+       int r;\r
+       HANDLE h;\r
+       char* Fname;\r
+} MARKFILEASDOWNLOADEDFROMINTERNETDATA;\r
+\r
 /*=================================================\r
 *              プロトタイプ\r
 *=================================================*/\r
@@ -1794,6 +1805,11 @@ int CheckPathViolation(TRANSPACKET *packet);
 LONGLONG AskTransferSizeLeft(void);\r
 LONGLONG AskTransferSizeTotal(void);\r
 int AskTransferErrorDisplay(void);\r
+// ゾーンID設定追加\r
+int LoadZoneID();\r
+void FreeZoneID();\r
+int IsZoneIDLoaded();\r
+int MarkFileAsDownloadedFromInternet(char* Fname);\r
 \r
 /*===== codecnv.c =====*/\r
 \r
index fa48c9b..8941c24 100644 (file)
@@ -113,7 +113,7 @@ extern int MakeAllDir;
 // ファイル一覧バグ修正\r
 extern int AbortOnListError;\r
 // ミラーリング設定追加\r
-extern int MirrorNoTransferContents; \r
+extern int MirrorNoTransferContents;\r
 // タイムスタンプのバグ修正\r
 extern int DispTimeSeconds;\r
 \r
index e8a2606..c85e971 100644 (file)
@@ -41,6 +41,9 @@
 #include <string.h>\r
 #include <mbstring.h>\r
 #include <time.h>\r
+// ゾーンID設定追加\r
+#undef _WIN32_IE\r
+#define _WIN32_IE _WIN32_IE_IE60SP2\r
 // IPv6対応\r
 //#include <winsock.h>\r
 #include <winsock2.h>\r
@@ -176,6 +179,9 @@ static int TransferErrorNotify = NO;
 static LONGLONG TransferSizeLeft = 0;\r
 static LONGLONG TransferSizeTotal = 0;\r
 static int TransferErrorDisplay = 0;\r
+// ゾーンID設定追加\r
+IZoneIdentifier* pZoneIdentifier;\r
+IPersistFile* pPersistFile;\r
 \r
 /*===== 外部参照 =====*/\r
 \r
@@ -192,6 +198,8 @@ extern int FolderAttrNum;
 extern int SendQuit;\r
 // 自動切断対策\r
 extern time_t LastDataConnectionTime;\r
+// ゾーンID設定追加\r
+extern int MarkAsInternet;\r
 \r
 \r
 /*----- ファイル転送スレッドを起動する ----------------------------------------\r
@@ -959,9 +967,12 @@ static ULONG WINAPI TransferThread(void *Dummy)
                                                // ミラーリング設定追加\r
                                                if(Pos->NoTransfer == NO)\r
                                                {\r
-                                                               Sts = DoDownload(TrnSkt, Pos, NO, &Canceled[Pos->ThreadCount]) / 100;\r
-                                                               if(Sts != FTP_COMPLETE)\r
-                                                                       LastError = YES;\r
+                                                       Sts = DoDownload(TrnSkt, Pos, NO, &Canceled[Pos->ThreadCount]) / 100;\r
+                                                       if(Sts != FTP_COMPLETE)\r
+                                                               LastError = YES;\r
+                                                       // ゾーンID設定追加\r
+                                                       if(MarkAsInternet == YES && IsZoneIDLoaded() == YES)\r
+                                                               MarkFileAsDownloadedFromInternet(Pos->LocalFile);\r
                                                }\r
 \r
                                                // ミラーリング設定追加\r
@@ -993,9 +1004,9 @@ static ULONG WINAPI TransferThread(void *Dummy)
                                        // ミラーリング設定追加\r
                                        if(Pos->NoTransfer == NO)\r
                                        {\r
-                                                       Sts = DoUpload(TrnSkt, Pos) / 100;\r
-                                                       if(Sts != FTP_COMPLETE)\r
-                                                               LastError = YES;\r
+                                               Sts = DoUpload(TrnSkt, Pos) / 100;\r
+                                               if(Sts != FTP_COMPLETE)\r
+                                                       LastError = YES;\r
                                        }\r
 \r
                                        // ホスト側の日時設定\r
@@ -4527,3 +4538,77 @@ int AskTransferErrorDisplay(void)
        return(TransferErrorDisplay);\r
 }\r
 \r
+// ゾーンID設定追加\r
+int LoadZoneID()\r
+{\r
+       int Sts;\r
+       Sts = FFFTP_FAIL;\r
+       if(IsMainThread())\r
+       {\r
+               if(CoCreateInstance(&CLSID_PersistentZoneIdentifier, NULL, CLSCTX_ALL, &IID_IZoneIdentifier, (void**)&pZoneIdentifier) == S_OK)\r
+               {\r
+                       if(pZoneIdentifier->lpVtbl->SetId(pZoneIdentifier, URLZONE_INTERNET) == S_OK)\r
+                       {\r
+                               if(pZoneIdentifier->lpVtbl->QueryInterface(pZoneIdentifier, &IID_IPersistFile, (void**)&pPersistFile) == S_OK)\r
+                                       Sts = FFFTP_SUCCESS;\r
+                       }\r
+               }\r
+       }\r
+       return Sts;\r
+}\r
+\r
+void FreeZoneID()\r
+{\r
+       if(IsMainThread())\r
+       {\r
+               if(pPersistFile != NULL)\r
+                       pPersistFile->lpVtbl->Release(pPersistFile);\r
+               pPersistFile = NULL;\r
+               if(pZoneIdentifier != NULL)\r
+                       pZoneIdentifier->lpVtbl->Release(pZoneIdentifier);\r
+               pZoneIdentifier = NULL;\r
+       }\r
+}\r
+\r
+int IsZoneIDLoaded()\r
+{\r
+       int Sts;\r
+       Sts = NO;\r
+       if(pZoneIdentifier != NULL && pPersistFile != NULL)\r
+               Sts = YES;\r
+       return Sts;\r
+}\r
+\r
+int MarkFileAsDownloadedFromInternet(char* Fname)\r
+{\r
+       int Sts;\r
+       WCHAR Tmp1[FMAX_PATH+1];\r
+       BSTR Tmp2;\r
+       MARKFILEASDOWNLOADEDFROMINTERNETDATA Data;\r
+       Sts = FFFTP_FAIL;\r
+       if(IsMainThread())\r
+       {\r
+               MtoW(Tmp1, FMAX_PATH, Fname, -1);\r
+               if((Tmp2 = SysAllocString(Tmp1)) != NULL)\r
+               {\r
+                       if(pPersistFile->lpVtbl->Save(pPersistFile, Tmp2, FALSE) == S_OK)\r
+                               Sts = FFFTP_SUCCESS;\r
+                       SysFreeString(Tmp2);\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(Data.h = CreateEvent(NULL, TRUE, FALSE, NULL))\r
+               {\r
+                       Data.Fname = Fname;\r
+                       if(PostMessage(GetMainHwnd(), WM_MARKFILEASDOWNLOADEDFROMINTERNET, 0, (LPARAM)&Data))\r
+                       {\r
+                               if(WaitForSingleObject(Data.h, INFINITE) == WAIT_OBJECT_0)\r
+                                       Sts = Data.r;\r
+                       }\r
+                       CloseHandle(Data.h);\r
+               }\r
+       }\r
+       return Sts;\r
+}\r
+\r
index 362556d..4352a91 100644 (file)
@@ -294,6 +294,8 @@ int AbortOnListError = YES;
 int MirrorNoTransferContents = NO; \r
 // FireWall設定追加\r
 int FwallNoSaveUser = NO; \r
+// ゾーンID設定追加\r
+int MarkAsInternet = NO; \r
 \r
 \r
 \r
@@ -416,6 +418,8 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
        LoadUPnP();\r
        // タスクバー進捗表示\r
        LoadTaskbarList3();\r
+       // ゾーンID設定追加\r
+       LoadZoneID();\r
 \r
        // UTF-8対応\r
        LoadUnicodeNormalizationDll();\r
@@ -524,6 +528,8 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
 #ifdef USE_OPENSSL\r
        FreeOpenSSL();\r
 #endif\r
+       // ゾーンID設定追加\r
+       FreeZoneID();\r
        // タスクバー進捗表示\r
        FreeTaskbarList3();\r
        // UPnP対応\r
@@ -2117,6 +2123,12 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                        ReconnectProc();\r
                        break;\r
 \r
+               // ゾーンID設定追加\r
+               case WM_MARKFILEASDOWNLOADEDFROMINTERNET :\r
+                       ((MARKFILEASDOWNLOADEDFROMINTERNETDATA*)lParam)->r = MarkFileAsDownloadedFromInternet(((MARKFILEASDOWNLOADEDFROMINTERNETDATA*)lParam)->Fname);\r
+                       SetEvent(((MARKFILEASDOWNLOADEDFROMINTERNETDATA*)lParam)->h);\r
+                       break;\r
+\r
                case WM_PAINT :\r
                        BeginPaint(hWnd, (LPPAINTSTRUCT) &ps);\r
                        EndPaint(hWnd, (LPPAINTSTRUCT) &ps);\r
@@ -2746,6 +2758,9 @@ void DoubleClickProc(int Win, int Mode, int App)
                                                                        // 同時接続対応\r
                                                                        CancelFlg = NO;\r
                                                                        Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
+                                                                       // ゾーンID設定追加\r
+                                                                       if(MarkAsInternet == YES && IsZoneIDLoaded() == YES)\r
+                                                                               MarkFileAsDownloadedFromInternet(Remote);\r
 //                                                             }\r
                                                        }\r
 \r
index dc7f0cc..fc7a27b 100644 (file)
@@ -195,9 +195,11 @@ extern int AutoCheckForUptatesInterval;
 // ファイル一覧バグ修正\r
 extern int AbortOnListError;\r
 // ミラーリング設定追加\r
-extern int MirrorNoTransferContents; \r
+extern int MirrorNoTransferContents;\r
 // FireWall設定追加\r
-extern int FwallNoSaveUser; \r
+extern int FwallNoSaveUser;\r
+// ゾーンID設定追加\r
+extern int MarkAsInternet;\r
 \r
 \r
 /*----- オプションのプロパティシート ------------------------------------------\r
@@ -825,6 +827,14 @@ static INT_PTR CALLBACK Trmode4SettingProc(HWND hDlg, UINT message, WPARAM wPara
        {\r
                case WM_INITDIALOG :\r
                        SetRadioButtonByValue(hDlg, AskLocalKanjiCode(), KanjiButton, KANJIBUTTONS);\r
+                       // ゾーンID設定追加\r
+                       if(IsZoneIDLoaded())\r
+                               SendDlgItemMessage(hDlg, TRMODE4_MARK_INTERNET, BM_SETCHECK, MarkAsInternet, 0);\r
+                       else\r
+                       {\r
+                               SendDlgItemMessage(hDlg, TRMODE4_MARK_INTERNET, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                               EnableWindow(GetDlgItem(hDlg, TRMODE4_MARK_INTERNET), FALSE);\r
+                       }\r
 \r
                        return(TRUE);\r
 \r
@@ -835,6 +845,9 @@ static INT_PTR CALLBACK Trmode4SettingProc(HWND hDlg, UINT message, WPARAM wPara
                                case PSN_APPLY :\r
                                        SetLocalKanjiCodeImm(AskRadioButtonValue(hDlg, KanjiButton, KANJIBUTTONS));\r
                                        SaveLocalKanjiCode();\r
+                                       // ゾーンID設定追加\r
+                                       if(IsZoneIDLoaded())\r
+                                               MarkAsInternet = SendDlgItemMessage(hDlg, TRMODE4_MARK_INTERNET, BM_GETCHECK, 0, 0);\r
                                        break;\r
 \r
                                case PSN_RESET :\r
index d587b5a..9c72538 100644 (file)
@@ -240,9 +240,11 @@ extern time_t LastAutoCheckForUpdates;
 // ファイル一覧バグ修正\r
 extern int AbortOnListError;\r
 // ミラーリング設定追加\r
-extern int MirrorNoTransferContents; \r
+extern int MirrorNoTransferContents;\r
 // FireWall設定追加\r
-extern int FwallNoSaveUser; \r
+extern int FwallNoSaveUser;\r
+// ゾーンID設定追加\r
+extern int MarkAsInternet;\r
 \r
 /*----- マスタパスワードの設定 ----------------------------------------------\r
 *\r
@@ -865,6 +867,8 @@ void SaveRegistry(void)
                                WriteIntValueToReg(hKey4, "MirNoTransfer", MirrorNoTransferContents);\r
                                // FireWall設定追加\r
                                WriteIntValueToReg(hKey4, "FwallShared", FwallNoSaveUser);\r
+                               // ゾーンID設定追加\r
+                               WriteIntValueToReg(hKey4, "MarkDFile", MarkAsInternet);\r
                        }\r
                        CloseSubKey(hKey4);\r
                }\r
@@ -1462,6 +1466,8 @@ int LoadRegistry(void)
                        ReadIntValueFromReg(hKey4, "MirNoTransfer", &MirrorNoTransferContents);\r
                        // FireWall設定追加\r
                        ReadIntValueFromReg(hKey4, "FwallShared", &FwallNoSaveUser);\r
+                       // ゾーンID設定追加\r
+                       ReadIntValueFromReg(hKey4, "MarkDFile", &MarkAsInternet);\r
 \r
                        CloseSubKey(hKey4);\r
                }\r