ApplianceImpl.h revision d020036eb167a2f97f5010276fda5daa3f4773b3
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/* $Id$ */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/** @file
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync *
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * VirtualBox COM class implementation
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync/*
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * Copyright (C) 2006-2009 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync * additional information or have any questions.
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#ifndef ____H_APPLIANCEIMPL
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#define ____H_APPLIANCEIMPL
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync#include "VirtualBoxBase.h"
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
5ff3fa0492332325f57e80636321619e2224027evboxsyncnamespace xml
5ff3fa0492332325f57e80636321619e2224027evboxsync{
5ff3fa0492332325f57e80636321619e2224027evboxsync class Node;
3f56dbed79efb6f24064a57c1345cf189443d5d9vboxsync class ElementNode;
5ff3fa0492332325f57e80636321619e2224027evboxsync}
d440eb388d1459ffc6f581ff0c786ef3f048dc39vboxsync
482a222498aae619afda0255a7edf4ebda97268cvboxsyncclass VirtualBox;
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsyncclass Progress;
482a222498aae619afda0255a7edf4ebda97268cvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncclass ATL_NO_VTABLE Appliance :
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxBaseWithChildrenNEXT,
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxSupportErrorInfoImpl <Appliance, IAppliance>,
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxSupportTranslation <Appliance>,
0ce6ae9d6efed5d54222a13bbdabce9e688e4447vboxsync VBOX_SCRIPTABLE_IMPL(IAppliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync{
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncpublic:
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_NOT_AGGREGATABLE(Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync BEGIN_COM_MAP(Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync COM_INTERFACE_ENTRY(IAppliance)
57b49c1557a310ee615bc0ee79dd2a2e92319a1bvboxsync COM_INTERFACE_ENTRY(IDispatch)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync END_COM_MAP()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync NS_DECL_ISUPPORTS
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_EMPTY_CTOR_DTOR (Appliance)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // public initializer/uninitializer for internal purposes only
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync HRESULT FinalConstruct() { return S_OK; }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void FinalRelease() { uninit(); }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
e52c9984c4f6b8ea141bc50a3bdaf31941d8cd7dvboxsync HRESULT init(VirtualBox *aVirtualBox);
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void uninit();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // for VirtualBoxSupportErrorInfoImpl
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync static const wchar_t *getComponentName() { return L"Appliance"; }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IAppliance properties */
ee5869bb73f07de9c139dc6a608836a7b5767933vboxsync STDMETHOD(COMGETTER(Path))(BSTR *aPath);
f6dde23cd488aee26203b38ec67220270f5c4273vboxsync STDMETHOD(COMGETTER(Disks))(ComSafeArrayOut(BSTR, aDisks));
f6dde23cd488aee26203b38ec67220270f5c4273vboxsync STDMETHOD(COMGETTER(VirtualSystemDescriptions))(ComSafeArrayOut(IVirtualSystemDescription*, aVirtualSystemDescriptions));
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* IAppliance methods */
dc311b529996345ea65d51c87b60b6849642d894vboxsync /* Import methods */
e52c9984c4f6b8ea141bc50a3bdaf31941d8cd7dvboxsync STDMETHOD(Read)(IN_BSTR path);
ee5869bb73f07de9c139dc6a608836a7b5767933vboxsync STDMETHOD(Interpret)(void);
e52c9984c4f6b8ea141bc50a3bdaf31941d8cd7dvboxsync STDMETHOD(ImportMachines)(IProgress **aProgress);
dc311b529996345ea65d51c87b60b6849642d894vboxsync /* Export methods */
dc311b529996345ea65d51c87b60b6849642d894vboxsync STDMETHOD(CreateVFSExplorer)(IN_BSTR aURI, IVFSExplorer **aExplorer);
0a3eb63419e41ef10cd135aeb66dcd6bd6f87cdcvboxsync STDMETHOD(Write)(IN_BSTR format, IN_BSTR path, IProgress **aProgress);
dc311b529996345ea65d51c87b60b6849642d894vboxsync
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync STDMETHOD(GetWarnings)(ComSafeArrayOut(BSTR, aWarnings));
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* public methods only for internal purposes */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync /* private instance data */
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncprivate:
482a222498aae619afda0255a7edf4ebda97268cvboxsync /** weak VirtualBox parent */
29e38a1cd73ef1f8512108f24fd836d154e282c4vboxsync const ComObjPtr <VirtualBox, ComWeakRef> mVirtualBox;
482a222498aae619afda0255a7edf4ebda97268cvboxsync
d020036eb167a2f97f5010276fda5daa3f4773b3vboxsync struct Data; // opaque, defined in ApplianceImpl.cpp
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync Data *m;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
3f56dbed79efb6f24064a57c1345cf189443d5d9vboxsync HRESULT LoopThruSections(const char *pcszPath, const xml::ElementNode *pReferencesElem, const xml::ElementNode *pCurElem);
3f56dbed79efb6f24064a57c1345cf189443d5d9vboxsync HRESULT HandleDiskSection(const char *pcszPath, const xml::ElementNode *pReferencesElem, const xml::ElementNode *pSectionElem);
3f56dbed79efb6f24064a57c1345cf189443d5d9vboxsync HRESULT HandleNetworkSection(const char *pcszPath, const xml::ElementNode *pSectionElem);
3f56dbed79efb6f24064a57c1345cf189443d5d9vboxsync HRESULT HandleVirtualSystemContent(const char *pcszPath, const xml::ElementNode *pContentElem);
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
d91dc86210d602f51a4701762488a5e696c80a45vboxsync HRESULT searchUniqueVMName(Utf8Str& aName) const;
d91dc86210d602f51a4701762488a5e696c80a45vboxsync HRESULT searchUniqueDiskImageFilePath(Utf8Str& aName) const;
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsync HRESULT setUpProgress(ComObjPtr<Progress> &pProgress, const Bstr &bstrDescription);
dc311b529996345ea65d51c87b60b6849642d894vboxsync HRESULT setUpProgressUpload(ComObjPtr<Progress> &pProgress, const Bstr &bstrDescription);
59d96bafa78f7257869e30b88f2f98142ef5928evboxsync void waitForAsyncProgress(ComObjPtr<Progress> &pProgressThis, ComPtr<IProgress> &pProgressAsync);
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync void addWarning(const char* aWarning, ...);
a96ed55e8e1b248965a3d29d6e4c3116979e887bvboxsync
dc311b529996345ea65d51c87b60b6849642d894vboxsync void parseURI(Utf8Str strUri, const Utf8Str &strProtocol, Utf8Str &strFilepath, Utf8Str &strHostname, Utf8Str &strUsername, Utf8Str &strPassword);
dc311b529996345ea65d51c87b60b6849642d894vboxsync HRESULT writeImpl(int aFormat, Utf8Str aPath, ComObjPtr<Progress> &aProgress);
dc311b529996345ea65d51c87b60b6849642d894vboxsync
d20e5d189feff7841cc3f40e5c9cca8c86b45eb5vboxsync struct TaskImportMachines; /* Worker thread for import */
a3418f1520c27eb3d502f87b3a0f711263b84a8fvboxsync static DECLCALLBACK(int) taskThreadImportMachines(RTTHREAD thread, void *pvUser);
d20e5d189feff7841cc3f40e5c9cca8c86b45eb5vboxsync
dc311b529996345ea65d51c87b60b6849642d894vboxsync struct TaskWriteOVF; /* Worker threads for export */
dc311b529996345ea65d51c87b60b6849642d894vboxsync static DECLCALLBACK(int) taskThreadWriteOVF(RTTHREAD aThread, void *pvUser);
dc311b529996345ea65d51c87b60b6849642d894vboxsync
dc311b529996345ea65d51c87b60b6849642d894vboxsync int writeFS(TaskWriteOVF *pTask);
dc311b529996345ea65d51c87b60b6849642d894vboxsync int writeS3(TaskWriteOVF *pTask);
db85b6b8ce514217c1fb35d04b0854a65dc299f3vboxsync
db85b6b8ce514217c1fb35d04b0854a65dc299f3vboxsync friend class Machine;
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync};
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
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)
40becad9511726726c5959a8ad8b62fb3e1c020cvboxsync Utf8Str strVbox; // configuration value (type-dependent)
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync Utf8Str strExtraConfig; // extra configuration key=value strings (type-dependent)
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsync
50453af238fcec34bf98f91cc4c32bf57f738bd3vboxsync uint32_t ulSizeMB; // hard disk images only: size of the uncompressed image in MB
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync};
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncclass ATL_NO_VTABLE VirtualSystemDescription :
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxBaseWithChildrenNEXT,
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxSupportErrorInfoImpl <VirtualSystemDescription, IVirtualSystemDescription>,
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync public VirtualBoxSupportTranslation <VirtualSystemDescription>,
0ce6ae9d6efed5d54222a13bbdabce9e688e4447vboxsync VBOX_SCRIPTABLE_IMPL(IVirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync{
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync friend class Appliance;
c4d6c81bd0de216d0f42db2e477b1d788fbaefb4vboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsyncpublic:
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_NOT_AGGREGATABLE(VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync BEGIN_COM_MAP(VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync COM_INTERFACE_ENTRY(IVirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync END_COM_MAP()
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync NS_DECL_ISUPPORTS
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync DECLARE_EMPTY_CTOR_DTOR (VirtualSystemDescription)
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // public initializer/uninitializer for internal purposes only
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync HRESULT FinalConstruct() { return S_OK; }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void FinalRelease() { uninit(); }
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync HRESULT init();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync void uninit();
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync // for VirtualBoxSupportErrorInfoImpl
8184f68cdef3c26869cdebc6a18829c854d0d17dvboxsync static const wchar_t *getComponentName() { return L"VirtualSystemDescription"; }
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,
d91dc86210d602f51a4701762488a5e696c80a45vboxsync const Utf8Str &aOrigValue,
4831e82ecaa3c813398d2f343e9d38ee34a3acf4vboxsync const Utf8Str &aAutoValue,
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
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: */