VirtualBox

Ignore:
Timestamp:
Dec 2, 2013 5:59:21 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91043
Message:

6813 stage 2 - Use the server side API wrapper code..

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/ApplianceImpl.h

    r49620 r49742  
    2222
    2323/* VBox includes */
    24 #include "VirtualBoxBase.h"
     24#include "VirtualSystemDescriptionWrap.h"
     25#include "ApplianceWrap.h"
    2526#include "MediumFormatImpl.h"
    2627
     
    2829 * private classes. */
    2930#include <iprt/tar.h>
    30 #include <iprt/circbuf.h>
    31 #include <VBox/vd.h>
    32 #include <iprt/sha.h>
    33 
    3431#include "ovfreader.h"
    3532#include <set>
     
    5047    struct HardDiskController;
    5148    struct VirtualSystem;
    52     class OVFReader;
     49    class  OVFReader;
    5350    struct DiskImage;
    5451    struct EnvelopeData;
     
    6764
    6865class ATL_NO_VTABLE Appliance :
    69     public VirtualBoxBase,
    70     VBOX_SCRIPTABLE_IMPL(IAppliance)
     66    public ApplianceWrap
    7167{
    7268public:
    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
    9075
    9176    HRESULT init(VirtualBox *aVirtualBox);
    9277    void uninit();
    9378
    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 
    11179    /* public methods only for internal purposes */
    11280
    113     static HRESULT setErrorStatic(HRESULT aResultCode,
    114                                   const Utf8Str &aText)
     81    static HRESULT i_setErrorStatic(HRESULT aResultCode,
     82                                    const Utf8Str &aText)
    11583    {
    11684        return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true);
     
    12088private:
    12189    /** 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
    122111    VirtualBox* const   mVirtualBox;
    123112
     
    133122     ******************************************************************************/
    134123
    135     bool isApplianceIdle();
    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 initSetOfSupportedStandardsURI();
    149 
    150     Utf8Str typeOfVirtualDiskFormatFromURI(Utf8Str type) const;
    151 
    152     std::set<Utf8Str> URIFromTypeOfVirtualDiskFormat(Utf8Str type);
    153 
    154     HRESULT initApplianceIONameMap();
    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);
    159148
    160149    /*******************************************************************************
     
    162151     ******************************************************************************/
    163152
    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);
    171160
    172161    /*******************************************************************************
     
    174163     ******************************************************************************/
    175164
    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,
    208176                            PVDINTERFACEIO pCallbacks,
    209177                            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,
    214196                              ImportStack &stack,
    215197                              PVDINTERFACEIO pCallbacks,
    216198                              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);
    225214
    226215    /*******************************************************************************
     
    228217     ******************************************************************************/
    229218
    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);
    237226
    238227    struct XMLStack;
    239228
    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);
    254243
    255244    friend class Machine;
    256245};
    257246
    258 void parseURI(Utf8Str strUri, LocationInfo &locInfo);
     247void i_parseURI(Utf8Str strUri, LocationInfo &locInfo);
    259248
    260249struct VirtualSystemDescriptionEntry
     
    273262
    274263class ATL_NO_VTABLE VirtualSystemDescription :
    275     public VirtualBoxBase,
    276     VBOX_SCRIPTABLE_IMPL(IVirtualSystemDescription)
     264    public VirtualSystemDescriptionWrap
    277265{
    278266    friend class Appliance;
    279267
    280268public:
    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();
    296274
    297275    HRESULT init();
    298276    void uninit();
    299277
    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 
    329278    /* 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;
    345291
    346292    /* private instance data */
    347293private:
     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
    348321    struct Data;
    349322    Data *m;
Note: See TracChangeset for help on using the changeset viewer.

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