VirtualBox

source: vbox/trunk/include/VBox/GuestHost/DragAndDrop.h@ 55461

Last change on this file since 55461 was 55422, checked in by vboxsync, 10 years ago

DnD: Protocol overhaul with versioning added which now can communicate with Main.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1/* $Id: DragAndDrop.h 55422 2015-04-24 13:52:33Z vboxsync $ */
2/** @file
3 * DnD: Shared functions between host and guest.
4 */
5
6/*
7 * Copyright (C) 2014 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___VBox_GuestHost_DragAndDrop_h
28#define ___VBox_GuestHost_DragAndDrop_h
29
30#include <iprt/assert.h>
31#include <iprt/cdefs.h>
32#include <iprt/err.h>
33#include <iprt/file.h>
34#include <iprt/types.h>
35
36#include <iprt/cpp/list.h>
37#include <iprt/cpp/ministring.h>
38
39int DnDDirCreateDroppedFilesEx(const char *pszPath, char *pszDropDir, size_t cbDropDir);
40int DnDDirCreateDroppedFiles(char *pszDropDir, size_t cbDropDir);
41
42bool DnDMIMEHasFileURLs(const char *pcszFormat, size_t cchFormatMax);
43bool DnDMIMENeedsDropDir(const char *pcszFormat, size_t cchFormatMax);
44
45int DnDPathSanitizeFilename(char *pszPath, size_t cbPath);
46int DnDPathSanitize(char *pszPath, size_t cbPath);
47
48/** Keep the original paths, don't convert paths to relative ones. */
49#define DNDURILIST_FLAGS_ABSOLUTE_PATHS RT_BIT(0)
50
51class DnDURIObject
52{
53public:
54
55 enum Type
56 {
57 Unknown = 0,
58 File,
59 Directory
60 };
61
62 enum Dest
63 {
64 Source = 0,
65 Target
66 };
67
68 DnDURIObject(void);
69 DnDURIObject(Type type,
70 const RTCString &strSrcPath = "",
71 const RTCString &strDstPath = "",
72 uint32_t fMode = 0, uint64_t cbSize = 0);
73 virtual ~DnDURIObject(void);
74
75public:
76
77 const RTCString &GetSourcePath(void) const { return m_strSrcPath; }
78 const RTCString &GetDestPath(void) const { return m_strTgtPath; }
79 uint64_t GetMode(void) const { return m_fMode; }
80 uint64_t GetProcessed(void) const { return m_cbProcessed; }
81 uint64_t GetSize(void) const { return m_cbSize; }
82 Type GetType(void) const { return m_Type; }
83
84public:
85
86 int SetSize(uint64_t uSize) { m_cbSize = uSize; return VINF_SUCCESS; }
87
88public:
89
90 void Close(void);
91 bool IsComplete(void) const;
92 bool IsOpen(void) const;
93 int Open(Dest enmDest, uint64_t fOpen);
94 int OpenEx(const RTCString &strPath, Type enmType, Dest enmDest, uint64_t fMode = 0, uint32_t fFlags = 0);
95 int Read(void *pvBuf, size_t cbBuf, uint32_t *pcbRead);
96 int Write(const void *pvBuf, size_t cbBuf, uint32_t *pcbWritten);
97
98public:
99
100 static int RebaseURIPath(RTCString &strPath, const RTCString &strBaseOld = "", const RTCString &strBaseNew = "");
101
102protected:
103
104 void closeInternal(void);
105
106protected:
107
108 Type m_Type;
109 RTCString m_strSrcPath;
110 RTCString m_strTgtPath;
111 /** File mode. */
112 uint64_t m_fMode;
113 /** Size (in bytes) to read/write. */
114 uint64_t m_cbSize;
115 /** Bytes processed reading/writing. */
116 uint64_t m_cbProcessed;
117
118 union
119 {
120 RTFILE m_hFile;
121 } u;
122};
123
124class DnDURIList
125{
126public:
127
128 DnDURIList(void);
129 virtual ~DnDURIList(void);
130
131public:
132
133 int AppendNativePath(const char *pszPath, uint32_t fFlags);
134 int AppendNativePathsFromList(const char *pszNativePaths, size_t cbNativePaths, uint32_t fFlags);
135 int AppendNativePathsFromList(const RTCList<RTCString> &lstNativePaths, uint32_t fFlags);
136 int AppendURIPath(const char *pszURI, uint32_t fFlags);
137 int AppendURIPathsFromList(const char *pszURIPaths, size_t cbURIPaths, uint32_t fFlags);
138 int AppendURIPathsFromList(const RTCList<RTCString> &lstURI, uint32_t fFlags);
139
140 void Clear(void);
141 DnDURIObject &First(void) { return m_lstTree.first(); }
142 bool IsEmpty(void) { return m_lstTree.isEmpty(); }
143 void RemoveFirst(void);
144 int RootFromURIData(const void *pvData, size_t cbData, uint32_t fFlags);
145 RTCString RootToString(const RTCString &strBasePath = "", const RTCString &strSeparator = "\r\n");
146 size_t RootCount(void) { return m_lstRoot.size(); }
147 size_t TotalBytes(void) { return m_cbTotal; }
148
149protected:
150
151 int appendPathRecursive(const char *pcszPath, size_t cbBaseLen, uint32_t fFlags);
152
153protected:
154
155 /** List of all top-level file/directory entries.
156 * Note: All paths are kept internally as UNIX paths for
157 * easier conversion/handling! */
158 RTCList<RTCString> m_lstRoot;
159 /** List of all URI objects added. */
160 RTCList<DnDURIObject> m_lstTree;
161 /** Total size of all URI objects, that is, the file
162 * size of all objects (in bytes). */
163 size_t m_cbTotal;
164};
165#endif /* ___VBox_GuestHost_DragAndDrop_h */
166
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette