Changeset 49742 in vbox for trunk/src/VBox/Main/include/ApplianceImpl.h
- Timestamp:
- Dec 2, 2013 5:59:21 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 91043
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/ApplianceImpl.h
r49620 r49742 22 22 23 23 /* VBox includes */ 24 #include "VirtualBoxBase.h" 24 #include "VirtualSystemDescriptionWrap.h" 25 #include "ApplianceWrap.h" 25 26 #include "MediumFormatImpl.h" 26 27 … … 28 29 * private classes. */ 29 30 #include <iprt/tar.h> 30 #include <iprt/circbuf.h>31 #include <VBox/vd.h>32 #include <iprt/sha.h>33 34 31 #include "ovfreader.h" 35 32 #include <set> … … 50 47 struct HardDiskController; 51 48 struct VirtualSystem; 52 class OVFReader;49 class OVFReader; 53 50 struct DiskImage; 54 51 struct EnvelopeData; … … 67 64 68 65 class ATL_NO_VTABLE Appliance : 69 public VirtualBoxBase, 70 VBOX_SCRIPTABLE_IMPL(IAppliance) 66 public ApplianceWrap 71 67 { 72 68 public: 73 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(Appliance, IAppliance) 74 75 DECLARE_NOT_AGGREGATABLE(Appliance) 76 77 DECLARE_PROTECT_FINAL_CONSTRUCT() 78 79 BEGIN_COM_MAP(Appliance) 80 VBOX_DEFAULT_INTERFACE_ENTRIES(IAppliance) 81 END_COM_MAP() 82 83 DECLARE_EMPTY_CTOR_DTOR (Appliance) 84 85 86 87 // public initializer/uninitializer for internal purposes only 88 HRESULT FinalConstruct() { return BaseFinalConstruct(); } 89 void FinalRelease() { uninit(); BaseFinalRelease(); } 69 70 DECLARE_EMPTY_CTOR_DTOR(Appliance) 71 72 HRESULT FinalConstruct(); 73 void FinalRelease(); 74 90 75 91 76 HRESULT init(VirtualBox *aVirtualBox); 92 77 void uninit(); 93 78 94 /* IAppliance properties */95 STDMETHOD(COMGETTER(Path))(BSTR *aPath);96 STDMETHOD(COMGETTER(Disks))(ComSafeArrayOut(BSTR, aDisks));97 STDMETHOD(COMGETTER(VirtualSystemDescriptions))(ComSafeArrayOut(IVirtualSystemDescription*, aVirtualSystemDescriptions));98 STDMETHOD(COMGETTER(Machines))(ComSafeArrayOut(BSTR, aMachines));99 100 /* IAppliance methods */101 /* Import methods */102 STDMETHOD(Read)(IN_BSTR path, IProgress **aProgress);103 STDMETHOD(Interpret)(void);104 STDMETHOD(ImportMachines)(ComSafeArrayIn(ImportOptions_T, options), IProgress **aProgress);105 /* Export methods */106 STDMETHOD(CreateVFSExplorer)(IN_BSTR aURI, IVFSExplorer **aExplorer);107 STDMETHOD(Write)(IN_BSTR format, ComSafeArrayIn(ExportOptions_T, options), IN_BSTR path, IProgress **aProgress);108 109 STDMETHOD(GetWarnings)(ComSafeArrayOut(BSTR, aWarnings));110 111 79 /* public methods only for internal purposes */ 112 80 113 static HRESULT setErrorStatic(HRESULT aResultCode,114 const Utf8Str &aText)81 static HRESULT i_setErrorStatic(HRESULT aResultCode, 82 const Utf8Str &aText) 115 83 { 116 84 return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true); … … 120 88 private: 121 89 /** weak VirtualBox parent */ 90 // wrapped IAppliance properties 91 HRESULT getPath(com::Utf8Str &aPath); 92 HRESULT getDisks(std::vector<com::Utf8Str> &aDisks); 93 HRESULT getVirtualSystemDescriptions(std::vector<ComPtr<IVirtualSystemDescription> > &aVirtualSystemDescriptions); 94 HRESULT getMachines(std::vector<com::Utf8Str> &aMachines); 95 96 // wrapped IAppliance methods 97 HRESULT read(const com::Utf8Str &aFile, 98 ComPtr<IProgress> &aProgress); 99 HRESULT interpret(); 100 HRESULT importMachines(const std::vector<ImportOptions_T> &aOptions, 101 ComPtr<IProgress> &aProgress); 102 HRESULT createVFSExplorer(const com::Utf8Str &aURI, 103 ComPtr<IVFSExplorer> &aExplorer); 104 HRESULT write(const com::Utf8Str &aFormat, 105 const std::vector<ExportOptions_T> &aOptions, 106 const com::Utf8Str &aPath, 107 ComPtr<IProgress> &aProgress); 108 HRESULT getWarnings(std::vector<com::Utf8Str> &aWarnings); 109 110 122 111 VirtualBox* const mVirtualBox; 123 112 … … 133 122 ******************************************************************************/ 134 123 135 bool i sApplianceIdle();136 HRESULT searchUniqueVMName(Utf8Str& aName) const;137 HRESULT searchUniqueDiskImageFilePath(Utf8Str& aName) const;138 HRESULT setUpProgress(ComObjPtr<Progress> &pProgress,139 const Bstr &bstrDescription,140 SetUpProgressMode mode);141 void waitForAsyncProgress(ComObjPtr<Progress> &pProgressThis, ComPtr<IProgress> &pProgressAsync);142 void addWarning(const char* aWarning, ...);143 void disksWeight();144 void parseBucket(Utf8Str &aPath, Utf8Str &aBucket);145 146 static DECLCALLBACK(int) taskThreadImportOrExport(RTTHREAD aThread, void *pvUser);147 148 HRESULT i nitSetOfSupportedStandardsURI();149 150 Utf8Str typeOfVirtualDiskFormatFromURI(Utf8Str type) const;151 152 std::set<Utf8Str> URIFromTypeOfVirtualDiskFormat(Utf8Str type);153 154 HRESULT i nitApplianceIONameMap();155 156 Utf8Str applianceIOName(APPLIANCEIONAME type) const;157 158 HRESULT findMediumFormatFromDiskImage(const ovf::DiskImage &di, ComObjPtr<MediumFormat>& mf);124 bool i_isApplianceIdle(); 125 HRESULT i_searchUniqueVMName(Utf8Str& aName) const; 126 HRESULT i_searchUniqueDiskImageFilePath(Utf8Str& aName) const; 127 HRESULT i_setUpProgress(ComObjPtr<Progress> &pProgress, 128 const Bstr &bstrDescription, 129 SetUpProgressMode mode); 130 void i_waitForAsyncProgress(ComObjPtr<Progress> &pProgressThis, ComPtr<IProgress> &pProgressAsync); 131 void i_addWarning(const char* aWarning, ...); 132 void i_disksWeight(); 133 void i_parseBucket(Utf8Str &aPath, Utf8Str &aBucket); 134 135 static DECLCALLBACK(int) i_taskThreadImportOrExport(RTTHREAD aThread, void *pvUser); 136 137 HRESULT i_initSetOfSupportedStandardsURI(); 138 139 Utf8Str i_typeOfVirtualDiskFormatFromURI(Utf8Str type) const; 140 141 std::set<Utf8Str> i_URIFromTypeOfVirtualDiskFormat(Utf8Str type); 142 143 HRESULT i_initApplianceIONameMap(); 144 145 Utf8Str i_applianceIOName(APPLIANCEIONAME type) const; 146 147 HRESULT i_findMediumFormatFromDiskImage(const ovf::DiskImage &di, ComObjPtr<MediumFormat>& mf); 159 148 160 149 /******************************************************************************* … … 162 151 ******************************************************************************/ 163 152 164 HRESULT readImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress);165 166 HRESULT readFS(TaskOVF *pTask);167 HRESULT readFSOVF(TaskOVF *pTask);168 HRESULT readFSOVA(TaskOVF *pTask);169 HRESULT readFSImpl(TaskOVF *pTask, const RTCString &strFilename, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage);170 HRESULT readS3(TaskOVF *pTask);153 HRESULT i_readImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress); 154 155 HRESULT i_readFS(TaskOVF *pTask); 156 HRESULT i_readFSOVF(TaskOVF *pTask); 157 HRESULT i_readFSOVA(TaskOVF *pTask); 158 HRESULT i_readFSImpl(TaskOVF *pTask, const RTCString &strFilename, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage); 159 HRESULT i_readS3(TaskOVF *pTask); 171 160 172 161 /******************************************************************************* … … 174 163 ******************************************************************************/ 175 164 176 HRESULT importImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress); 177 178 HRESULT importFS(TaskOVF *pTask); 179 HRESULT importFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock); 180 HRESULT importFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock); 181 HRESULT importS3(TaskOVF *pTask); 182 183 HRESULT readFileToBuf(const Utf8Str &strFile, 184 void **ppvBuf, 185 size_t *pcbSize, 186 bool fCreateDigest, 187 PVDINTERFACEIO pCallbacks, 188 PSHASTORAGE pStorage); 189 HRESULT readTarFileToBuf(RTTAR tar, 190 const Utf8Str &strFile, 191 void **ppvBuf, 192 size_t *pcbSize, 193 bool fCreateDigest, 194 PVDINTERFACEIO pCallbacks, 195 PSHASTORAGE pStorage); 196 HRESULT verifyManifestFile(const Utf8Str &strFile, ImportStack &stack, void *pvBuf, size_t cbSize); 197 198 void convertDiskAttachmentValues(const ovf::HardDiskController &hdc, 199 uint32_t ulAddressOnParent, 200 Bstr &controllerType, 201 int32_t &lControllerPort, 202 int32_t &lDevice); 203 204 void importOneDiskImage(const ovf::DiskImage &di, 205 Utf8Str *strTargetPath, 206 ComObjPtr<Medium> &pTargetHD, 207 ImportStack &stack, 165 HRESULT i_importImpl(const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress); 166 167 HRESULT i_importFS(TaskOVF *pTask); 168 HRESULT i_importFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock); 169 HRESULT i_importFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock); 170 HRESULT i_importS3(TaskOVF *pTask); 171 172 HRESULT i_readFileToBuf(const Utf8Str &strFile, 173 void **ppvBuf, 174 size_t *pcbSize, 175 bool fCreateDigest, 208 176 PVDINTERFACEIO pCallbacks, 209 177 PSHASTORAGE pStorage); 210 211 void importMachineGeneric(const ovf::VirtualSystem &vsysThis, 212 ComObjPtr<VirtualSystemDescription> &vsdescThis, 213 ComPtr<IMachine> &pNewMachine, 178 HRESULT i_readTarFileToBuf(RTTAR tar, 179 const Utf8Str &strFile, 180 void **ppvBuf, 181 size_t *pcbSize, 182 bool fCreateDigest, 183 PVDINTERFACEIO pCallbacks, 184 PSHASTORAGE pStorage); 185 HRESULT i_verifyManifestFile(const Utf8Str &strFile, ImportStack &stack, void *pvBuf, size_t cbSize); 186 187 void i_convertDiskAttachmentValues(const ovf::HardDiskController &hdc, 188 uint32_t ulAddressOnParent, 189 Bstr &controllerType, 190 int32_t &lControllerPort, 191 int32_t &lDevice); 192 193 void i_importOneDiskImage(const ovf::DiskImage &di, 194 Utf8Str *strTargetPath, 195 ComObjPtr<Medium> &pTargetHD, 214 196 ImportStack &stack, 215 197 PVDINTERFACEIO pCallbacks, 216 198 PSHASTORAGE pStorage); 217 void importVBoxMachine(ComObjPtr<VirtualSystemDescription> &vsdescThis, 218 ComPtr<IMachine> &pNewMachine, 219 ImportStack &stack, 220 PVDINTERFACEIO pCallbacks, 221 PSHASTORAGE pStorage); 222 void importMachines(ImportStack &stack, 223 PVDINTERFACEIO pCallbacks, 224 PSHASTORAGE pStorage); 199 200 void i_importMachineGeneric(const ovf::VirtualSystem &vsysThis, 201 ComObjPtr<VirtualSystemDescription> &vsdescThis, 202 ComPtr<IMachine> &pNewMachine, 203 ImportStack &stack, 204 PVDINTERFACEIO pCallbacks, 205 PSHASTORAGE pStorage); 206 void i_importVBoxMachine(ComObjPtr<VirtualSystemDescription> &vsdescThis, 207 ComPtr<IMachine> &pNewMachine, 208 ImportStack &stack, 209 PVDINTERFACEIO pCallbacks, 210 PSHASTORAGE pStorage); 211 void i_importMachines(ImportStack &stack, 212 PVDINTERFACEIO pCallbacks, 213 PSHASTORAGE pStorage); 225 214 226 215 /******************************************************************************* … … 228 217 ******************************************************************************/ 229 218 230 HRESULT writeImpl(ovf::OVFVersion_T aFormat, const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress);231 232 HRESULT writeFS(TaskOVF *pTask);233 HRESULT writeFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock);234 HRESULT writeFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock);235 HRESULT writeFSImpl(TaskOVF *pTask, AutoWriteLockBase& writeLock, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage);236 HRESULT writeS3(TaskOVF *pTask);219 HRESULT i_writeImpl(ovf::OVFVersion_T aFormat, const LocationInfo &aLocInfo, ComObjPtr<Progress> &aProgress); 220 221 HRESULT i_writeFS(TaskOVF *pTask); 222 HRESULT i_writeFSOVF(TaskOVF *pTask, AutoWriteLockBase& writeLock); 223 HRESULT i_writeFSOVA(TaskOVF *pTask, AutoWriteLockBase& writeLock); 224 HRESULT i_writeFSImpl(TaskOVF *pTask, AutoWriteLockBase& writeLock, PVDINTERFACEIO pCallbacks, PSHASTORAGE pStorage); 225 HRESULT i_writeS3(TaskOVF *pTask); 237 226 238 227 struct XMLStack; 239 228 240 void buildXML(AutoWriteLockBase& writeLock,241 xml::Document &doc,242 XMLStack &stack,243 const Utf8Str &strPath,244 ovf::OVFVersion_T enFormat);245 void buildXMLForOneVirtualSystem(AutoWriteLockBase& writeLock,246 xml::ElementNode &elmToAddVirtualSystemsTo,247 std::list<xml::ElementNode*> *pllElementsWithUuidAttributes,248 ComObjPtr<VirtualSystemDescription> &vsdescThis,249 ovf::OVFVersion_T enFormat,250 XMLStack &stack);251 252 HRESULT preCheckImageAvailability(PSHASTORAGE pSHAStorage,253 RTCString &availableImage);229 void i_buildXML(AutoWriteLockBase& writeLock, 230 xml::Document &doc, 231 XMLStack &stack, 232 const Utf8Str &strPath, 233 ovf::OVFVersion_T enFormat); 234 void i_buildXMLForOneVirtualSystem(AutoWriteLockBase& writeLock, 235 xml::ElementNode &elmToAddVirtualSystemsTo, 236 std::list<xml::ElementNode*> *pllElementsWithUuidAttributes, 237 ComObjPtr<VirtualSystemDescription> &vsdescThis, 238 ovf::OVFVersion_T enFormat, 239 XMLStack &stack); 240 241 HRESULT i_preCheckImageAvailability(PSHASTORAGE pSHAStorage, 242 RTCString &availableImage); 254 243 255 244 friend class Machine; 256 245 }; 257 246 258 void parseURI(Utf8Str strUri, LocationInfo &locInfo);247 void i_parseURI(Utf8Str strUri, LocationInfo &locInfo); 259 248 260 249 struct VirtualSystemDescriptionEntry … … 273 262 274 263 class ATL_NO_VTABLE VirtualSystemDescription : 275 public VirtualBoxBase, 276 VBOX_SCRIPTABLE_IMPL(IVirtualSystemDescription) 264 public VirtualSystemDescriptionWrap 277 265 { 278 266 friend class Appliance; 279 267 280 268 public: 281 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(VirtualSystemDescription, IVirtualSystemDescription) 282 283 DECLARE_NOT_AGGREGATABLE(VirtualSystemDescription) 284 285 DECLARE_PROTECT_FINAL_CONSTRUCT() 286 287 BEGIN_COM_MAP(VirtualSystemDescription) 288 VBOX_DEFAULT_INTERFACE_ENTRIES(IVirtualSystemDescription) 289 END_COM_MAP() 290 291 DECLARE_EMPTY_CTOR_DTOR (VirtualSystemDescription) 292 293 // public initializer/uninitializer for internal purposes only 294 HRESULT FinalConstruct() { return BaseFinalConstruct(); } 295 void FinalRelease() { uninit(); BaseFinalRelease(); } 269 270 DECLARE_EMPTY_CTOR_DTOR(VirtualSystemDescription) 271 272 HRESULT FinalConstruct(); 273 void FinalRelease(); 296 274 297 275 HRESULT init(); 298 276 void uninit(); 299 277 300 /* IVirtualSystemDescription properties */301 STDMETHOD(COMGETTER(Count))(ULONG *aCount);302 303 /* IVirtualSystemDescription methods */304 STDMETHOD(GetDescription)(ComSafeArrayOut(VirtualSystemDescriptionType_T, aTypes),305 ComSafeArrayOut(BSTR, aRefs),306 ComSafeArrayOut(BSTR, aOvfValues),307 ComSafeArrayOut(BSTR, aVboxValues),308 ComSafeArrayOut(BSTR, aExtraConfigValues));309 310 STDMETHOD(GetDescriptionByType)(VirtualSystemDescriptionType_T aType,311 ComSafeArrayOut(VirtualSystemDescriptionType_T, aTypes),312 ComSafeArrayOut(BSTR, aRefs),313 ComSafeArrayOut(BSTR, aOvfValues),314 ComSafeArrayOut(BSTR, aVboxValues),315 ComSafeArrayOut(BSTR, aExtraConfigValues));316 317 STDMETHOD(GetValuesByType)(VirtualSystemDescriptionType_T aType,318 VirtualSystemDescriptionValueType_T aWhich,319 ComSafeArrayOut(BSTR, aValues));320 321 STDMETHOD(SetFinalValues)(ComSafeArrayIn(BOOL, aEnabled),322 ComSafeArrayIn(IN_BSTR, aVboxValues),323 ComSafeArrayIn(IN_BSTR, aExtraConfigValues));324 325 STDMETHOD(AddDescription)(VirtualSystemDescriptionType_T aType,326 IN_BSTR aVboxValue,327 IN_BSTR aExtraConfigValue);328 329 278 /* public methods only for internal purposes */ 330 331 void addEntry(VirtualSystemDescriptionType_T aType, 332 const Utf8Str &strRef, 333 const Utf8Str &aOvfValue, 334 const Utf8Str &aVboxValue, 335 uint32_t ulSizeMB = 0, 336 const Utf8Str &strExtraConfig = ""); 337 338 std::list<VirtualSystemDescriptionEntry*> findByType(VirtualSystemDescriptionType_T aType); 339 const VirtualSystemDescriptionEntry* findControllerFromID(uint32_t id); 340 341 void importVboxMachineXML(const xml::ElementNode &elmMachine); 342 const settings::MachineConfigFile* getMachineConfig() const; 343 344 void removeByType(VirtualSystemDescriptionType_T aType); 279 void i_addEntry(VirtualSystemDescriptionType_T aType, 280 const Utf8Str &strRef, 281 const Utf8Str &aOvfValue, 282 const Utf8Str &aVboxValue, 283 uint32_t ulSizeMB = 0, 284 const Utf8Str &strExtraConfig = ""); 285 286 std::list<VirtualSystemDescriptionEntry*> i_findByType(VirtualSystemDescriptionType_T aType); 287 const VirtualSystemDescriptionEntry* i_findControllerFromID(uint32_t id); 288 289 void i_importVboxMachineXML(const xml::ElementNode &elmMachine); 290 const settings::MachineConfigFile* i_getMachineConfig() const; 345 291 346 292 /* private instance data */ 347 293 private: 294 295 // wrapped IVirtualSystemDescription properties 296 HRESULT getCount(ULONG *aCount); 297 298 // wrapped IVirtualSystemDescription methods 299 HRESULT getDescription(std::vector<VirtualSystemDescriptionType_T> &aTypes, 300 std::vector<com::Utf8Str> &aRefs, 301 std::vector<com::Utf8Str> &aOVFValues, 302 std::vector<com::Utf8Str> &aVBoxValues, 303 std::vector<com::Utf8Str> &aExtraConfigValues); 304 HRESULT getDescriptionByType(VirtualSystemDescriptionType_T aType, 305 std::vector<VirtualSystemDescriptionType_T> &aTypes, 306 std::vector<com::Utf8Str> &aRefs, 307 std::vector<com::Utf8Str> &aOVFValues, 308 std::vector<com::Utf8Str> &aVBoxValues, 309 std::vector<com::Utf8Str> &aExtraConfigValues); 310 HRESULT getValuesByType(VirtualSystemDescriptionType_T aType, 311 VirtualSystemDescriptionValueType_T aWhich, 312 std::vector<com::Utf8Str> &aValues); 313 HRESULT setFinalValues(const std::vector<BOOL> &aEnabled, 314 const std::vector<com::Utf8Str> &aVBoxValues, 315 const std::vector<com::Utf8Str> &aExtraConfigValues); 316 HRESULT addDescription(VirtualSystemDescriptionType_T aType, 317 const com::Utf8Str &aVBoxValue, 318 const com::Utf8Str &aExtraConfigValue); 319 void i_removeByType(VirtualSystemDescriptionType_T aType); 320 348 321 struct Data; 349 322 Data *m;
Note:
See TracChangeset
for help on using the changeset viewer.