From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- src/VBox/Main/include/MachineImplMoveVM.h | 146 ++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/VBox/Main/include/MachineImplMoveVM.h (limited to 'src/VBox/Main/include/MachineImplMoveVM.h') diff --git a/src/VBox/Main/include/MachineImplMoveVM.h b/src/VBox/Main/include/MachineImplMoveVM.h new file mode 100644 index 00000000..f8e8eb8d --- /dev/null +++ b/src/VBox/Main/include/MachineImplMoveVM.h @@ -0,0 +1,146 @@ +/* $Id: MachineImplMoveVM.h $ */ +/** @file + * Definition of MachineMoveVM + */ + +/* + * Copyright (C) 2011-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#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 pMedium; + uint32_t uIdx; + ULONG uWeight; +} MEDIUMTASKMOVE; + +typedef struct +{ + RTCList chain; + DeviceType_T devType; + bool fCreateDiffs; + bool fAttachLinked; +} MEDIUMTASKCHAINMOVE; + +typedef struct +{ + Guid snapshotUuid; + Utf8Str strFile; + ULONG uWeight; +} SNAPFILETASKMOVE; + +struct fileList_t; + +class MachineMoveVM : public ThreadTask +{ + std::vector > machineList; + RTCList m_llMedia; + RTCList m_llSaveStateFiles; + RTCList m_llNVRAMFiles; + std::map m_finalMediaMap; + std::map m_finalSaveStateFilesMap; + std::map m_finalNVRAMFilesMap; + std::map m_vmFolders; + + ComObjPtr m_pMachine; + ComObjPtr m_pProgress; + ComObjPtr m_pRollBackProgress; + Utf8Str m_targetPath; + Utf8Str m_type; + HRESULT m_result; + +public: + DECLARE_TRANSLATE_METHODS(MachineMoveVM) + + MachineMoveVM(ComObjPtr aMachine, + const com::Utf8Str &aTargetPath, + const com::Utf8Str &aType, + ComObjPtr &aProgress) + : ThreadTask("TaskMoveVM") + , m_pMachine(aMachine) + , m_pProgress(aProgress) + , m_targetPath(aTargetPath) + , m_type(aType.isEmpty() ? "basic" : aType) + , m_result(S_OK) + { + } + + virtual ~MachineMoveVM() + { + } + + HRESULT init(); +private: + static DECLCALLBACK(int) updateProgress(unsigned uPercent, void *pvUser); + static DECLCALLBACK(int) copyFileProgress(unsigned uPercentage, void *pvUser); + static void i_MoveVMThreadTask(MachineMoveVM *task); + +public: + void handler() + { + i_MoveVMThreadTask(this); + } + +private: + HRESULT createMachineList(const ComPtr &pSnapshot); + inline HRESULT queryBaseName(const ComPtr &pMedium, Utf8Str &strBaseName) const; + HRESULT queryMediaForAllStates(); + void updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const; + HRESULT addSaveState(const ComObjPtr &machine); + HRESULT addNVRAM(const ComObjPtr &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 &listOfFiles); + void updatePathsToStateFiles(const Utf8Str &sourcePath, const Utf8Str &targetPath); + void updatePathsToNVRAMFiles(const Utf8Str &sourcePath, const Utf8Str &targetPath); + HRESULT moveAllDisks(const std::map &listOfDisks, const Utf8Str &strTargetFolder = Utf8Str::Empty); + HRESULT restoreAllDisks(const std::map &listOfDisks); + HRESULT isMediumTypeSupportedForMoving(const ComPtr &pMedium); +}; + +#endif /* !MAIN_INCLUDED_MachineImplMoveVM_h */ +/* vi: set tabstop=4 shiftwidth=4 expandtab: */ + -- cgit v1.2.3