HostImpl.h revision 8fe0432027bd1524f94759c99ab3ce761cb5c5c0
64fee3f73de7a63db0b27a93be05cd635a149d14vboxsync * Implemenation of IHost.
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * available from http://www.virtualbox.org. This file is free software;
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * you can redistribute it and/or modify it under the terms of the GNU
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * General Public License (GPL) as published by the Free Software
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * additional information or have any questions.
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync public VirtualBoxSupportErrorInfoImpl <Host, IHost>,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync // public initializer/uninitializer for internal purposes only
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync // IHost properties
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(DVDDrives))(IHostDVDDriveCollection **drives);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(FloppyDrives))(IHostFloppyDriveCollection **drives);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(USBDevices))(IHostUSBDeviceCollection **aUSBDevices);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(USBDeviceFilters))(IHostUSBDeviceFilterCollection ** aUSBDeviceFilters);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(NetworkInterfaces))(IHostNetworkInterfaceCollection **networkInterfaces);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(ProcessorCount))(ULONG *count);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(ProcessorSpeed))(ULONG *speed);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(ProcessorDescription))(BSTR *description);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(COMGETTER(MemoryAvailable))(ULONG *available);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync // IHost methods
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(CreateHostNetworkInterface) (INPTR BSTR aName,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(RemoveHostNetworkInterface) (INPTR GUIDPARAM aId,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(CreateUSBDeviceFilter) (INPTR BSTR aName, IHostUSBDeviceFilter **aFilter);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(InsertUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter *aFilter);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync STDMETHOD(RemoveUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter **aFilter);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync // public methods only for internal purposes
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT loadSettings (const settings::Key &aGlobal);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync /** @todo We could benefit from moving all this USB management into USBProxyService
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * instead of spreading out like this. Host only needs to keep the host filter list and make
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * it available to the proxy service. Then only the proxy needs to be intimate friends
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * with HostUSBDevice, which would simplify the overall picture a bit.
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * But, I don't dare move anything about this right now though, as I have no time nor any
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync * wishes to provoke the deadlock troll so close to a release... */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT captureUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT detachUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId, BOOL aDone);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT autoCaptureUSBDevices (SessionMachine *aMachine);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT detachAllUSBDevices (SessionMachine *aMachine, BOOL aDone);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync void onUSBDeviceStateChanged(HostUSBDevice *aDevice, bool aRunFilters, SessionMachine *aIgnoreMachine);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync void onUSBDeviceStateChanged(HostUSBDevice *aDevice);
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync /* must be called from under this object's lock */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync USBProxyService *usbProxyService() { return mUSBProxyService; }
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync#else /* !VBOX_WITH_USB */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync USBProxyService *usbProxyService() { return NULL; }
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync#endif /* !VBOX_WITH_USB */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync static int networkInterfaceHelperServer (SVCHlpClient *aClient,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync // for VirtualBoxSupportErrorInfoImpl
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync static const wchar_t *getComponentName() { return L"Host"; }
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync bool validateDevice(const char *deviceNode, bool isCDROM);
61d4c60e55bc9d7545fc89bd9a32bafe38cea555vboxsync /** specialization for IHostUSBDeviceFilter */
61d4c60e55bc9d7545fc89bd9a32bafe38cea555vboxsync ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync VirtualBoxBase *child = VirtualBoxBaseWithChildren::
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync HRESULT applyAllUSBFilters (ComObjPtr <HostUSBDevice> &aDevice,
a462e9c5508784b4b91ff00f156011614ae806bavboxsync bool applyMachineUSBFilters (SessionMachine *aMachine,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync#endif /* VBOX_WITH_USB */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync static int createNetworkInterface (SVCHlpClient *aClient,
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync static int removeNetworkInterface (SVCHlpClient *aClient,
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync static HRESULT networkInterfaceHelperClient (SVCHlpClient *aClient,
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync typedef std::list <ComObjPtr <HostUSBDevice> > USBDeviceList;
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync USBDeviceList mUSBDevices; /**< @todo remove this, use the one maintained by USBProxyService. */
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync /** Pointer to the USBProxyService object. */
67259dc535458471f701aa4a4f3ff00d5736c0dfvboxsync#endif /* VBOX_WITH_USB */
a3bbbe5c597341d9b6041560b790596ee41c2cfavboxsync#endif // ____H_HOSTIMPL