HostImpl.h revision c8f4cca65d28ebb037ef27dced8c6bfa71d350ac
c64777b77514bdc924249d2f9900be25079b0d84vboxsync/* $Id$ */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync/** @file
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * Implemenation of IHost.
c64777b77514bdc924249d2f9900be25079b0d84vboxsync */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync/*
c1980cd3f410c88b8f92f464c56ed987a15f44c1vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
c64777b77514bdc924249d2f9900be25079b0d84vboxsync *
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * available from http://www.virtualbox.org. This file is free software;
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * you can redistribute it and/or modify it under the terms of the GNU
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * General Public License (GPL) as published by the Free Software
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c64777b77514bdc924249d2f9900be25079b0d84vboxsync *
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
c64777b77514bdc924249d2f9900be25079b0d84vboxsync * additional information or have any questions.
c64777b77514bdc924249d2f9900be25079b0d84vboxsync */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifndef ____H_HOSTIMPL
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#define ____H_HOSTIMPL
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
4ad0e04fb2a93fb4980de2644f7ccca9e8869083vboxsync#include "VirtualBoxBase.h"
2d97f8baccdd684bc0a8a15eb86bbe9ff2b85374vboxsync#ifdef VBOX_WITH_USB
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync# include "HostUSBDeviceImpl.h"
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync# include "USBDeviceFilterImpl.h"
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync# include "USBProxyService.h"
3942acfaf590eaef4740d7b8a5311bb91e2bed0dvboxsync# include "VirtualBoxImpl.h"
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#else
0c437bb10c61b229407a7517efde04dfe3b1e4a1vboxsyncclass USBProxyService;
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifdef RT_OS_WINDOWS
c64777b77514bdc924249d2f9900be25079b0d84vboxsync# include "win/svchlp.h"
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifdef VBOX_WITH_RESOURCE_USAGE_API
c64777b77514bdc924249d2f9900be25079b0d84vboxsync# include "PerformanceImpl.h"
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass VirtualBox;
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass SessionMachine;
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass HostDVDDrive;
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass HostFloppyDrive;
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass Progress;
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
274fa6f604b8c189c2872bf928f5557680e4a887vboxsync#include <list>
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsyncclass ATL_NO_VTABLE Host :
c64777b77514bdc924249d2f9900be25079b0d84vboxsync public VirtualBoxBaseWithChildren,
c64777b77514bdc924249d2f9900be25079b0d84vboxsync public VirtualBoxSupportErrorInfoImpl <Host, IHost>,
c64777b77514bdc924249d2f9900be25079b0d84vboxsync public VirtualBoxSupportTranslation <Host>,
1b68cc0f95e7b0033b20dfc4fdbc260b7a2cef68vboxsync public IHost
c64777b77514bdc924249d2f9900be25079b0d84vboxsync{
3942acfaf590eaef4740d7b8a5311bb91e2bed0dvboxsyncpublic:
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync DECLARE_NOT_AGGREGATABLE(Host)
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync BEGIN_COM_MAP(Host)
c64777b77514bdc924249d2f9900be25079b0d84vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
c64777b77514bdc924249d2f9900be25079b0d84vboxsync COM_INTERFACE_ENTRY(IHost)
c64777b77514bdc924249d2f9900be25079b0d84vboxsync END_COM_MAP()
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync NS_DECL_ISUPPORTS
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync HRESULT FinalConstruct();
c64777b77514bdc924249d2f9900be25079b0d84vboxsync void FinalRelease();
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync // public initializer/uninitializer for internal purposes only
c64777b77514bdc924249d2f9900be25079b0d84vboxsync HRESULT init (VirtualBox *parent);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync void uninit();
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync // IHost properties
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(DVDDrives))(IHostDVDDriveCollection **drives);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(FloppyDrives))(IHostFloppyDriveCollection **drives);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(USBDevices))(IHostUSBDeviceCollection **aUSBDevices);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(USBDeviceFilters))(IHostUSBDeviceFilterCollection ** aUSBDeviceFilters);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifdef RT_OS_WINDOWS
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(NetworkInterfaces))(IHostNetworkInterfaceCollection **networkInterfaces);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(ProcessorCount))(ULONG *count);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(GetProcessorSpeed)(ULONG cpuId, ULONG *speed);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(GetProcessorDescription)(ULONG cpuId, BSTR *description);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(MemorySize))(ULONG *size);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(MemoryAvailable))(ULONG *available);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(OperatingSystem))(BSTR *os);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(OSVersion))(BSTR *version);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(COMGETTER(UTCTime))(LONG64 *aUTCTime);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync // IHost methods
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifdef RT_OS_WINDOWS
c64777b77514bdc924249d2f9900be25079b0d84vboxsync STDMETHOD(CreateHostNetworkInterface) (INPTR BSTR aName,
c64777b77514bdc924249d2f9900be25079b0d84vboxsync IHostNetworkInterface **aHostNetworkInterface,
c64777b77514bdc924249d2f9900be25079b0d84vboxsync IProgress **aProgress);
3942acfaf590eaef4740d7b8a5311bb91e2bed0dvboxsync STDMETHOD(RemoveHostNetworkInterface) (INPTR GUIDPARAM aId,
c64777b77514bdc924249d2f9900be25079b0d84vboxsync IHostNetworkInterface **aHostNetworkInterface,
9b828870d7acf28326746e3850098e579c590a44vboxsync IProgress **aProgress);
9b828870d7acf28326746e3850098e579c590a44vboxsync#endif
9b828870d7acf28326746e3850098e579c590a44vboxsync STDMETHOD(CreateUSBDeviceFilter) (INPTR BSTR aName, IHostUSBDeviceFilter **aFilter);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync STDMETHOD(InsertUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter *aFilter);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync STDMETHOD(RemoveUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter **aFilter);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync // public methods only for internal purposes
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync HRESULT loadSettings (const settings::Key &aGlobal);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync HRESULT saveSettings (settings::Key &aGlobal);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#ifdef VBOX_WITH_USB
9b828870d7acf28326746e3850098e579c590a44vboxsync typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
9b828870d7acf28326746e3850098e579c590a44vboxsync
9b828870d7acf28326746e3850098e579c590a44vboxsync /** Must be called from under this object's lock. */
9b828870d7acf28326746e3850098e579c590a44vboxsync USBProxyService *usbProxyService() { return mUSBProxyService; }
9b828870d7acf28326746e3850098e579c590a44vboxsync
9b828870d7acf28326746e3850098e579c590a44vboxsync HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter, BOOL aActiveChanged = FALSE);
9b828870d7acf28326746e3850098e579c590a44vboxsync void getUSBFilters(USBDeviceFilterList *aGlobalFiltes, VirtualBox::SessionMachineVector *aMachines);
9b828870d7acf28326746e3850098e579c590a44vboxsync HRESULT checkUSBProxyService();
9b828870d7acf28326746e3850098e579c590a44vboxsync#endif /* !VBOX_WITH_USB */
9b828870d7acf28326746e3850098e579c590a44vboxsync
9b828870d7acf28326746e3850098e579c590a44vboxsync#ifdef RT_OS_WINDOWS
9b828870d7acf28326746e3850098e579c590a44vboxsync static int networkInterfaceHelperServer (SVCHlpClient *aClient,
9b828870d7acf28326746e3850098e579c590a44vboxsync SVCHlpMsg::Code aMsgCode);
9b828870d7acf28326746e3850098e579c590a44vboxsync#endif
9b828870d7acf28326746e3850098e579c590a44vboxsync
9b828870d7acf28326746e3850098e579c590a44vboxsync // for VirtualBoxSupportErrorInfoImpl
6cac05f856d982151579a9d445a109960c2c07d2vboxsync static const wchar_t *getComponentName() { return L"Host"; }
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsyncprivate:
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
6cac05f856d982151579a9d445a109960c2c07d2vboxsync# ifdef VBOX_USE_LIBHAL
6cac05f856d982151579a9d445a109960c2c07d2vboxsync bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync# endif
6cac05f856d982151579a9d445a109960c2c07d2vboxsync void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync bool validateDevice(const char *deviceNode, bool isCDROM);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#endif
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#ifdef VBOX_WITH_USB
6cac05f856d982151579a9d445a109960c2c07d2vboxsync /** specialization for IHostUSBDeviceFilter */
6cac05f856d982151579a9d445a109960c2c07d2vboxsync ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
6cac05f856d982151579a9d445a109960c2c07d2vboxsync {
6cac05f856d982151579a9d445a109960c2c07d2vboxsync VirtualBoxBase *child = VirtualBoxBaseWithChildren::
6cac05f856d982151579a9d445a109960c2c07d2vboxsync getDependentChild (ComPtr <IUnknown> (aFilter));
6cac05f856d982151579a9d445a109960c2c07d2vboxsync return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
6cac05f856d982151579a9d445a109960c2c07d2vboxsync : NULL;
6cac05f856d982151579a9d445a109960c2c07d2vboxsync }
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#endif /* VBOX_WITH_USB */
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#ifdef RT_OS_WINDOWS
6cac05f856d982151579a9d445a109960c2c07d2vboxsync static int createNetworkInterface (SVCHlpClient *aClient,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync const Utf8Str &aName,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync Guid &aGUID, Utf8Str &aErrMsg);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync static int removeNetworkInterface (SVCHlpClient *aClient,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync const Guid &aGUID,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync Utf8Str &aErrMsg);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync static HRESULT networkInterfaceHelperClient (SVCHlpClient *aClient,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync Progress *aProgress,
6cac05f856d982151579a9d445a109960c2c07d2vboxsync void *aUser, int *aVrc);
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#endif
6cac05f856d982151579a9d445a109960c2c07d2vboxsync
6cac05f856d982151579a9d445a109960c2c07d2vboxsync#ifdef VBOX_WITH_RESOURCE_USAGE_API
9b828870d7acf28326746e3850098e579c590a44vboxsync void registerMetrics(PerformanceCollector *collector);
9b828870d7acf28326746e3850098e579c590a44vboxsync void unregisterMetrics(PerformanceCollector *collector);
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif /* VBOX_WITH_RESOURCE_USAGE_API */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync ComObjPtr <VirtualBox, ComWeakRef> mParent;
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#ifdef VBOX_WITH_USB
c64777b77514bdc924249d2f9900be25079b0d84vboxsync USBDeviceFilterList mUSBDeviceFilters;
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync /** Pointer to the USBProxyService object. */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync USBProxyService *mUSBProxyService;
3942acfaf590eaef4740d7b8a5311bb91e2bed0dvboxsync#endif /* VBOX_WITH_USB */
c64777b77514bdc924249d2f9900be25079b0d84vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync};
274fa6f604b8c189c2872bf928f5557680e4a887vboxsync
c64777b77514bdc924249d2f9900be25079b0d84vboxsync#endif // ____H_HOSTIMPL
c64777b77514bdc924249d2f9900be25079b0d84vboxsync