VirtualBox

source: vbox/trunk/src/VBox/Main/include/HostImpl.h@ 8707

Last change on this file since 8707 was 8666, checked in by vboxsync, 17 years ago

Removed the duplicate USB device list in Host and moved 4 methods over to USBProxyService.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.6 KB
Line 
1/* $Id: HostImpl.h 8666 2008-05-07 15:24:57Z vboxsync $ */
2/** @file
3 * Implemenation of IHost.
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ____H_HOSTIMPL
23#define ____H_HOSTIMPL
24
25#include "VirtualBoxBase.h"
26#ifdef VBOX_WITH_USB
27# include "HostUSBDeviceImpl.h"
28# include "USBDeviceFilterImpl.h"
29# include "USBProxyService.h"
30#else
31class USBProxyService;
32#endif
33
34#ifdef RT_OS_WINDOWS
35# include "win32/svchlp.h"
36#endif
37
38class VirtualBox;
39class SessionMachine;
40class HostDVDDrive;
41class HostFloppyDrive;
42class Progress;
43
44#include <list>
45
46class ATL_NO_VTABLE Host :
47 public VirtualBoxBaseWithChildren,
48 public VirtualBoxSupportErrorInfoImpl <Host, IHost>,
49 public VirtualBoxSupportTranslation <Host>,
50 public IHost
51{
52public:
53
54 DECLARE_NOT_AGGREGATABLE(Host)
55
56 DECLARE_PROTECT_FINAL_CONSTRUCT()
57
58 BEGIN_COM_MAP(Host)
59 COM_INTERFACE_ENTRY(ISupportErrorInfo)
60 COM_INTERFACE_ENTRY(IHost)
61 END_COM_MAP()
62
63 NS_DECL_ISUPPORTS
64
65 HRESULT FinalConstruct();
66 void FinalRelease();
67
68 // public initializer/uninitializer for internal purposes only
69 HRESULT init (VirtualBox *parent);
70 void uninit();
71
72 // IHost properties
73 STDMETHOD(COMGETTER(DVDDrives))(IHostDVDDriveCollection **drives);
74 STDMETHOD(COMGETTER(FloppyDrives))(IHostFloppyDriveCollection **drives);
75 STDMETHOD(COMGETTER(USBDevices))(IHostUSBDeviceCollection **aUSBDevices);
76 STDMETHOD(COMGETTER(USBDeviceFilters))(IHostUSBDeviceFilterCollection ** aUSBDeviceFilters);
77#ifdef RT_OS_WINDOWS
78 STDMETHOD(COMGETTER(NetworkInterfaces))(IHostNetworkInterfaceCollection **networkInterfaces);
79#endif
80 STDMETHOD(COMGETTER(ProcessorCount))(ULONG *count);
81 STDMETHOD(COMGETTER(ProcessorSpeed))(ULONG *speed);
82 STDMETHOD(COMGETTER(ProcessorDescription))(BSTR *description);
83 STDMETHOD(COMGETTER(MemorySize))(ULONG *size);
84 STDMETHOD(COMGETTER(MemoryAvailable))(ULONG *available);
85 STDMETHOD(COMGETTER(OperatingSystem))(BSTR *os);
86 STDMETHOD(COMGETTER(OSVersion))(BSTR *version);
87 STDMETHOD(COMGETTER(UTCTime))(LONG64 *aUTCTime);
88
89 // IHost methods
90#ifdef RT_OS_WINDOWS
91 STDMETHOD(CreateHostNetworkInterface) (INPTR BSTR aName,
92 IHostNetworkInterface **aHostNetworkInterface,
93 IProgress **aProgress);
94 STDMETHOD(RemoveHostNetworkInterface) (INPTR GUIDPARAM aId,
95 IHostNetworkInterface **aHostNetworkInterface,
96 IProgress **aProgress);
97#endif
98 STDMETHOD(CreateUSBDeviceFilter) (INPTR BSTR aName, IHostUSBDeviceFilter **aFilter);
99 STDMETHOD(InsertUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter *aFilter);
100 STDMETHOD(RemoveUSBDeviceFilter) (ULONG aPosition, IHostUSBDeviceFilter **aFilter);
101
102 // public methods only for internal purposes
103
104 HRESULT loadSettings (const settings::Key &aGlobal);
105 HRESULT saveSettings (settings::Key &aGlobal);
106
107#ifdef VBOX_WITH_USB
108 /** @name To be moved, they don't belong here.
109 * @{ */
110 void onUSBDeviceAttached (HostUSBDevice *aDevice);
111 void onUSBDeviceDetached (HostUSBDevice *aDevice);
112 void onUSBDeviceStateChanged(HostUSBDevice *aDevice, bool aRunFilters, SessionMachine *aIgnoreMachine);
113 /** @} */
114
115 HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter, BOOL aActiveChanged = FALSE);
116
117 /* must be called from under this object's lock */
118 USBProxyService *usbProxyService() { return mUSBProxyService; }
119#else /* !VBOX_WITH_USB */
120 USBProxyService *usbProxyService() { return NULL; }
121#endif /* !VBOX_WITH_USB */
122
123 HRESULT checkUSBProxyService();
124
125#ifdef RT_OS_WINDOWS
126 static int networkInterfaceHelperServer (SVCHlpClient *aClient,
127 SVCHlpMsg::Code aMsgCode);
128#endif
129
130 // for VirtualBoxSupportErrorInfoImpl
131 static const wchar_t *getComponentName() { return L"Host"; }
132
133private:
134
135#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
136# ifdef VBOX_USE_LIBHAL
137 bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
138 bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
139# endif
140 void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
141 bool validateDevice(const char *deviceNode, bool isCDROM);
142#endif
143
144#ifdef VBOX_WITH_USB
145 /** specialization for IHostUSBDeviceFilter */
146 ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
147 {
148 VirtualBoxBase *child = VirtualBoxBaseWithChildren::
149 getDependentChild (ComPtr <IUnknown> (aFilter));
150 return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
151 : NULL;
152 }
153
154public: //temporary - will be moved soon.
155 HRESULT applyAllUSBFilters (ComObjPtr <HostUSBDevice> &aDevice,
156 SessionMachine *aMachine = NULL);
157
158 bool applyMachineUSBFilters (SessionMachine *aMachine,
159 ComObjPtr <HostUSBDevice> &aDevice);
160private: //temporary
161#endif /* VBOX_WITH_USB */
162
163#ifdef RT_OS_WINDOWS
164 static int createNetworkInterface (SVCHlpClient *aClient,
165 const Utf8Str &aName,
166 Guid &aGUID, Utf8Str &aErrMsg);
167 static int removeNetworkInterface (SVCHlpClient *aClient,
168 const Guid &aGUID,
169 Utf8Str &aErrMsg);
170 static HRESULT networkInterfaceHelperClient (SVCHlpClient *aClient,
171 Progress *aProgress,
172 void *aUser, int *aVrc);
173#endif
174
175 ComObjPtr <VirtualBox, ComWeakRef> mParent;
176
177#ifdef VBOX_WITH_USB
178 typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
179 USBDeviceFilterList mUSBDeviceFilters;
180
181 /** Pointer to the USBProxyService object. */
182 USBProxyService *mUSBProxyService;
183#endif /* VBOX_WITH_USB */
184};
185
186#endif // ____H_HOSTIMPL
Note: See TracBrowser for help on using the repository browser.

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