VirtualBoxImpl.h revision a2615ff0171c742ab58bc7694ce98f6e363ceadb
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * VirtualBox COM class implementation
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Copyright (C) 2006-2013 Oracle Corporation
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * available from http://www.virtualbox.org. This file is free software;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * General Public License (GPL) as published by the Free Software
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsynctypedef std::list<ComObjPtr<SessionMachine> > SessionMachinesList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync , public CComCoClass<VirtualBox, &CLSID_VirtualBox>
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync typedef std::list<ComPtr<IInternalSessionControl> > InternalControlList;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // Kind of redundant (VirtualBoxWrap declares itself not aggregatable and
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // CComCoClass<VirtualBox, &CLSID_VirtualBox> as aggregatable, the former
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // is the first inheritance), but the C++ multiple inheritance rules and
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // the class factory in svcmain.cpp needs this to disambiguate.
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // to postpone generation of the default ctor/dtor
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public initializer/uninitializer for internal purposes only */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* public methods only for internal purposes */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * Override of the default locking class to be used for validating lock
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync * order with the standard member lock handle.
d90eec53c9dcaa0f3d1054e8734ed46875b9093avboxsync typedef DECLCALLBACKPTR(HRESULT, SVCHelperClientFunc)
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync (SVCHlpClient *aClient, Progress *aProgress, void *aUser, int *aVrc);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineStateChange(const Guid &aId, MachineState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineDataChange(const Guid &aId, BOOL aTemporary = FALSE);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync BOOL i_onExtraDataCanChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onExtraDataChange(const Guid &aId, IN_BSTR aKey, IN_BSTR aValue);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onMachineRegistered(const Guid &aId, BOOL aRegistered);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSessionStateChange(const Guid &aId, SessionState_T aState);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotTaken(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotDeleted(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onSnapshotChange(const Guid &aMachineId, const Guid &aSnapshotId);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onGuestPropertyChange(const Guid &aMachineId, IN_BSTR aName, IN_BSTR aValue,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNatRedirectChange(const Guid &aMachineId, ULONG ulSlot, bool fRemove, IN_BSTR aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync NATProtocol_T aProto, IN_BSTR aHostIp, uint16_t aHostPort,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkStartStop(IN_BSTR aNetworkName, BOOL aStart);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkSetting(IN_BSTR aNetworkName, BOOL aEnabled, IN_BSTR aNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync IN_BSTR aGateway, BOOL aAdvertiseDefaultIpv6RouteEnabled,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_onNATNetworkPortForward(IN_BSTR aNetworkName, BOOL create, BOOL fIpv6,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_getOpenedMachines(SessionMachinesList &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_validateMachineGroup(const Utf8Str &aGroup, bool fPrimary);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_convertMachineGroups(const std::vector<com::Utf8Str> aMachineGroups, StringsList *pllMachineGroups);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findHardDiskByLocation(const Utf8Str &strLocation,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findDVDOrFloppyImage(DeviceType_T mediumType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_findRemoveableMedium(DeviceType_T mediumType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync const ComObjPtr<PerformanceCollector>& i_performanceCollector() const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
848a8a60f4429fb74d007753d6a2e588d38516dfvboxsync void i_getDefaultMachineFolder(Utf8Str &str) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_getDefaultHardDiskFormat(Utf8Str &str) const;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /** Returns the VirtualBox home directory */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_calculateFullPath(const Utf8Str &strPath, Utf8Str &aResult);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_copyPathRelativeToConfig(const Utf8Str &strSource, Utf8Str &strTarget);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerMedium(const ComObjPtr<Medium> &pMedium, ComObjPtr<Medium> *ppMedium, DeviceType_T argType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_pushMediumToListWithChildren(MediaList &llMedia, Medium *pMedium);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterMachine(Machine *pMachine, const Guid &id);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_rememberMachineNameChangeForMedia(const Utf8Str &strOldConfigDir,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync void i_saveMediaRegistry(settings::MediaRegistry &mediaRegistry,
848a8a60f4429fb74d007753d6a2e588d38516dfvboxsync static const com::Utf8Str &i_getVersionNormalized();
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT i_ensureFilePathExists(const Utf8Str &strFileName, bool fCreate);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_encryptSetting(const Utf8Str &aPlaintext, Utf8Str *aCiphertext);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_decryptSetting(Utf8Str *aPlaintext, const Utf8Str &aCiphertext);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync bool i_isMediaUuidInUse(const Guid &aId, DeviceType_T deviceType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // wrapped IVirtualBox properties
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getVersionNormalized(com::Utf8Str &aVersionNormalized);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getPackageType(com::Utf8Str &aPackageType);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSettingsFilePath(com::Utf8Str &aSettingsFilePath);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSystemProperties(ComPtr<ISystemProperties> &aSystemProperties);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachines(std::vector<ComPtr<IMachine> > &aMachines);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachineGroups(std::vector<com::Utf8Str> &aMachineGroups);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getHardDisks(std::vector<ComPtr<IMedium> > &aHardDisks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getDVDImages(std::vector<ComPtr<IMedium> > &aDVDImages);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getFloppyImages(std::vector<ComPtr<IMedium> > &aFloppyImages);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getProgressOperations(std::vector<ComPtr<IProgress> > &aProgressOperations);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getGuestOSTypes(std::vector<ComPtr<IGuestOSType> > &aGuestOSTypes);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getSharedFolders(std::vector<ComPtr<ISharedFolder> > &aSharedFolders);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getPerformanceCollector(ComPtr<IPerformanceCollector> &aPerformanceCollector);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getDHCPServers(std::vector<ComPtr<IDHCPServer> > &aDHCPServers);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getNATNetworks(std::vector<ComPtr<INATNetwork> > &aNATNetworks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getEventSource(ComPtr<IEventSource> &aEventSource);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getExtensionPackManager(ComPtr<IExtPackManager> &aExtensionPackManager);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getInternalNetworks(std::vector<com::Utf8Str> &aInternalNetworks);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getGenericNetworkDrivers(std::vector<com::Utf8Str> &aGenericNetworkDrivers);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync // wrapped IVirtualBox methods
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT composeMachineFilename(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createMachine(const com::Utf8Str &aSettingsFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT openMachine(const com::Utf8Str &aSettingsFile,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT registerMachine(const ComPtr<IMachine> &aMachine);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachinesByGroups(const std::vector<com::Utf8Str> &aGroups,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getMachineStates(const std::vector<ComPtr<IMachine> > &aMachines,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createAppliance(ComPtr<IAppliance> &aAppliance);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createHardDisk(const com::Utf8Str &aFormat,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createSharedFolder(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeSharedFolder(const com::Utf8Str &aName);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT getExtraDataKeys(std::vector<com::Utf8Str> &aKeys);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT setSettingsSecret(const com::Utf8Str &aPassword);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createDHCPServer(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findDHCPServerByNetworkName(const com::Utf8Str &aName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeDHCPServer(const ComPtr<IDHCPServer> &aServer);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT createNATNetwork(const com::Utf8Str &aNetworkName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT findNATNetworkByName(const com::Utf8Str &aNetworkName,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT removeNATNetwork(const ComPtr<INATNetwork> &aNetwork);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT checkFirmwarePresent(FirmwareType_T aFirmwareType,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static HRESULT i_setErrorStatic(HRESULT aResultCode,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync return setErrorInternal(aResultCode, getStaticClassIID(), getStaticComponentName(), aText, false, true);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerDHCPServer(DHCPServer *aDHCPServer,
e9684b4f760eb8ec77e3883dd2e3c42db9d7cc80vboxsync HRESULT i_unregisterDHCPServer(DHCPServer *aDHCPServer,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_registerNATNetwork(NATNetwork *aNATNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync HRESULT i_unregisterNATNetwork(NATNetwork *aNATNetwork,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync int i_encryptSettingBytes(const uint8_t *aPlaintext,
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync struct Data; // opaque data structure, defined in VirtualBoxImpl.cpp
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync /* static variables (defined in VirtualBoxImpl.cpp) */
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static std::map<com::Utf8Str, int> sNatNetworkNameToRefCount;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static RWLockHandle* spMtxNatNetworkNameToRefCountLock;
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static DECLCALLBACK(int) AsyncEventHandler(RTTHREAD thread, void *pvUser);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync static DECLCALLBACK(int) SVCHelperClientThread(RTTHREAD aThread, void *aUser);
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync////////////////////////////////////////////////////////////////////////////////
daa94352f51be2329ac8660f70396e03a7cb983bvboxsync#endif // !____H_VIRTUALBOXIMPL