summaryrefslogtreecommitdiffstats
path: root/src/VBox/Main/include/MachineImplMoveVM.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/VBox/Main/include/MachineImplMoveVM.h')
-rw-r--r--src/VBox/Main/include/MachineImplMoveVM.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/VBox/Main/include/MachineImplMoveVM.h b/src/VBox/Main/include/MachineImplMoveVM.h
new file mode 100644
index 00000000..8130bb07
--- /dev/null
+++ b/src/VBox/Main/include/MachineImplMoveVM.h
@@ -0,0 +1,145 @@
+/* $Id: MachineImplMoveVM.h $ */
+/** @file
+ * Definition of MachineMoveVM
+ */
+
+/*
+ * Copyright (C) 2011-2019 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef MAIN_INCLUDED_MachineImplMoveVM_h
+#define MAIN_INCLUDED_MachineImplMoveVM_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#include "MachineImpl.h"
+#include "ProgressImpl.h"
+#include "ThreadTask.h"
+
+/////////////////////////////////////////////////////////////////////////////
+
+enum VBoxFolder_t
+{
+ VBox_UnknownFolderType = 0,
+ VBox_OutsideVMfolder,
+ VBox_SettingFolder,
+ VBox_LogFolder,
+ VBox_StateFolder,
+ VBox_SnapshotFolder
+};
+
+typedef struct
+{
+ bool fSnapshot;
+ Utf8Str strBaseName;
+ ComPtr<IMedium> pMedium;
+ uint32_t uIdx;
+ ULONG uWeight;
+} MEDIUMTASKMOVE;
+
+typedef struct
+{
+ RTCList<MEDIUMTASKMOVE> chain;
+ DeviceType_T devType;
+ bool fCreateDiffs;
+ bool fAttachLinked;
+} MEDIUMTASKCHAINMOVE;
+
+typedef struct
+{
+ Guid snapshotUuid;
+ Utf8Str strSaveStateFile;
+ ULONG uWeight;
+} SAVESTATETASKMOVE;
+
+struct fileList_t;
+
+class MachineMoveVM : public ThreadTask
+{
+ struct ErrorInfoItem
+ {
+ ErrorInfoItem(HRESULT aCode, const char* aDescription):
+ m_code(aCode),
+ m_description(aDescription == NULL ? "There is no description" : aDescription)
+ {
+ }
+
+ void printItem(bool fLog) const;
+
+ HRESULT m_code;
+ Utf8Str m_description;
+ };
+
+ RTCList<MEDIUMTASKCHAINMOVE> llMedias;
+ RTCList<SAVESTATETASKMOVE> llSaveStateFiles;
+ std::map<Utf8Str, MEDIUMTASKMOVE> finalMediumsMap;
+ std::map<Utf8Str, SAVESTATETASKMOVE> finalSaveStateFilesMap;
+ std::map<VBoxFolder_t, Utf8Str> vmFolders;
+ std::list<ErrorInfoItem> errorsList;
+
+ ComObjPtr<Machine> m_pMachine;
+ ComObjPtr<Progress> m_pProgress;
+ ComObjPtr<Progress> m_pRollBackProgress;
+ ComPtr<ISession> m_pSession;
+ ComPtr<IMachine> m_pSessionMachine;
+ Utf8Str m_targetPath;
+ Utf8Str m_type;
+ HRESULT result;
+
+public:
+ MachineMoveVM(ComObjPtr<Machine> aMachine,
+ const com::Utf8Str &aTargetPath,
+ const com::Utf8Str &aType,
+ ComObjPtr<Progress> &aProgress)
+ : ThreadTask("TaskMoveVM"),
+ m_pMachine(aMachine),
+ m_pProgress(aProgress),
+ m_targetPath(aTargetPath),
+ m_type (aType.isEmpty() == true ? "basic" : aType),
+ result(S_OK)
+ {
+ }
+
+ virtual ~MachineMoveVM()
+ {
+ }
+
+ HRESULT init();
+ static DECLCALLBACK(int) updateProgress(unsigned uPercent, void *pvUser);
+ static DECLCALLBACK(int) copyFileProgress(unsigned uPercentage, void *pvUser);
+ static void i_MoveVMThreadTask(MachineMoveVM* task);
+
+ void handler()
+ {
+ i_MoveVMThreadTask(this);
+ }
+
+ /* MachineCloneVM::start helper: */
+ HRESULT createMachineList(const ComPtr<ISnapshot> &pSnapshot, std::vector< ComObjPtr<Machine> > &aMachineList) const;
+ inline HRESULT queryBaseName(const ComPtr<IMedium> &pMedium, Utf8Str &strBaseName) const;
+ HRESULT queryMediasForAllStates(const std::vector<ComObjPtr<Machine> > &aMachineList);
+ void updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const;
+ HRESULT addSaveState(const ComObjPtr<Machine> &machine);
+ void printStateFile(settings::SnapshotsList &snl);
+ HRESULT getFilesList(const Utf8Str& strRootFolder, fileList_t &filesList);
+ HRESULT getFolderSize(const Utf8Str& strRootFolder, uint64_t& size);
+ HRESULT deleteFiles(const RTCList<Utf8Str>& listOfFiles);
+ HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles,
+ const Utf8Str& sourcePath, const Utf8Str& targetPath);
+ HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, const Utf8Str* strTargetFolder = NULL);
+ HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks);
+ bool isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium);
+};
+
+#endif /* !MAIN_INCLUDED_MachineImplMoveVM_h */
+/* vi: set tabstop=4 shiftwidth=4 expandtab: */
+