Changeset 60068 in vbox for trunk/src/VBox/Main
- Timestamp:
- Mar 16, 2016 7:43:56 PM (9 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/idl/VirtualBox.xidl
r60067 r60068 8600 8600 uuid="afca788c-4477-787d-60b2-3fa70e56fbbc" 8601 8601 wsmap="managed" 8602 reservedMethods=" 0" reservedAttributes="12"8602 reservedMethods="2" reservedAttributes="12" 8603 8603 > 8604 8604 <desc> … … 9062 9062 <desc>List of currently available host video capture devices.</desc> 9063 9063 </attribute> 9064 9065 <method name="addUSBDeviceSource">9066 <desc>9067 Adds a new USB device source.9068 </desc>9069 <param name="backend" type="wstring" dir="in">9070 <desc>The backend to use as the new device source.</desc>9071 </param>9072 <param name="id" type="wstring" dir="in">9073 <desc>Unique ID to identify the source.</desc>9074 </param>9075 <param name="address" type="wstring" dir="in">9076 <desc>9077 Address to use, the format is dependent on the backend.9078 For USB/IP backends for example the notation is host[:port].9079 </desc>9080 </param>9081 <param name="propertyNames" type="wstring" safearray="yes" dir="in">9082 <desc>Array of property names for more detailed configuration. Not used at the moment.</desc>9083 </param>9084 <param name="propertyValues" type="wstring" safearray="yes" dir="in">9085 <desc>Array of property values for more detailed configuration. Not used at the moment.</desc>9086 </param>9087 </method>9088 9089 <method name="removeUSBDeviceSource">9090 <desc>9091 Removes a previously added USB device source.9092 </desc>9093 <param name="id" type="wstring" dir="in">9094 <desc>The identifier used when the source was added.</desc>9095 </param>9096 </method>9097 9064 9098 9065 </interface> … … 18493 18460 Action performed by the host when an attached USB device 18494 18461 matches this filter. 18495 </desc>18496 </attribute>18497 18498 </interface>18499 18500 18501 <!--18502 // IUSBProxyBackend18503 /////////////////////////////////////////////////////////////////////////18504 -->18505 18506 <interface18507 name="IUSBProxyBackend" extends="$unknown"18508 uuid="dfe56449-6989-4002-80cf-3607f377d40c"18509 wsmap="managed"18510 reservedAttributes="8"18511 >18512 <desc>18513 The USBProxyBackend interface represents a source for USB devices available18514 to the host for attaching to the VM.18515 </desc>18516 18517 <attribute name="name" type="wstring" readonly="yes">18518 <desc>18519 The unique name of the proxy backend.18520 </desc>18521 </attribute>18522 18523 <attribute name="type" type="wstring" readonly="yes">18524 <desc>18525 The type of the backend.18526 18462 </desc> 18527 18463 </attribute> -
trunk/src/VBox/Main/include/HostImpl.h
r60067 r60068 145 145 HRESULT generateMACAddress(com::Utf8Str &aAddress); 146 146 147 HRESULT addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,148 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues);149 150 HRESULT removeUSBDeviceSource(const com::Utf8Str &aId);151 152 147 // Internal Methods. 153 148 -
trunk/src/VBox/Main/include/USBProxyBackend.h
r60067 r60068 30 30 #include "VirtualBoxImpl.h" 31 31 #include "HostUSBDeviceImpl.h" 32 #include "USBProxyBackendWrap.h"33 32 class USBProxyService; 34 33 … … 37 36 */ 38 37 class USBProxyBackend 39 : public USBProxyBackendWrap40 { 41 public: 42 USBProxyBackend(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);43 virtual int init( const com::Utf8Str &strAddress);38 : public VirtualBoxTranslatable 39 { 40 public: 41 USBProxyBackend(USBProxyService *pUsbProxyService); 42 virtual int init(void); 44 43 virtual ~USBProxyBackend(); 45 44 45 /** 46 * Override of the default locking class to be used for validating lock 47 * order with the standard member lock handle. 48 */ 49 virtual VBoxLockingClass getLockingClass() const 50 { 51 // the USB proxy service uses the Host object lock, so return the 52 // same locking class as the host 53 return LOCKCLASS_HOSTOBJECT; 54 } 55 46 56 bool isActive(void); 47 const com::Utf8Str &i_getId(); 48 uint32_t i_getRefCount();57 58 RWLockHandle *lockHandle() const; 49 59 50 60 /** @name Interface for the USBController and the Host object. … … 86 96 virtual PUSBDEVICE getDevices(void); 87 97 bool updateDeviceStateFake(HostUSBDevice *aDevice, PUSBDEVICE aUSBDevice, bool *aRunFilters, SessionMachine **aIgnoreMachine); 88 uint32_t incRef();89 uint32_t decRef();90 98 91 99 static HRESULT setError(HRESULT aResultCode, const char *aText, ...); … … 96 104 private: 97 105 98 // wrapped IUSBProxyBackend properties99 HRESULT getName(com::Utf8Str &aName);100 HRESULT getType(com::Utf8Str &aType);101 102 106 static DECLCALLBACK(int) serviceThread(RTTHREAD Thread, void *pvUser); 103 107 104 108 protected: 105 109 /** Pointer to the owning USB Proxy Service object. */ 106 USBProxyService 110 USBProxyService *m_pUsbProxyService; 107 111 /** Thread handle of the service thread. */ 108 RTTHREAD 112 RTTHREAD mThread; 109 113 /** Flag which stop() sets to cause serviceThread to return. */ 110 bool volatile mTerminate; 111 /** Id of the instance. */ 112 const com::Utf8Str m_strId; 113 /** Reference counter which prevents the backend instance from being removed. */ 114 uint32_t m_cRefs; 114 bool volatile mTerminate; 115 115 }; 116 116 … … 130 130 { 131 131 public: 132 USBProxyBackendDarwin(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);133 int init( const com::Utf8Str &strAddress);132 USBProxyBackendDarwin(USBProxyService *pUsbProxyService); 133 int init(void); 134 134 ~USBProxyBackendDarwin(); 135 135 … … 179 179 { 180 180 public: 181 USBProxyBackendLinux(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);182 int init( const com::Utf8Str &strAddress);181 USBProxyBackendLinux(USBProxyService *pUsbProxyService); 182 int init(void); 183 183 ~USBProxyBackendLinux(); 184 184 … … 230 230 { 231 231 public: 232 USBProxyBackendOs2 (USBProxyService *pUsbProxyService , const com::Utf8Str &strId);233 /// @todo virtual int init( const com::Utf8Str &strAddress);232 USBProxyBackendOs2 (USBProxyService *pUsbProxyService); 233 /// @todo virtual int init(void); 234 234 ~USBProxyBackendOs2(); 235 235 … … 272 272 { 273 273 public: 274 USBProxyBackendSolaris(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);275 int init( const com::Utf8Str &strAddress);274 USBProxyBackendSolaris(USBProxyService *pUsbProxyService); 275 int init(void); 276 276 ~USBProxyBackendSolaris(); 277 277 … … 305 305 { 306 306 public: 307 USBProxyBackendWindows(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);308 int init( const com::Utf8Str &strAddress);307 USBProxyBackendWindows(USBProxyService *pUsbProxyService); 308 int init(void); 309 309 ~USBProxyBackendWindows(); 310 310 … … 334 334 { 335 335 public: 336 USBProxyBackendFreeBSD(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);337 int init( const com::Utf8Str &strAddress);336 USBProxyBackendFreeBSD(USBProxyService *pUsbProxyService); 337 int init(void); 338 338 ~USBProxyBackendFreeBSD(); 339 339 … … 369 369 /** Waiting for the complete reception of a UsbIpExportedDevice structure. */ 370 370 kUsbIpRecvState_ExportedDevice, 371 /** Waiting for a complete reception of a UsbIpDeviceInterface structure to skip. */371 /** Waiting for a complete reception a UsbIpDeviceInterface strucutre to skip. */ 372 372 kUsbIpRecvState_DeviceInterface, 373 373 /** 32bit hack. */ … … 385 385 { 386 386 public: 387 USBProxyBackendUsbIp(USBProxyService *pUsbProxyService , const com::Utf8Str &strId);388 int init( const com::Utf8Str &strAddress);387 USBProxyBackendUsbIp(USBProxyService *pUsbProxyService); 388 int init(void); 389 389 ~USBProxyBackendUsbIp(); 390 390 -
trunk/src/VBox/Main/include/USBProxyService.h
r60067 r60068 51 51 } 52 52 53 void uninit(void);54 55 53 bool isActive(void); 56 54 int getLastError(void); … … 67 65 * @{ */ 68 66 HRESULT getDeviceCollection(std::vector<ComPtr<IHostUSBDevice> > &aUSBDevices); 69 HRESULT addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,70 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues);71 HRESULT removeUSBDeviceSource(const com::Utf8Str &aId);72 67 /** @} */ 73 68 … … 83 78 84 79 void i_updateDeviceList(USBProxyBackend *pUsbProxyBackend, PUSBDEVICE pDevices); 85 void i_getUSBFilters(USBDeviceFilterList *pGlobalFilte rs);80 void i_getUSBFilters(USBDeviceFilterList *pGlobalFiltes); 86 81 87 82 protected: … … 89 84 90 85 static HRESULT setError(HRESULT aResultCode, const char *aText, ...); 91 92 USBProxyBackend *findUsbProxyBackendById(const com::Utf8Str &strId);93 86 94 87 private: -
trunk/src/VBox/Main/src-server/HostImpl.cpp
r60067 r60068 1704 1704 1705 1705 return S_OK; 1706 }1707 1708 HRESULT Host::addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,1709 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues)1710 {1711 #ifdef VBOX_WITH_USB1712 /* The USB proxy service will do the locking. */1713 return m->pUSBProxyService->addUSBDeviceSource(aBackend, aId, aAddress, aPropertyNames, aPropertyValues);1714 #else1715 ReturnComNotImplemented();1716 #endif1717 }1718 1719 HRESULT Host::removeUSBDeviceSource(const com::Utf8Str &aId)1720 {1721 #ifdef VBOX_WITH_USB1722 /* The USB proxy service will do the locking. */1723 return m->pUSBProxyService->removeUSBDeviceSource(aId);1724 #else1725 ReturnComNotImplemented();1726 #endif1727 1706 } 1728 1707 -
trunk/src/VBox/Main/src-server/USBProxyBackend.cpp
r60067 r60068 38 38 * Initialize data members. 39 39 */ 40 USBProxyBackend::USBProxyBackend(USBProxyService *pUsbProxyService, const com::Utf8Str &strId) 41 : m_pUsbProxyService(pUsbProxyService), mThread(NIL_RTTHREAD), mTerminate(false), m_strId(strId), 42 m_cRefs(0) 43 { 44 LogFlowThisFunc(("pUsbProxyService=%p strId=%s\n", pUsbProxyService, strId.c_str())); 40 USBProxyBackend::USBProxyBackend(USBProxyService *pUsbProxyService) 41 : m_pUsbProxyService(pUsbProxyService), mThread(NIL_RTTHREAD), mTerminate(false) 42 { 43 LogFlowThisFunc(("pUsbProxyService=%p\n", pUsbProxyService)); 45 44 } 46 45 … … 49 48 * Stub needed as long as the class isn't virtual 50 49 */ 51 int USBProxyBackend::init(const com::Utf8Str &strAddress) 52 { 53 NOREF(strAddress); 50 int USBProxyBackend::init(void) 51 { 54 52 return VINF_SUCCESS; 55 53 } … … 81 79 82 80 /** 83 * Returns the ID of the instance. 84 * 85 * @returns ID string for the instance. 86 */ 87 const com::Utf8Str &USBProxyBackend::i_getId() 88 { 89 return m_strId; 90 } 91 92 93 /** 94 * Returns the current reference counter for the backend. 95 */ 96 uint32_t USBProxyBackend::i_getRefCount() 97 { 98 AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS); 99 return m_cRefs; 81 * We're using the Host object lock. 82 * 83 * This is just a temporary measure until all the USB refactoring is 84 * done, probably... For now it help avoiding deadlocks we don't have 85 * time to fix. 86 * 87 * @returns Lock handle. 88 */ 89 RWLockHandle *USBProxyBackend::lockHandle() const 90 { 91 return m_pUsbProxyService->lockHandle(); 100 92 } 101 93 … … 133 125 AssertReturn(!isWriteLockOnCurrentThread(), E_FAIL); 134 126 AssertReturn(!aDevice->isWriteLockOnCurrentThread(), E_FAIL); 135 136 /*137 * Get the lists we'll iterate.138 */139 Host::USBDeviceFilterList globalFilters;140 m_pUsbProxyService->i_getUSBFilters(&globalFilters);141 142 127 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS); 143 128 AutoWriteLock devLock(aDevice COMMA_LOCKVAL_SRC_POS); 144 129 AssertMsgReturn(aDevice->i_isCapturableOrHeld(), ("{%s} %s\n", aDevice->i_getName().c_str(), 145 130 aDevice->i_getStateName()), E_FAIL); 131 132 /* 133 * Get the lists we'll iterate. 134 */ 135 Host::USBDeviceFilterList globalFilters; 136 137 m_pUsbProxyService->i_getUSBFilters(&globalFilters); 146 138 147 139 /* … … 316 308 NOREF(aDevice); 317 309 NOREF(aSuccess); 318 319 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);320 incRef();321 310 } 322 311 … … 361 350 NOREF(aDevice); 362 351 NOREF(aSuccess); 363 364 AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);365 decRef();366 352 } 367 353 … … 444 430 LogFlowThisFunc(("not active\n")); 445 431 446 /* Make sure there is no device from us in the list anymore. */447 m_pUsbProxyService->i_updateDeviceList(this, NULL);448 449 432 return rc; 450 433 } … … 638 621 } 639 622 640 /**641 * Increments the reference counter.642 *643 * @returns New reference count value.644 */645 uint32_t USBProxyBackend::incRef()646 {647 Assert(isWriteLockOnCurrentThread());648 649 return ++m_cRefs;650 }651 652 /**653 * Decrements the reference counter.654 *655 * @returns New reference count value.656 */657 uint32_t USBProxyBackend::decRef()658 {659 Assert(isWriteLockOnCurrentThread());660 661 return --m_cRefs;662 }663 623 664 624 /** … … 804 764 } 805 765 806 HRESULT USBProxyBackend::getName(com::Utf8Str &aName) 807 { 808 /* strId is constant during life time, no need to lock */ 809 aName = m_strId; 810 return S_OK; 811 } 812 813 HRESULT USBProxyBackend::getType(com::Utf8Str &aType) 814 { 815 aType = Utf8Str(""); 816 return S_OK; 766 767 /*static*/ 768 HRESULT USBProxyBackend::setError(HRESULT aResultCode, const char *aText, ...) 769 { 770 va_list va; 771 va_start(va, aText); 772 HRESULT rc = VirtualBoxBase::setErrorInternal(aResultCode, 773 COM_IIDOF(IHost), 774 "USBProxyBackend", 775 Utf8StrFmt(aText, va), 776 false /* aWarning*/, 777 true /* aLogIt*/); 778 va_end(va); 779 return rc; 817 780 } 818 781 -
trunk/src/VBox/Main/src-server/USBProxyService.cpp
r60067 r60068 67 67 USBProxyBackend *pUsbProxyBackendHost; 68 68 # if defined(RT_OS_DARWIN) 69 pUsbProxyBackendHost = new USBProxyBackendDarwin(this , Utf8Str("host"));69 pUsbProxyBackendHost = new USBProxyBackendDarwin(this); 70 70 # elif defined(RT_OS_LINUX) 71 pUsbProxyBackendHost = new USBProxyBackendLinux(this , Utf8Str("host"));71 pUsbProxyBackendHost = new USBProxyBackendLinux(this); 72 72 # elif defined(RT_OS_OS2) 73 pUsbProxyBackendHost = new USBProxyBackendOs2(this , Utf8Str("host"));73 pUsbProxyBackendHost = new USBProxyBackendOs2(this); 74 74 # elif defined(RT_OS_SOLARIS) 75 pUsbProxyBackendHost = new USBProxyBackendSolaris(this , Utf8Str("host"));75 pUsbProxyBackendHost = new USBProxyBackendSolaris(this); 76 76 # elif defined(RT_OS_WINDOWS) 77 pUsbProxyBackendHost = new USBProxyBackendWindows(this , Utf8Str("host"));77 pUsbProxyBackendHost = new USBProxyBackendWindows(this); 78 78 # elif defined(RT_OS_FREEBSD) 79 pUsbProxyBackendHost = new USBProxyBackendFreeBSD(this , Utf8Str("host"));79 pUsbProxyBackendHost = new USBProxyBackendFreeBSD(this); 80 80 # else 81 pUsbProxyBackendHost = new USBProxyBackend(this , Utf8Str("host"));81 pUsbProxyBackendHost = new USBProxyBackend(this); 82 82 # endif 83 int vrc = pUsbProxyBackendHost->init( Utf8Str(""));83 int vrc = pUsbProxyBackendHost->init(); 84 84 if (RT_FAILURE(vrc)) 85 85 { … … 221 221 } 222 222 223 224 HRESULT USBProxyService::addUSBDeviceSource(const com::Utf8Str &aBackend, const com::Utf8Str &aId, const com::Utf8Str &aAddress,225 const std::vector<com::Utf8Str> &aPropertyNames, const std::vector<com::Utf8Str> &aPropertyValues)226 {227 HRESULT hrc = S_OK;228 229 /* Check whether the ID is used first. */230 for (USBProxyBackendList::iterator it = mBackends.begin();231 it != mBackends.end();232 ++it)233 {234 USBProxyBackend *pUsbProxyBackend = *it;235 236 if (aId.equals(pUsbProxyBackend->i_getId()))237 return setError(VBOX_E_OBJECT_IN_USE,238 tr("The USB device source \"%s\" exists already"), aId.c_str());239 }240 241 /* Create appropriate proxy backend. */242 if (aBackend.equalsIgnoreCase("USBIP"))243 {244 USBProxyBackend *pUsbProxyBackend = new USBProxyBackendUsbIp(this, aId);245 246 int vrc = pUsbProxyBackend->init(aAddress);247 if (RT_FAILURE(vrc))248 {249 delete pUsbProxyBackend;250 mLastError = vrc;251 }252 else253 mBackends.push_back(pUsbProxyBackend);254 }255 else256 hrc = setError(VBOX_E_OBJECT_NOT_FOUND,257 tr("The USB backend \"%s\" is not supported"), aBackend.c_str());258 259 return hrc;260 }261 262 HRESULT USBProxyService::removeUSBDeviceSource(const com::Utf8Str &aId)263 {264 for (USBProxyBackendList::iterator it = mBackends.begin();265 it != mBackends.end();266 ++it)267 {268 USBProxyBackend *pUsbProxyBackend = *it;269 270 if (aId.equals(pUsbProxyBackend->i_getId()))271 {272 mBackends.erase(it);273 delete pUsbProxyBackend;274 return S_OK;275 }276 }277 278 return setError(VBOX_E_OBJECT_NOT_FOUND,279 tr("The USB device source \"%s\" could not be found"), aId.c_str());280 }281 223 282 224 /** -
trunk/src/VBox/Main/src-server/darwin/USBProxyBackendDarwin.cpp
r60067 r60068 20 20 * Header Files * 21 21 *********************************************************************************************************************************/ 22 #define LOG_GROUP LOG_GROUP_MAIN23 22 #include "USBProxyBackend.h" 24 23 #include "Logging.h" … … 40 39 * Initialize data members. 41 40 */ 42 USBProxyBackendDarwin::USBProxyBackendDarwin(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)43 : USBProxyBackend(aUsbProxyService , strId), mServiceRunLoopRef(NULL), mNotifyOpaque(NULL), mWaitABitNextTime(false), mUSBLibInitialized(false)41 USBProxyBackendDarwin::USBProxyBackendDarwin(USBProxyService *aUsbProxyService) 42 : USBProxyBackend(aUsbProxyService), mServiceRunLoopRef(NULL), mNotifyOpaque(NULL), mWaitABitNextTime(false), mUSBLibInitialized(false) 44 43 { 45 44 LogFlowThisFunc(("aUsbProxyService=%p\n", aUsbProxyService)); … … 52 51 * @returns VBox status code. 53 52 */ 54 int USBProxyBackendDarwin::init(const com::Utf8Str &strAddress) 55 { 56 NOREF(strAddress); 57 53 int USBProxyBackendDarwin::init(void) 54 { 58 55 /* 59 56 * Initialize the USB library. … … 158 155 USBLibRemoveFilter(aDevice->i_getBackendUserData()); 159 156 aDevice->i_setBackendUserData(NULL); 160 USBProxyBackend::captureDeviceCompleted(aDevice, aSuccess);161 157 } 162 158 … … 213 209 USBLibRemoveFilter(aDevice->i_getBackendUserData()); 214 210 aDevice->i_setBackendUserData(NULL); 215 USBProxyBackend::releaseDeviceCompleted(aDevice, aSuccess);216 211 } 217 212 -
trunk/src/VBox/Main/src-server/freebsd/USBProxyBackendFreeBSD.cpp
r60067 r60068 60 60 * Initialize data members. 61 61 */ 62 USBProxyBackendFreeBSD::USBProxyBackendFreeBSD(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)63 : USBProxyBackend(a UsbProxyService, strId)62 USBProxyBackendFreeBSD::USBProxyBackendFreeBSD(USBProxyService *aUsbProxyService) 63 : USBProxyBackend(aHost) 64 64 { 65 65 LogFlowThisFunc(("aUsbProxyService=%p\n", aUsbProxyService)); … … 72 72 * @returns S_OK on success and non-fatal failures, some COM error otherwise. 73 73 */ 74 int USBProxyBackendFreeBSD::init(const com::Utf8Str &strAddress) 75 { 76 NOREF(strAddress); 77 74 int USBProxyBackendFreeBSD::init(void) 75 { 78 76 /* 79 77 * Create semaphore. -
trunk/src/VBox/Main/src-server/generic/USBProxyBackendUsbIp.cpp
r60067 r60068 265 265 * Initialize data members. 266 266 */ 267 USBProxyBackendUsbIp::USBProxyBackendUsbIp(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)268 : USBProxyBackend(aUsbProxyService , strId)267 USBProxyBackendUsbIp::USBProxyBackendUsbIp(USBProxyService *aUsbProxyService) 268 : USBProxyBackend(aUsbProxyService) 269 269 { 270 270 LogFlowThisFunc(("aUsbProxyService=%p\n", aUsbProxyService)); … … 276 276 * @returns S_OK on success and non-fatal failures, some COM error otherwise. 277 277 */ 278 int USBProxyBackendUsbIp::init( const com::Utf8Str &strAddress)278 int USBProxyBackendUsbIp::init(void) 279 279 { 280 280 int rc = VINF_SUCCESS; … … 282 282 m = new Data; 283 283 284 /* Split address into hostname and port. */ 285 RTCList<RTCString> lstAddress = strAddress.split(":"); 286 if (lstAddress.size() < 1) 287 return VERR_INVALID_PARAMETER; 288 m->pszHost = RTStrDup(lstAddress[0].c_str()); 289 if (!m->pszHost) 290 return VERR_NO_STR_MEMORY; 291 if (lstAddress.size() == 2) 292 { 293 m->uPort = lstAddress[1].toUInt32(); 294 if (!m->uPort) 295 return VERR_INVALID_PARAMETER; 296 } 284 /** @todo: Pass in some config like host and port to connect to. */ 297 285 298 286 /* Setup wakeup pipe and poll set first. */ -
trunk/src/VBox/Main/src-server/linux/USBProxyBackendLinux.cpp
r60067 r60068 60 60 * Initialize data members. 61 61 */ 62 USBProxyBackendLinux::USBProxyBackendLinux(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)63 : USBProxyBackend(aUsbProxyService , strId), mhFile(NIL_RTFILE), mhWakeupPipeR(NIL_RTPIPE),62 USBProxyBackendLinux::USBProxyBackendLinux(USBProxyService *aUsbProxyService) 63 : USBProxyBackend(aUsbProxyService), mhFile(NIL_RTFILE), mhWakeupPipeR(NIL_RTPIPE), 64 64 mhWakeupPipeW(NIL_RTPIPE), mUsingUsbfsDevices(true /* see init */), 65 65 mUdevPolls(0), mpWaiter(NULL) … … 73 73 * @returns VBox status code. 74 74 */ 75 int USBProxyBackendLinux::init(const com::Utf8Str &strAddress) 76 { 77 NOREF(strAddress); 78 75 int USBProxyBackendLinux::init(void) 76 { 79 77 const char *pcszDevicesRoot; 80 78 int rc = USBProxyLinuxChooseMethod(&mUsingUsbfsDevices, &pcszDevicesRoot); -
trunk/src/VBox/Main/src-server/os2/USBProxyBackendOs2.cpp
r60067 r60068 38 38 * Initialize data members. 39 39 */ 40 USBProxyBackendOs2::USBProxyBackendOs2(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)41 : USBProxyBackend(aUsbProxyService , strId), mhev(NULLHANDLE), mhmod(NULLHANDLE),40 USBProxyBackendOs2::USBProxyBackendOs2(USBProxyService *aUsbProxyService) 41 : USBProxyBackend(aUsbProxyService), mhev(NULLHANDLE), mhmod(NULLHANDLE), 42 42 mpfnUsbRegisterChangeNotification(NULL), mpfnUsbDeregisterNotification(NULL), 43 43 mpfnUsbQueryNumberDevices(NULL), mpfnUsbQueryDeviceReport(NULL) -
trunk/src/VBox/Main/src-server/solaris/USBProxyBackendSolaris.cpp
r60067 r60068 55 55 * Initialize data members. 56 56 */ 57 USBProxyBackendSolaris::USBProxyBackendSolaris(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)58 : USBProxyBackend(aUsbProxyService , strId), mUSBLibInitialized(false)57 USBProxyBackendSolaris::USBProxyBackendSolaris(USBProxyService *aUsbProxyService) 58 : USBProxyBackend(aUsbProxyService), mUSBLibInitialized(false) 59 59 { 60 60 LogFlowThisFunc(("aUsbProxyService=%p\n", aUsbProxyService)); … … 67 67 * @returns VBox status code. 68 68 */ 69 int USBProxyBackendSolaris::init(const com::Utf8Str &strAddress) 70 { 71 NOREF(strAddress); 72 69 int USBProxyBackendSolaris::init(void) 70 { 73 71 /* 74 72 * Create semaphore. … … 386 384 USBLibRemoveFilter(aDevice->i_getBackendUserData()); 387 385 aDevice->i_setBackendUserData(NULL); 388 USBProxyBackend::captureDeviceCompleted(aDevice, aSuccess);389 386 } 390 387 … … 442 439 USBLibRemoveFilter(aDevice->i_getBackendUserData()); 443 440 aDevice->i_setBackendUserData(NULL); 444 USBProxyBackend::releaseDeviceCompleted(aDevice, aSuccess);445 441 } 446 442 -
trunk/src/VBox/Main/src-server/win/USBProxyBackendWindows.cpp
r60067 r60068 38 38 * Initialize data members. 39 39 */ 40 USBProxyBackendWindows::USBProxyBackendWindows(USBProxyService *aUsbProxyService , const com::Utf8Str &strId)41 : USBProxyBackend(aUsbProxyService , strId), mhEventInterrupt(INVALID_HANDLE_VALUE)40 USBProxyBackendWindows::USBProxyBackendWindows(USBProxyService *aUsbProxyService) 41 : USBProxyBackend(aUsbProxyService), mhEventInterrupt(INVALID_HANDLE_VALUE) 42 42 { 43 43 LogFlowThisFunc(("aUsbProxyService=%p\n", aUsbProxyService)); … … 50 50 * @returns S_OK on success and non-fatal failures, some COM error otherwise. 51 51 */ 52 int USBProxyBackendWindows::init(const com::Utf8Str &strAddress) 53 { 54 NOREF(strAddress); 55 52 int USBProxyBackendWindows::init(void) 53 { 56 54 /* 57 55 * Create the semaphore (considered fatal). -
trunk/src/VBox/Main/testcase/Makefile.kmk
r60067 r60068 208 208 tstUSBProxyLinux_SOURCES = \ 209 209 tstUSBProxyLinux.cpp \ 210 ../src-server/linux/USBProxyBackendLinux.cpp \ 210 211 ../src-server/linux/USBGetDevices.cpp 211 212 tstUSBProxyLinux_INCS = \ -
trunk/src/VBox/Main/testcase/tstUSBProxyLinux.cpp
r60067 r60068 21 21 *********************************************************************************************************************************/ 22 22 23 #include "USBProxyBackend.h" 23 24 #include "USBGetDevices.h" 24 25 … … 30 31 31 32 /*** BEGIN STUBS ***/ 33 34 USBProxyBackend::USBProxyBackend(USBProxyService*) {} 35 USBProxyBackend::~USBProxyBackend() {} 36 int USBProxyBackend::init() { return VINF_SUCCESS; } 37 int USBProxyBackend::start() { return VINF_SUCCESS; } 38 int USBProxyBackend::stop() { return VINF_SUCCESS; } 39 RWLockHandle *USBProxyBackend::lockHandle() const { return NULL; } 40 void *USBProxyBackend::insertFilter(USBFILTER const*) { return NULL; } 41 void USBProxyBackend::removeFilter(void*) {} 42 int USBProxyBackend::captureDevice(HostUSBDevice*) { return VINF_SUCCESS; } 43 void USBProxyBackend::captureDeviceCompleted(HostUSBDevice*, bool) {} 44 void USBProxyBackend::detachingDevice(HostUSBDevice*) {} 45 int USBProxyBackend::releaseDevice(HostUSBDevice*) { return VINF_SUCCESS; } 46 void USBProxyBackend::releaseDeviceCompleted(HostUSBDevice*, bool) {} 47 void USBProxyBackend::serviceThreadInit() {} 48 void USBProxyBackend::serviceThreadTerm() {} 49 int USBProxyBackend::wait(unsigned int) { return VINF_SUCCESS; } 50 int USBProxyBackend::interruptWait() { return VINF_SUCCESS; } 51 PUSBDEVICE USBProxyBackend::getDevices() { return NULL; } 52 void USBProxyBackend::deviceAdded(ComObjPtr<HostUSBDevice> &aDevice, SessionMachinesList &llOpenedMachines, PUSBDEVICE aUSBDevice) {} 53 void USBProxyBackend::deviceRemoved(ComObjPtr<HostUSBDevice> &aDevice) {} 54 void USBProxyBackend::deviceChanged(ComObjPtr<HostUSBDevice> &aDevice, SessionMachinesList*, SessionMachine*) {} 55 bool USBProxyBackend::updateDeviceState(HostUSBDevice*, USBDEVICE*, bool*, SessionMachine**) { return true; } 56 bool USBProxyBackend::updateDeviceStateFake(HostUSBDevice*, USBDEVICE*, bool*, SessionMachine**) { return true; } 57 bool USBProxyBackend::isActive() { return true; } 58 59 VBoxMainHotplugWaiter::VBoxMainHotplugWaiter(char const*) {} 60 61 com::Utf8Str HostUSBDevice::i_getName() 62 { 63 return Utf8Str(); 64 } 65 66 void SysFreeString(BSTR bstr) 67 { 68 Assert(0); 69 } 32 70 33 71 static struct
Note:
See TracChangeset
for help on using the changeset viewer.