1 /* Copyright (c) Mark Harmstone 2017 2 * 3 * This file is part of WinBtrfs. 4 * 5 * WinBtrfs is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU Lesser General Public Licence as published by 7 * the Free Software Foundation, either version 3 of the Licence, or 8 * (at your option) any later version. 9 * 10 * WinBtrfs is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Lesser General Public Licence for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public Licence 16 * along with WinBtrfs. If not, see <http://www.gnu.org/licenses/>. */ 17 18 #pragma once 19 20 #include <shlobj.h> 21 #include <string> 22 #include <vector> 23 #ifndef __REACTOS__ 24 #include "../btrfs.h" 25 #else 26 #include "btrfs.h" 27 #endif 28 29 extern LONG objs_loaded; 30 31 typedef struct { 32 BTRFS_UUID uuid; 33 UINT64 transid; 34 std::wstring path; 35 } subvol_cache; 36 37 class BtrfsRecv { 38 public: 39 BtrfsRecv() { 40 thread = NULL; 41 master = INVALID_HANDLE_VALUE; 42 dir = INVALID_HANDLE_VALUE; 43 running = FALSE; 44 cancelling = FALSE; 45 stransid = 0; 46 num_received = 0; 47 hwnd = NULL; 48 cache.clear(); 49 } 50 51 virtual ~BtrfsRecv() { 52 cache.clear(); 53 } 54 55 void Open(HWND hwnd, WCHAR* file, WCHAR* path, BOOL quiet); 56 DWORD recv_thread(); 57 INT_PTR CALLBACK RecvProgressDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); 58 59 private: 60 BOOL cmd_subvol(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 61 BOOL cmd_snapshot(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 62 BOOL cmd_mkfile(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 63 BOOL cmd_rename(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 64 BOOL cmd_link(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 65 BOOL cmd_unlink(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 66 BOOL cmd_rmdir(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 67 BOOL cmd_setxattr(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 68 BOOL cmd_removexattr(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 69 BOOL cmd_write(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 70 BOOL cmd_clone(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 71 BOOL cmd_truncate(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 72 BOOL cmd_chmod(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 73 BOOL cmd_chown(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 74 BOOL cmd_utimes(HWND hwnd, btrfs_send_command* cmd, UINT8* data); 75 void add_cache_entry(BTRFS_UUID* uuid, UINT64 transid, std::wstring path); 76 BOOL utf8_to_utf16(HWND hwnd, char* utf8, ULONG utf8len, std::wstring* utf16); 77 void ShowRecvError(int resid, ...); 78 BOOL find_tlv(UINT8* data, ULONG datalen, UINT16 type, void** value, ULONG* len); 79 BOOL do_recv(HANDLE f, UINT64* pos, UINT64 size); 80 81 HANDLE dir, parent, master, thread, lastwritefile; 82 HWND hwnd; 83 std::wstring streamfile, dirpath, subvolpath, lastwritepath; 84 DWORD lastwriteatt; 85 ULONG num_received; 86 UINT64 stransid; 87 BTRFS_UUID subvol_uuid; 88 BOOL running, cancelling; 89 std::vector<subvol_cache> cache; 90 }; 91