VirtualBox

Ignore:
Timestamp:
Mar 23, 2022 7:53:21 PM (3 years ago)
Author:
vboxsync
Message:

Main,VMM/PDMUsb,Devices/USB,VRDP: Drop passing pointers through CFGM in favor of using VMM2USERMETHODS::pfnQueryGenericObject, bugref:10053

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/USB/vrdp/USBProxyDevice-vrdp.cpp

    r93115 r94342  
    2626#include <iprt/alloc.h>
    2727#include <iprt/string.h>
     28#include <iprt/uuid.h>
    2829
    2930#include "../USBProxyDevice.h"
     
    4344 */
    4445
    45 static DECLCALLBACK(int) usbProxyVrdpOpen(PUSBPROXYDEV pProxyDev, const char *pszAddress, void *pvBackend)
    46 {
    47     LogFlow(("usbProxyVrdpOpen: pProxyDev=%p pszAddress=%s, pvBackend=%p\n", pProxyDev, pszAddress, pvBackend));
    48 
    49     PUSBPROXYDEVVRDP pDevVrdp = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVVRDP);
    50     int rc = VINF_SUCCESS;
     46static DECLCALLBACK(int) usbProxyVrdpOpen(PUSBPROXYDEV pProxyDev, const char *pszAddress)
     47{
     48    LogFlow(("usbProxyVrdpOpen: pProxyDev=%p pszAddress=%s\n", pProxyDev, pszAddress));
     49
     50    PUSBPROXYDEVVRDP pDevVrdp = USBPROXYDEV_2_DATA(pProxyDev, PUSBPROXYDEVVRDP);
     51    PPDMUSBINS       pUsbIns  = pProxyDev->pUsbIns;
     52    PCPDMUSBHLP      pHlp     = pUsbIns->pHlpR3;
     53
     54    PCFGMNODE pCfgBackend = pHlp->pfnCFGMGetChild(pUsbIns->pCfg, "BackendCfg");
     55    AssertPtrReturn(pCfgBackend, VERR_NOT_FOUND);
     56
     57    uint32_t idClient = 0;
     58    int rc = pHlp->pfnCFGMQueryU32(pCfgBackend, "ClientId", &idClient);
     59    AssertRCReturn(rc, rc);
     60
     61    RTUUID UuidDev;
     62    char *pszUuid = NULL;
     63
     64    rc = pHlp->pfnCFGMQueryStringAlloc(pUsbIns->pCfg, "UUID", &pszUuid);
     65    AssertRCReturn(rc, rc);
     66
     67    rc = RTUuidFromStr(&UuidDev, pszUuid);
     68    pHlp->pfnMMHeapFree(pUsbIns, pszUuid);
     69    AssertMsgRCReturn(rc, ("Failed to convert UUID from string! rc=%Rrc\n", rc), rc);
    5170
    5271    if (strncmp (pszAddress, REMOTE_USB_BACKEND_PREFIX_S, REMOTE_USB_BACKEND_PREFIX_LEN) == 0)
    5372    {
    54         REMOTEUSBCALLBACK *pCallback = (REMOTEUSBCALLBACK *)pvBackend;
     73        RTUUID UuidRemoteUsbIf;
     74        rc = RTUuidFromStr(&UuidRemoteUsbIf, REMOTEUSBIF_OID); AssertRC(rc);
     75
     76        PREMOTEUSBIF pRemoteUsbIf = (PREMOTEUSBIF)PDMUsbHlpQueryGenericUserObject(pUsbIns, &UuidRemoteUsbIf);
     77        AssertPtrReturn(pRemoteUsbIf, VERR_INVALID_PARAMETER);
     78
     79        REMOTEUSBCALLBACK *pCallback = pRemoteUsbIf->pfnQueryRemoteUsbBackend(pRemoteUsbIf->pvUser, &UuidDev, idClient);
     80        AssertPtrReturn(pCallback, VERR_INVALID_PARAMETER);
     81
    5582        PREMOTEUSBDEVICE pDevice = NULL;
    56 
    57         rc = pCallback->pfnOpen (pCallback->pInstance, pszAddress, strlen (pszAddress) + 1, &pDevice);
    58 
    59         if (RT_SUCCESS (rc))
     83        rc = pCallback->pfnOpen(pCallback->pInstance, pszAddress, strlen (pszAddress) + 1, &pDevice);
     84        if (RT_SUCCESS(rc))
    6085        {
    6186            pDevVrdp->pCallback = pCallback;
Note: See TracChangeset for help on using the changeset viewer.

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