xref: /reactos/dll/shellext/shellbtrfs/recv.h (revision fc82f8e2)
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