VirtualBox

Ignore:
Timestamp:
Jul 11, 2019 7:34:05 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
132047
Message:

Shared Clipboard/URI: Update.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-uri.cpp

    r79672 r79702  
    5151int VBoxSvcClipboardURISetListOpen(uint32_t cParms, VBOXHGCMSVCPARM paParms[],
    5252                                   PVBOXCLIPBOARDLISTOPENPARMS pOpenParms);
     53int VBoxSvcClipboardURISetListClose(uint32_t cParms, VBOXHGCMSVCPARM paParms[],
     54                                    SHAREDCLIPBOARDLISTHANDLE hList);
    5355
    5456
     
    186188                                              PVBOXCLIPBOARDLISTOPENPARMS pOpenParms, PSHAREDCLIPBOARDLISTHANDLE phList)
    187189{
    188     RT_NOREF(phList);
    189 
    190190    LogFlowFuncEnter();
    191191
     
    241241DECLCALLBACK(int) vboxSvcClipboardURIListClose(PSHAREDCLIPBOARDPROVIDERCTX pCtx, SHAREDCLIPBOARDLISTHANDLE hList)
    242242{
    243     RT_NOREF(pCtx, hList);
    244 
    245     LogFlowFuncEnter();
    246 
    247     int rc = VINF_SUCCESS;
     243    LogFlowFuncEnter();
     244
     245    PVBOXCLIPBOARDCLIENT pClient = (PVBOXCLIPBOARDCLIENT)pCtx->pvUser;
     246    AssertPtr(pClient);
     247
     248    int rc;
     249
     250    PVBOXCLIPBOARDCLIENTMSG pMsg = vboxSvcClipboardMsgAlloc(VBOX_SHARED_CLIPBOARD_HOST_MSG_URI_LIST_CLOSE,
     251                                                            VBOX_SHARED_CLIPBOARD_CPARMS_LIST_CLOSE);
     252    if (pMsg)
     253    {
     254        rc = VBoxSvcClipboardURISetListClose(pMsg->m_cParms, pMsg->m_paParms, hList);
     255        if (RT_SUCCESS(rc))
     256        {
     257            rc = vboxSvcClipboardMsgAdd(pClient->pData, pMsg, true /* fAppend */);
     258            if (RT_SUCCESS(rc))
     259            {
     260                int rc2 = SharedClipboardURITransferEventRegister(pCtx->pTransfer, SHAREDCLIPBOARDURITRANSFEREVENTTYPE_LIST_CLOSE);
     261                AssertRC(rc2);
     262
     263                vboxSvcClipboardClientWakeup(pClient);
     264            }
     265        }
     266    }
     267    else
     268        rc = VERR_NO_MEMORY;
     269
     270    if (RT_SUCCESS(rc))
     271    {
     272        PSHAREDCLIPBOARDURITRANSFERPAYLOAD pPayload;
     273        rc = SharedClipboardURITransferEventWait(pCtx->pTransfer, SHAREDCLIPBOARDURITRANSFEREVENTTYPE_LIST_CLOSE,
     274                                                 30 * 1000 /* Timeout in ms */, &pPayload);
     275        if (RT_SUCCESS(rc))
     276            SharedClipboardURITransferPayloadFree(pPayload);
     277    }
    248278
    249279    LogFlowFuncLeaveRC(rc);
     
    378408    LogFlowFuncEnter();
    379409
    380     return VERR_NOT_IMPLEMENTED;
    381 }
    382 
    383 int vboxSvcClipboardURIObjClose(PSHAREDCLIPBOARDPROVIDERCTX pCtx, SHAREDCLIPBOARDOBJHANDLE hObj)
    384 {
    385     RT_NOREF(pCtx, hObj);
    386 
    387     LogFlowFuncEnter();
    388 
    389410    int rc = VINF_SUCCESS;
    390411
     
    396417}
    397418
     419int vboxSvcClipboardURIObjClose(PSHAREDCLIPBOARDPROVIDERCTX pCtx, SHAREDCLIPBOARDOBJHANDLE hObj)
     420{
     421    RT_NOREF(pCtx, hObj);
     422
     423    LogFlowFuncEnter();
     424
     425    int rc = VINF_SUCCESS;
     426
     427    PVBOXCLIPBOARDCONTEXT pThisCtx = (PVBOXCLIPBOARDCONTEXT)pCtx->pvUser;
     428    AssertPtr(pThisCtx);
     429
     430    LogFlowFuncLeaveRC(rc);
     431    return rc;
     432}
     433
    398434int vboxSvcClipboardURIObjRead(PSHAREDCLIPBOARDPROVIDERCTX pCtx, SHAREDCLIPBOARDOBJHANDLE hObj,
    399435                               void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)
    400436{
    401     RT_NOREF(pCtx, pCtx, hObj, pvData, cbData, fFlags, pcbRead);
    402 
    403     LogFlowFuncEnter();
    404 
    405     return VERR_NOT_IMPLEMENTED;
     437    RT_NOREF(pCtx, hObj, pvData, cbData, fFlags, pcbRead);
     438
     439    LogFlowFuncEnter();
     440
     441    int rc = VINF_SUCCESS;
     442
     443    *pcbRead = cbData;
     444
     445    LogFlowFuncLeaveRC(rc);
     446    return rc;
    406447}
    407448
     
    454495    LogRel(("Shared Clipboard: Transfer failed with %Rrc\n", rc));
    455496}
     497
     498/*********************************************************************************************************************************
     499*   HGCM getters / setters                                                                                                       *
     500*********************************************************************************************************************************/
    456501
    457502/**
     
    522567}
    523568
     569/**
     570 * Gets the URI root entries from HGCM service parameters.
     571 *
     572 * @returns VBox status code.
     573 * @param   cParms              Number of HGCM parameters supplied in \a paParms.
     574 * @param   paParms             Array of HGCM parameters.
     575 * @param   pRoots              Where to store the URI root entries on success.
     576 */
    524577int VBoxSvcClipboardURIGetRoots(uint32_t cParms, VBOXHGCMSVCPARM paParms[],
    525578                                PVBOXCLIPBOARDROOTS pRoots)
     
    604657}
    605658
     659/**
     660 * Sets an URI list open request to HGCM service parameters.
     661 *
     662 * @returns VBox status code.
     663 * @param   cParms              Number of HGCM parameters supplied in \a paParms.
     664 * @param   paParms             Array of HGCM parameters.
     665 * @param   pOpenParms          List open parameters to set.
     666 */
    606667int VBoxSvcClipboardURISetListOpen(uint32_t cParms, VBOXHGCMSVCPARM paParms[],
    607668                                   PVBOXCLIPBOARDLISTOPENPARMS pOpenParms)
     
    618679        HGCMSvcSetPv (&paParms[5], pOpenParms->pszPath, pOpenParms->cbPath);
    619680        HGCMSvcSetU64(&paParms[6], 0); /* OUT: uHandle */
     681
     682        rc = VINF_SUCCESS;
     683    }
     684    else
     685        rc = VERR_INVALID_PARAMETER;
     686
     687    LogFlowFuncLeaveRC(rc);
     688    return rc;
     689}
     690
     691/**
     692 * Sets an URI list close request to HGCM service parameters.
     693 *
     694 * @returns VBox status code.
     695 * @param   cParms              Number of HGCM parameters supplied in \a paParms.
     696 * @param   paParms             Array of HGCM parameters.
     697 * @param   hList               Handle of list to close.
     698 */
     699int VBoxSvcClipboardURISetListClose(uint32_t cParms, VBOXHGCMSVCPARM paParms[],
     700                                    SHAREDCLIPBOARDLISTHANDLE hList)
     701{
     702    int rc;
     703
     704    if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_LIST_CLOSE)
     705    {
     706        HGCMSvcSetU32(&paParms[0], 0 /* uContextID */);
     707        HGCMSvcSetU64(&paParms[1], hList);
    620708
    621709        rc = VINF_SUCCESS;
     
    809897}
    810898
     899/**
     900 * Handles a guest reply (VBOX_SHARED_CLIPBOARD_GUEST_FN_REPLY) message.
     901 *
     902 * @returns VBox status code.
     903 * @param   pClient             Pointer to associated client.
     904 * @param   pTransfer           Pointer to transfer to handle guest reply for.
     905 * @param   cParms              Number of function parameters supplied.
     906 * @param   paParms             Array function parameters supplied.
     907 */
    811908int VBoxSvcClipboardURITransferHandleReply(PVBOXCLIPBOARDCLIENT pClient, PSHAREDCLIPBOARDURITRANSFER pTransfer,
    812909                                           uint32_t cParms, VBOXHGCMSVCPARM paParms[])
     
    836933                        rc = SharedClipboardURITransferEventSignal(pTransfer,
    837934                                                                   SHAREDCLIPBOARDURITRANSFEREVENTTYPE_LIST_OPEN, pPayload);
     935                        break;
     936                    }
     937
     938                    case VBOX_SHAREDCLIPBOARD_REPLYMSGTYPE_LIST_CLOSE:
     939                    {
     940                        rc = SharedClipboardURITransferEventSignal(pTransfer,
     941                                                                   SHAREDCLIPBOARDURITRANSFEREVENTTYPE_LIST_CLOSE, pPayload);
     942                        break;
     943                    }
     944
     945                    case VBOX_SHAREDCLIPBOARD_REPLYMSGTYPE_OBJ_OPEN:
     946                    {
     947                        rc = SharedClipboardURITransferEventSignal(pTransfer,
     948                                                                   SHAREDCLIPBOARDURITRANSFEREVENTTYPE_OBJ_OPEN, pPayload);
     949                        break;
     950                    }
     951
     952                    case VBOX_SHAREDCLIPBOARD_REPLYMSGTYPE_OBJ_CLOSE:
     953                    {
     954                        rc = SharedClipboardURITransferEventSignal(pTransfer,
     955                                                                   SHAREDCLIPBOARDURITRANSFEREVENTTYPE_OBJ_CLOSE, pPayload);
    838956                        break;
    839957                    }
     
    9991117                        if (enmDir == SHAREDCLIPBOARDURITRANSFERDIR_READ)
    10001118                        {
    1001                             creationCtx.Interface.pfnGetRoots      = vboxSvcClipboardURIGetRoots;
    1002                             creationCtx.Interface.pfnListHdrRead   = vboxSvcClipboardURIListHdrRead;
    1003                             creationCtx.Interface.pfnListEntryRead = vboxSvcClipboardURIListEntryRead;
    1004                             creationCtx.Interface.pfnObjRead       = vboxSvcClipboardURIObjRead;
     1119                            creationCtx.Interface.pfnGetRoots        = vboxSvcClipboardURIGetRoots;
     1120                            creationCtx.Interface.pfnListHdrRead     = vboxSvcClipboardURIListHdrRead;
     1121                            creationCtx.Interface.pfnListEntryRead   = vboxSvcClipboardURIListEntryRead;
     1122                            creationCtx.Interface.pfnObjRead         = vboxSvcClipboardURIObjRead;
    10051123                        }
    10061124                        else
Note: See TracChangeset for help on using the changeset viewer.

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