VirtualBox

Changeset 85722 in vbox


Ignore:
Timestamp:
Aug 12, 2020 5:34:49 PM (4 years ago)
Author:
vboxsync
Message:

DnD: Added wire protocol support for querying and reporting guest / host features in host service and VbglR3. Follow-up for r139856.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/HostServices/DragAndDropSvc.h

    r85712 r85722  
    925925{
    926926    CB_MAGIC_DND_CONNECT                   = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_CONNECT, 0),
     927    CB_MAGIC_DND_REPORT_FEATURES           = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_REPORT_FEATURES, 0),
    927928    CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG      = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_GET_NEXT_HOST_MSG, 0),
    928929    CB_MAGIC_DND_HG_ACK_OP                 = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_HG_ACK_OP, 0),
     
    946947} VBOXDNDCBHEADERDATA, *PVBOXDNDCBHEADERDATA;
    947948
    948 typedef struct VBOXDNDCBCONNECTMSGDATA
     949typedef struct VBOXDNDCBCONNECTDATA
    949950{
    950951    /** Callback data header. */
     
    952953    /** Protocol version to use.
    953954     *  Deprecated since VBox 6.1.x. Do not use / rely on it anymore. */
    954     uint32_t                    uProtocol;
    955     uint32_t                    uFlags;
    956 } VBOXDNDCBCONNECTMSGDATA, *PVBOXDNDCBCONNECTMSGDATA;
     955    uint32_t                    uProtocolVersion;
     956    /** Connection flags; currently unused. */
     957    uint32_t                    fFlags;
     958} VBOXDNDCBCONNECTDATA, *PVBOXDNDCBCONNECTDATA;
     959
     960typedef struct VBOXDNDCBREPORTFEATURESDATA
     961{
     962    /** Callback data header. */
     963    VBOXDNDCBHEADERDATA         hdr;
     964    uint32_t                    fGuestFeatures0;
     965} VBOXDNDCBREPORTFEATURESDATA, *PVBOXDNDCBREPORTFEATURESDATA;
    957966
    958967typedef struct VBOXDNDCBDISCONNECTMSGDATA
  • trunk/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.cpp

    r85714 r85722  
    605605                ASSERT_GUEST_BREAK(cParms >= 2);
    606606
    607                 VBOXDNDCBCONNECTMSGDATA data;
     607                VBOXDNDCBCONNECTDATA data;
    608608                RT_ZERO(data);
     609                data.hdr.uMagic = CB_MAGIC_DND_CONNECT;
    609610
    610611                rc = HGCMSvcGetU32(&paParms[idxParm++], &data.hdr.uContextID); \
    611612                ASSERT_GUEST_RC_BREAK(rc);
    612                 rc = HGCMSvcGetU32(&paParms[idxParm++], &data.uProtocol);
    613                 ASSERT_GUEST_RC_BREAK(rc);
    614                 rc = HGCMSvcGetU32(&paParms[idxParm], &data.uFlags);
     613                rc = HGCMSvcGetU32(&paParms[idxParm++], &data.uProtocolVersion);
     614                ASSERT_GUEST_RC_BREAK(rc);
     615                rc = HGCMSvcGetU32(&paParms[idxParm], &data.fFlags);
    615616                ASSERT_GUEST_RC_BREAK(rc);
    616617
     
    618619
    619620                /* Make sure we're only setting a protocl version we're supporting on the host. */
    620                 if (data.uProtocol > uProtocolVer)
    621                     data.uProtocol = uProtocolVer;
    622 
    623                 pClient->uProtocolVerDeprecated = data.uProtocol;
     621                if (data.uProtocolVersion > uProtocolVer)
     622                    data.uProtocolVersion = uProtocolVer;
     623
     624                pClient->uProtocolVerDeprecated = data.uProtocolVersion;
    624625
    625626                /* Return the highest protocol version we're supporting. */
    626627                AssertBreak(idxParm);
    627628                ASSERT_GUEST_BREAK(idxParm);
    628                 paParms[idxParm - 1].u.uint32 = data.uProtocol;
     629                paParms[idxParm - 1].u.uint32 = data.uProtocolVersion;
    629630
    630631                LogFlowFunc(("Client %RU32 is now using protocol v%RU32\n",
     
    638639                LogFlowFunc(("GUEST_DND_REPORT_FEATURES\n"));
    639640                rc = clientReportFeatures(pClient, callHandle, cParms, paParms);
     641                if (RT_SUCCESS(rc))
     642                {
     643                    VBOXDNDCBREPORTFEATURESDATA data;
     644                    RT_ZERO(data);
     645                    data.hdr.uMagic = CB_MAGIC_DND_REPORT_FEATURES;
     646
     647                    data.fGuestFeatures0 = pClient->fGuestFeatures0;
     648                    /* fGuestFeatures1 is not used yet. */
     649
     650                    /* Don't touch initial rc. */
     651                    int rc2 = m_SvcCtx.pfnHostCallback(m_SvcCtx.pvHostData, u32Function, &data, sizeof(data));
     652                    AssertRC(rc2);
     653                }
    640654                break;
    641655            }
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