VirtualBox

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

Last change on this file since 67954 was 65854, checked in by vboxsync, 8 years ago

Main/USBProxyBackendUsbIp: Don't prevent VBoxSVC from starting when the server is not reachable, just try to reconnect every 3 seconds. Smaller other fixes for stale USB device lists when the server is not reachable and a fix for saving the same USB source multiple times

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