ApplianceImpl.h revision ab72c8adeca8d8053cacd95ad7afe3328cb6f86a
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/* $Id$ */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/** @file
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync *
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * VirtualBox COM class implementation
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/*
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2012 Oracle Corporation
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync *
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * available from http://www.virtualbox.org. This file is free software;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * General Public License (GPL) as published by the Free Software
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#ifndef ____H_APPLIANCEIMPL
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#define ____H_APPLIANCEIMPL
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
b8ae33177906f4130b85b7c861cae0e78ed4859bvboxsync/* VBox includes */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#include "VirtualBoxBase.h"
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync/* Todo: This file needs massive cleanup. Split IAppliance in a public and
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync * private classes. */
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync#include <iprt/tar.h>
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync#include <iprt/circbuf.h>
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync#include <VBox/vd.h>
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync#include <iprt/sha.h>
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync#include "ovfreader.h"
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync#include <set>
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsync/* VBox forward declarations */
4651430e55b9df9726347e3e3968618e540fe729vboxsyncclass Progress;
4651430e55b9df9726347e3e3968618e540fe729vboxsyncclass VirtualSystemDescription;
4651430e55b9df9726347e3e3968618e540fe729vboxsyncstruct VirtualSystemDescriptionEntry;
76f5d3db08b007661ae4af93200838d24683af52vboxsyncstruct LocationInfo;
8a99522dee886d4ed00c8cd18788e9e722febd71vboxsynctypedef struct VDINTERFACE *PVDINTERFACE;
8a99522dee886d4ed00c8cd18788e9e722febd71vboxsynctypedef struct VDINTERFACEIO *PVDINTERFACEIO;
454ac5c6ef4960887035ceea6b5247789d3272davboxsynctypedef struct SHASTORAGE *PSHASTORAGE;
4651430e55b9df9726347e3e3968618e540fe729vboxsync
ab72c8adeca8d8053cacd95ad7afe3328cb6f86avboxsynctypedef enum applianceIOName { applianceIOTar, applianceIOFile, applianceIOSha } APPLIANCEIONAME;
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsyncnamespace ovf
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync{
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync struct HardDiskController;
21293ca6a2967f796ed30a6c8492911619476a48vboxsync struct VirtualSystem;
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync class OVFReader;
35d8d2372afb180daa0ba01af33a1922511d6b07vboxsync struct DiskImage;
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync struct EnvelopeData;
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync}
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsyncnamespace xml
4651430e55b9df9726347e3e3968618e540fe729vboxsync{
025f9c7729f643fb8780153dc0e6f1c76baddd69vboxsync class Document;
4651430e55b9df9726347e3e3968618e540fe729vboxsync class ElementNode;
4651430e55b9df9726347e3e3968618e540fe729vboxsync}
4651430e55b9df9726347e3e3968618e540fe729vboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsyncnamespace settings
4651430e55b9df9726347e3e3968618e540fe729vboxsync{
4651430e55b9df9726347e3e3968618e540fe729vboxsync class MachineConfigFile;
4651430e55b9df9726347e3e3968618e540fe729vboxsync}
4651430e55b9df9726347e3e3968618e540fe729vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncclass ATL_NO_VTABLE Appliance :
eeb2d581c99b451fb1a26a5870af65981dc9cd5dvboxsync public VirtualBoxBase,
0ce6ae9d6efed5d54222a13bbdabce9e688e4447vboxsync VBOX_SCRIPTABLE_IMPL(IAppliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync{
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncpublic:
e07acfb7f2dbb8bb40804024c79fd3139bdb3f24vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(Appliance, IAppliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_NOT_AGGREGATABLE(Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync BEGIN_COM_MAP(Appliance)
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IAppliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync END_COM_MAP()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_EMPTY_CTOR_DTOR (Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync
f2490dbf97c8247439446844458461b00e50beb0vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // public initializer/uninitializer for internal purposes only
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync HRESULT FinalConstruct() { return BaseFinalConstruct(); }
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync void FinalRelease() { uninit(); BaseFinalRelease(); }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
e52c9984c4f6b8ea141bc50a3bdaf31941d8cd7dvboxsync HRESULT init(VirtualBox *aVirtualBox);
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void uninit();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IAppliance properties */
ee5869bb73f07de9c139dc6a608836a7b5767933vboxsync STDMETHOD(COMGETTER(Path))(BSTR *aPath);
f6dde23cd488aee26203b38ec67220270f5c4273vboxsync STDMETHOD(COMGETTER(Disks))(ComSafeArrayOut(BSTR, aDisks));
f6dde23cd488aee26203b38ec67220270f5c4273vboxsync STDMETHOD(COMGETTER(VirtualSystemDescriptions))(ComSafeArrayOut(IVirtualSystemDescription*, aVirtualSystemDescriptions));
22ea904a6fe5c95f54c4374502747cc844ce8204vboxsync STDMETHOD(COMGETTER(Machines))(ComSafeArrayOut(BSTR, aMachines));
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IAppliance methods */
dc311b529996345ea65d51c87b60b6849642d894vboxsync /* Import methods */
b8ae33177906f4130b85b7c861cae0e78ed4859bvboxsync STDMETHOD(Read)(IN_BSTR path, IProgress **aProgress);
ee5869bb73f07de9c139dc6a608836a7b5767933vboxsync STDMETHOD(Interpret)(void);
8ae161fca703d669e1306fafee128914f831f72bvboxsync STDMETHOD(ImportMachines)(ComSafeArrayIn(ImportOptions_T, options), IProgress **aProgress);
dc311b529996345ea65d51c87b60b6849642d894vboxsync /* Export methods */
dc311b529996345ea65d51c87b60b6849642d894vboxsync STDMETHOD(CreateVFSExplorer)(IN_BSTR aURI, IVFSExplorer **aExplorer);
231051c77670a4142b7545d51bd2251ae603189dvboxsync STDMETHOD(Write)(IN_BSTR format, BOOL fManifest, IN_BSTR path, IProgress **aProgress);
dc311b529996345ea65d51c87b60b6849642d894vboxsync
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync STDMETHOD(GetWarnings)(ComSafeArrayOut(BSTR, aWarnings));
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* public methods only for internal purposes */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync static HRESULT setErrorStatic(HRESULT aResultCode,
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync const Utf8Str &aText)
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync {
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true);
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync }
c2029891dc7fbce0f08a378d0335568cf9cbb4c5vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* private instance data */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncprivate:
482a222498aae619afda0255a7edf4ebda97268cvboxsync /** weak VirtualBox parent */
d19316699d7f91959d88c850fd7e0d64840f39a7vboxsync VirtualBox* const mVirtualBox;
482a222498aae619afda0255a7edf4ebda97268cvboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync struct ImportStack;
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync struct TaskOVF;
d020036eb167a2f97f5010276fda5daa3f4773b3vboxsync struct Data; // opaque, defined in ApplianceImpl.cpp
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync Data *m;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync enum SetUpProgressMode { ImportFile, ImportS3, WriteFile, WriteS3 };
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync /*******************************************************************************
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync * General stuff
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ******************************************************************************/
25c5ce7baf4b227ea80250c46d427d0e9fdab4c1vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync bool isApplianceIdle();
d91dc86210d602f51a4701762488a5e696c80a45vboxsync HRESULT searchUniqueVMName(Utf8Str& aName) const;
d91dc86210d602f51a4701762488a5e696c80a45vboxsync HRESULT searchUniqueDiskImageFilePath(Utf8Str& aName) const;
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT setUpProgress(ComObjPtr<Progress> &pProgress,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync const Bstr &bstrDescription,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync SetUpProgressMode mode);
59d96bafa78f7257869e30b88f2f98142ef5928evboxsync void waitForAsyncProgress(ComObjPtr<Progress> &pProgressThis, ComPtr<IProgress> &pProgressAsync);
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync void addWarning(const char* aWarning, ...);
35d8d2372afb180daa0ba01af33a1922511d6b07vboxsync void disksWeight();
e07acfb7f2dbb8bb40804024c79fd3139bdb3f24vboxsync void parseBucket(Utf8Str &aPath, Utf8Str &aBucket);
b8ae33177906f4130b85b7c861cae0e78ed4859bvboxsync
6b9316bfe743cc7d2ee00d925f4ab455bc224e86vboxsync static DECLCALLBACK(int) taskThreadImportOrExport(RTTHREAD aThread, void *pvUser);
b8ae33177906f4130b85b7c861cae0e78ed4859bvboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync HRESULT initSetOfSupportedStandardsURI();
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync Utf8Str typeOfVirtualDiskFormatFromURI(Utf8Str type) const;
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync std::set<Utf8Str> URIFromTypeOfVirtualDiskFormat(Utf8Str type);
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync HRESULT initApplianceIONameMap();
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync Utf8Str applianceIOName(APPLIANCEIONAME type) const;
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync /*******************************************************************************
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync * Read stuff
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ******************************************************************************/
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT readImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT readFS(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT readFSOVF(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT readFSOVA(TaskOVF *pTask);
454ac5c6ef4960887035ceea6b5247789d3272davboxsync HRESULT readFSImpl(TaskOVF *pTask, const RTCString &strFilename, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage);
6b9316bfe743cc7d2ee00d925f4ab455bc224e86vboxsync HRESULT readS3(TaskOVF *pTask);
b8ae33177906f4130b85b7c861cae0e78ed4859bvboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync /*******************************************************************************
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync * Import stuff
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ******************************************************************************/
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT importImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT importFS(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT importFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT importFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT importS3(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync HRESULT readFileToBuf(const Utf8Str &strFile,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync void **ppvBuf,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync size_t *pcbSize,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync bool fCreateDigest,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync PVDINTERFACEIO pCallbacks,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync PSHASTORAGE pStorage);
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync HRESULT readTarFileToBuf(RTTAR tar,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync const Utf8Str &strFile,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync void **ppvBuf,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync size_t *pcbSize,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync bool fCreateDigest,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync PVDINTERFACEIO pCallbacks,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync PSHASTORAGE pStorage);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT verifyManifestFile(const Utf8Str &strFile, ImportStack &stack, void *pvBuf, size_t cbSize);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
d5bf937d132098565e18a0d1fc408fb777c5e5b6vboxsync void convertDiskAttachmentValues(const ovf::HardDiskController &hdc,
d76ca6cbea4e45aa218c74e33c784bde5e997ffcvboxsync uint32_t ulAddressOnParent,
d76ca6cbea4e45aa218c74e33c784bde5e997ffcvboxsync Bstr &controllerType,
15760030457c4d8548d42a9d543646b27eae7040vboxsync int32_t &lControllerPort,
d76ca6cbea4e45aa218c74e33c784bde5e997ffcvboxsync int32_t &lDevice);
d76ca6cbea4e45aa218c74e33c784bde5e997ffcvboxsync
35d8d2372afb180daa0ba01af33a1922511d6b07vboxsync void importOneDiskImage(const ovf::DiskImage &di,
ceec11f70ccba5b30ce0a34c66116a09155aeb6evboxsync Utf8Str *strTargetPath,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ComObjPtr<Medium> &pTargetHD,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ImportStack &stack,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync PVDINTERFACEIO pCallbacks,
454ac5c6ef4960887035ceea6b5247789d3272davboxsync PSHASTORAGE pStorage);
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
21293ca6a2967f796ed30a6c8492911619476a48vboxsync void importMachineGeneric(const ovf::VirtualSystem &vsysThis,
21293ca6a2967f796ed30a6c8492911619476a48vboxsync ComObjPtr<VirtualSystemDescription> &vsdescThis,
21293ca6a2967f796ed30a6c8492911619476a48vboxsync ComPtr<IMachine> &pNewMachine,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ImportStack &stack,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync PVDINTERFACEIO pCallbacks,
454ac5c6ef4960887035ceea6b5247789d3272davboxsync PSHASTORAGE pStorage);
2c1d8cd8efdd4c486ff681135035d24111b03af8vboxsync void importVBoxMachine(ComObjPtr<VirtualSystemDescription> &vsdescThis,
35d8d2372afb180daa0ba01af33a1922511d6b07vboxsync ComPtr<IMachine> &pNewMachine,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ImportStack &stack,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync PVDINTERFACEIO pCallbacks,
454ac5c6ef4960887035ceea6b5247789d3272davboxsync PSHASTORAGE pStorage);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync void importMachines(ImportStack &stack,
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync PVDINTERFACEIO pCallbacks,
454ac5c6ef4960887035ceea6b5247789d3272davboxsync PSHASTORAGE pStorage);
35d8d2372afb180daa0ba01af33a1922511d6b07vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync /*******************************************************************************
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync * Write stuff
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync ******************************************************************************/
7a71f66d53a7dcdf19a7a357e99e560fda812dc3vboxsync
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync HRESULT writeImpl(ovf::OVFVersion_T aFormat, const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress);
d20e5d189feff7841cc3f40e5c9cca8c86b45eb5vboxsync
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT writeFS(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT writeFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT writeFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock);
454ac5c6ef4960887035ceea6b5247789d3272davboxsync HRESULT writeFSImpl(TaskOVF *pTask, AutoWriteLockBase& writeLock, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync HRESULT writeS3(TaskOVF *pTask);
382dd16193dd5770e53a99d3e3f3bc4e96f1ddd8vboxsync
f2490dbf97c8247439446844458461b00e50beb0vboxsync struct XMLStack;
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync void buildXML(AutoWriteLockBase& writeLock,
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync xml::Document &doc,
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync XMLStack &stack,
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync const Utf8Str &strPath,
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync ovf::OVFVersion_T enFormat);
025f9c7729f643fb8780153dc0e6f1c76baddd69vboxsync void buildXMLForOneVirtualSystem(AutoWriteLockBase& writeLock,
025f9c7729f643fb8780153dc0e6f1c76baddd69vboxsync xml::ElementNode &elmToAddVirtualSystemsTo,
6a801286d1ede5d68a7490a9cd2a6ba0634ff18avboxsync std::list<xml::ElementNode*> *pllElementsWithUuidAttributes,
f2490dbf97c8247439446844458461b00e50beb0vboxsync ComObjPtr<VirtualSystemDescription> &vsdescThis,
62c8fef246519d59ee7ad41dd71de75b96b3552bvboxsync ovf::OVFVersion_T enFormat,
f2490dbf97c8247439446844458461b00e50beb0vboxsync XMLStack &stack);
f2490dbf97c8247439446844458461b00e50beb0vboxsync
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync HRESULT preCheckImageAvailability(PSHASTORAGE pSHAStorage,
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync RTCString &availableImage);
37e4655312fa6433c756cfa05a4db6b72e0c4344vboxsync
db85b6b8ce514217c1fb35d04b0854a65dc299f3vboxsync friend class Machine;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync};
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
76f5d3db08b007661ae4af93200838d24683af52vboxsyncvoid parseURI(Utf8Str strUri, LocationInfo &locInfo);
76f5d3db08b007661ae4af93200838d24683af52vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncstruct VirtualSystemDescriptionEntry
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync{
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync uint32_t ulIndex; // zero-based index of this entry within array
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync VirtualSystemDescriptionType_T type; // type of this entry
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync Utf8Str strRef; // reference number (hard disk controllers only)
40becad9511726726c5959a8ad8b62fb3e1c020cvboxsync Utf8Str strOvf; // original OVF value (type-dependent)
fbf482cad760a830bc8789ad639162019954ba80vboxsync Utf8Str strVboxSuggested; // configuration value (type-dependent); original value suggested by interpret()
fbf482cad760a830bc8789ad639162019954ba80vboxsync Utf8Str strVboxCurrent; // configuration value (type-dependent); current value, either from interpret() or setFinalValue()
fbf482cad760a830bc8789ad639162019954ba80vboxsync Utf8Str strExtraConfigSuggested; // extra configuration key=value strings (type-dependent); original value suggested by interpret()
fbf482cad760a830bc8789ad639162019954ba80vboxsync Utf8Str strExtraConfigCurrent; // extra configuration key=value strings (type-dependent); current value, either from interpret() or setFinalValue()
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsync
2c1d8cd8efdd4c486ff681135035d24111b03af8vboxsync uint32_t ulSizeMB; // hard disk images only: a copy of ovf::DiskImage::ulSuggestedSizeMB
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync};
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncclass ATL_NO_VTABLE VirtualSystemDescription :
eeb2d581c99b451fb1a26a5870af65981dc9cd5dvboxsync public VirtualBoxBase,
0ce6ae9d6efed5d54222a13bbdabce9e688e4447vboxsync VBOX_SCRIPTABLE_IMPL(IVirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync{
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync friend class Appliance;
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncpublic:
e07acfb7f2dbb8bb40804024c79fd3139bdb3f24vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(VirtualSystemDescription, IVirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_NOT_AGGREGATABLE(VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync BEGIN_COM_MAP(VirtualSystemDescription)
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync VBOX_DEFAULT_INTERFACE_ENTRIES(IVirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync END_COM_MAP()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_EMPTY_CTOR_DTOR (VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // public initializer/uninitializer for internal purposes only
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync HRESULT FinalConstruct() { return BaseFinalConstruct(); }
c7a378ed2fbad681c0b674351d698ef20a368935vboxsync void FinalRelease() { uninit(); BaseFinalRelease(); }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync HRESULT init();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void uninit();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IVirtualSystemDescription properties */
23ab2e25f17cdd6af9c0448ee70905a8c1c82896vboxsync STDMETHOD(COMGETTER(Count))(ULONG *aCount);
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IVirtualSystemDescription methods */
f6dde23cd488aee26203b38ec67220270f5c4273vboxsync STDMETHOD(GetDescription)(ComSafeArrayOut(VirtualSystemDescriptionType_T, aTypes),
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync ComSafeArrayOut(BSTR, aRefs),
40becad9511726726c5959a8ad8b62fb3e1c020cvboxsync ComSafeArrayOut(BSTR, aOvfValues),
40becad9511726726c5959a8ad8b62fb3e1c020cvboxsync ComSafeArrayOut(BSTR, aVboxValues),
43e9355f77c0463e7ace350984bb5a09fb8c50a1vboxsync ComSafeArrayOut(BSTR, aExtraConfigValues));
611af5c9fc04865215e86b6e4906c9dfdfb6a381vboxsync
d07e901177d22a8f66c66f155c423a524ac07776vboxsync STDMETHOD(GetDescriptionByType)(VirtualSystemDescriptionType_T aType,
d07e901177d22a8f66c66f155c423a524ac07776vboxsync ComSafeArrayOut(VirtualSystemDescriptionType_T, aTypes),
d07e901177d22a8f66c66f155c423a524ac07776vboxsync ComSafeArrayOut(BSTR, aRefs),
d07e901177d22a8f66c66f155c423a524ac07776vboxsync ComSafeArrayOut(BSTR, aOvfValues),
d07e901177d22a8f66c66f155c423a524ac07776vboxsync ComSafeArrayOut(BSTR, aVboxValues),
d07e901177d22a8f66c66f155c423a524ac07776vboxsync ComSafeArrayOut(BSTR, aExtraConfigValues));
d07e901177d22a8f66c66f155c423a524ac07776vboxsync
f48fe310f85f13db0140bef980de1f56c2007957vboxsync STDMETHOD(GetValuesByType)(VirtualSystemDescriptionType_T aType,
f48fe310f85f13db0140bef980de1f56c2007957vboxsync VirtualSystemDescriptionValueType_T aWhich,
f48fe310f85f13db0140bef980de1f56c2007957vboxsync ComSafeArrayOut(BSTR, aValues));
f48fe310f85f13db0140bef980de1f56c2007957vboxsync
1b186b95b77faa977d3651bbfc13afb3f13e0225vboxsync STDMETHOD(SetFinalValues)(ComSafeArrayIn(BOOL, aEnabled),
40becad9511726726c5959a8ad8b62fb3e1c020cvboxsync ComSafeArrayIn(IN_BSTR, aVboxValues),
0b10203d41681eb80716c97a34ed6c3b6d5318ccvboxsync ComSafeArrayIn(IN_BSTR, aExtraConfigValues));
611af5c9fc04865215e86b6e4906c9dfdfb6a381vboxsync
d4f7483a46e1c44ae5fcc4195be291545ae720a4vboxsync STDMETHOD(AddDescription)(VirtualSystemDescriptionType_T aType,
d4f7483a46e1c44ae5fcc4195be291545ae720a4vboxsync IN_BSTR aVboxValue,
d4f7483a46e1c44ae5fcc4195be291545ae720a4vboxsync IN_BSTR aExtraConfigValue);
d4f7483a46e1c44ae5fcc4195be291545ae720a4vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* public methods only for internal purposes */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
f9cac318205d74ee5b35dabcf2bd39118f6293d7vboxsync void addEntry(VirtualSystemDescriptionType_T aType,
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync const Utf8Str &strRef,
2bb146bb69b6bb39e697cc915e53f4059c15b1bfvboxsync const Utf8Str &aOvfValue,
2bb146bb69b6bb39e697cc915e53f4059c15b1bfvboxsync const Utf8Str &aVboxValue,
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsync uint32_t ulSizeMB = 0,
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync const Utf8Str &strExtraConfig = "");
f9cac318205d74ee5b35dabcf2bd39118f6293d7vboxsync
f9cac318205d74ee5b35dabcf2bd39118f6293d7vboxsync std::list<VirtualSystemDescriptionEntry*> findByType(VirtualSystemDescriptionType_T aType);
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync const VirtualSystemDescriptionEntry* findControllerFromID(uint32_t id);
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
f7c0f913c4c22ee18059ff97055442566d0f14a1vboxsync void importVboxMachineXML(const xml::ElementNode &elmMachine);
f7c0f913c4c22ee18059ff97055442566d0f14a1vboxsync const settings::MachineConfigFile* getMachineConfig() const;
f7c0f913c4c22ee18059ff97055442566d0f14a1vboxsync
db85b6b8ce514217c1fb35d04b0854a65dc299f3vboxsync /* private instance data */
db85b6b8ce514217c1fb35d04b0854a65dc299f3vboxsyncprivate:
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync struct Data;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync Data *m;
3221ae1f7bf53d9cccdd578099f55f782dba1447vboxsync
3221ae1f7bf53d9cccdd578099f55f782dba1447vboxsync friend class Machine;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync};
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#endif // ____H_APPLIANCEIMPL
5e3a885d489b1c99d79d576813f8f321bae46927vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */