VirtualBox

source: vbox/trunk/src/VBox/Main/include/USBProxyService.h@ 90828

Last change on this file since 90828 was 90828, checked in by vboxsync, 3 years ago

Main: bugref:1909: Added API localization

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.7 KB
Line 
1/* $Id: USBProxyService.h 90828 2021-08-24 09:44:46Z vboxsync $ */
2/** @file
3 * VirtualBox USB Proxy Service (base) class.
4 */
5
6/*
7 * Copyright (C) 2005-2020 Oracle Corporation
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
18#ifndef MAIN_INCLUDED_USBProxyService_h
19#define MAIN_INCLUDED_USBProxyService_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <VBox/usb.h>
25#include <VBox/usbfilter.h>
26
27#include "VirtualBoxBase.h"
28#include "VirtualBoxImpl.h"
29#include "HostUSBDeviceImpl.h"
30#include "USBProxyBackend.h"
31
32class Host;
33
34namespace settings
35{
36 struct USBDeviceSource;
37 typedef std::list<USBDeviceSource> USBDeviceSourcesList;
38}
39
40
41/**
42 * Base class for the USB Proxy service.
43 */
44class USBProxyService
45 : public VirtualBoxTranslatable
46 , public Lockable
47{
48public:
49 DECLARE_TRANSLATE_METHODS(USBProxyService)
50
51 USBProxyService(Host *aHost);
52 virtual HRESULT init(void);
53 virtual ~USBProxyService();
54
55 /**
56 * Override of the default locking class to be used for validating lock
57 * order with the standard member lock handle.
58 */
59 virtual VBoxLockingClass getLockingClass() const
60 {
61 // the USB proxy service uses the Host object lock, so return the
62 // same locking class as the host
63 return LOCKCLASS_HOSTOBJECT;
64 }
65
66 void uninit(void);
67
68 bool isActive(void);
69 int getLastError(void);
70
71 RWLockHandle *lockHandle() const;
72
73 /** @name Interface for the USBController and the Host object.
74 * @{ */
75 void *insertFilter(PCUSBFILTER aFilter);
76 void removeFilter(void *aId);
77 /** @} */
78
79 /** @name Host Interfaces
80 * @{ */
81 HRESULT getDeviceCollection(std::vector<ComPtr<IHostUSBDevice> > &aUSBDevices);
82 HRESULT addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,
83 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues);
84 HRESULT removeUSBDeviceSource(const com::Utf8Str &aId);
85 /** @} */
86
87 /** @name SessionMachine Interfaces
88 * @{ */
89 HRESULT captureDeviceForVM(SessionMachine *aMachine, IN_GUID aId, const com::Utf8Str &aCaptureFilename);
90 HRESULT detachDeviceFromVM(SessionMachine *aMachine, IN_GUID aId, bool aDone);
91 HRESULT autoCaptureDevicesForVM(SessionMachine *aMachine);
92 HRESULT detachAllDevicesFromVM(SessionMachine *aMachine, bool aDone, bool aAbnormal);
93 /** @} */
94
95 typedef std::list< ComObjPtr<HostUSBDeviceFilter> > USBDeviceFilterList;
96
97 HRESULT i_loadSettings(const settings::USBDeviceSourcesList &llUSBDeviceSources);
98 HRESULT i_saveSettings(settings::USBDeviceSourcesList &llUSBDeviceSources);
99
100 void i_deviceAdded(ComObjPtr<HostUSBDevice> &aDevice, PUSBDEVICE aUSBDevice);
101 void i_deviceRemoved(ComObjPtr<HostUSBDevice> &aDevice);
102 void i_updateDeviceState(ComObjPtr<HostUSBDevice> &aDevice, PUSBDEVICE aUSBDevice, bool fFakeUpdate);
103
104protected:
105 ComObjPtr<HostUSBDevice> findDeviceById(IN_GUID aId);
106
107 static HRESULT setError(HRESULT aResultCode, const char *aText, ...);
108
109 USBProxyBackend *findUsbProxyBackendById(const com::Utf8Str &strId);
110
111 HRESULT createUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId,
112 const com::Utf8Str &aAddress, const std::vector<com::Utf8Str> &aPropertyNames,
113 const std::vector<com::Utf8Str> &aPropertyValues, bool fLoadingSettings);
114
115private:
116
117 HRESULT runAllFiltersOnDevice(ComObjPtr<HostUSBDevice> &aDevice,
118 SessionMachinesList &llOpenedMachines,
119 SessionMachine *aIgnoreMachine);
120 bool runMachineFilters(SessionMachine *aMachine, ComObjPtr<HostUSBDevice> &aDevice);
121
122 void deviceChanged(ComObjPtr<HostUSBDevice> &aDevice, bool fRunFilters, SessionMachine *aIgnoreMachine);
123
124 /** Pointer to the Host object. */
125 Host *mHost;
126 /** List of smart HostUSBDevice pointers. */
127 typedef std::list<ComObjPtr<HostUSBDevice> > HostUSBDeviceList;
128 /** List of the known USB devices. */
129 HostUSBDeviceList mDevices;
130 /** List of USBProxyBackend pointers. */
131 typedef std::list<ComObjPtr<USBProxyBackend> > USBProxyBackendList;
132 /** List of active USB backends. */
133 USBProxyBackendList mBackends;
134 int mLastError;
135};
136
137#endif /* !MAIN_INCLUDED_USBProxyService_h */
138/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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