VirtualBox

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

Last change on this file since 8217 was 8155, checked in by vboxsync, 17 years ago

The Big Sun Rebranding Header Change

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.8 KB
Line 
1/* $Id: HostImpl.h 8155 2008-04-18 15:16:47Z 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 HRESULT onUSBDeviceFilterChange (HostUSBDeviceFilter *aFilter,
109 BOOL aActiveChanged = FALSE);
110 HRESULT captureUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId);
111 HRESULT detachUSBDevice (SessionMachine *aMachine, INPTR GUIDPARAM aId, BOOL aDone);
112 HRESULT autoCaptureUSBDevices (SessionMachine *aMachine);
113 HRESULT detachAllUSBDevices (SessionMachine *aMachine, BOOL aDone);
114
115 void onUSBDeviceAttached (HostUSBDevice *aDevice);
116 void onUSBDeviceDetached (HostUSBDevice *aDevice);
117 void onUSBDeviceStateChanged (HostUSBDevice *aDevice);
118
119 /* must be called from under this object's lock */
120 USBProxyService *usbProxyService() { return mUSBProxyService; }
121#else /* !VBOX_WITH_USB */
122 USBProxyService *usbProxyService() { return NULL; }
123#endif /* !VBOX_WITH_USB */
124
125 HRESULT checkUSBProxyService();
126
127#ifdef RT_OS_WINDOWS
128 static int networkInterfaceHelperServer (SVCHlpClient *aClient,
129 SVCHlpMsg::Code aMsgCode);
130#endif
131
132 // for VirtualBoxSupportErrorInfoImpl
133 static const wchar_t *getComponentName() { return L"Host"; }
134
135private:
136
137#if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS)
138# ifdef VBOX_USE_LIBHAL
139 bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list);
140 bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
141# endif
142 void parseMountTable(char *mountTable, std::list <ComObjPtr <HostDVDDrive> > &list);
143 bool validateDevice(const char *deviceNode, bool isCDROM);
144#endif
145
146#ifdef VBOX_WITH_USB
147 /** specialization for IHostUSBDeviceFilter */
148 ComObjPtr <HostUSBDeviceFilter> getDependentChild (IHostUSBDeviceFilter *aFilter)
149 {
150 VirtualBoxBase *child = VirtualBoxBaseWithChildren::
151 getDependentChild (ComPtr <IUnknown> (aFilter));
152 return child ? dynamic_cast <HostUSBDeviceFilter *> (child)
153 : NULL;
154 }
155
156 HRESULT applyAllUSBFilters (ComObjPtr <HostUSBDevice> &aDevice,
157 SessionMachine *aMachine = NULL);
158
159 bool applyMachineUSBFilters (SessionMachine *aMachine,
160 ComObjPtr <HostUSBDevice> &aDevice);
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 <HostUSBDevice> > USBDeviceList;
179 USBDeviceList mUSBDevices;
180
181 typedef std::list <ComObjPtr <HostUSBDeviceFilter> > USBDeviceFilterList;
182 USBDeviceFilterList mUSBDeviceFilters;
183
184 /** Pointer to the USBProxyService object. */
185 USBProxyService *mUSBProxyService;
186#endif /* VBOX_WITH_USB */
187};
188
189#endif // ____H_HOSTIMPL
Note: See TracBrowser for help on using the repository browser.

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