VirtualBox

Changeset 100545 in vbox


Ignore:
Timestamp:
Jul 12, 2023 12:01:33 PM (21 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158364
Message:

Shared Clipboard: Added some more utility functions for completing and cancelling transfers. bugref:9437

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/GuestHost/SharedClipboard-transfers.h

    r100538 r100545  
    11251125int ShClTransferRun(PSHCLTRANSFER pTransfer, PFNSHCLTRANSFERTHREAD pfnThreadFunc, void *pvUser);
    11261126int ShClTransferStart(PSHCLTRANSFER pTransfer);
     1127int ShClTransferComplete(PSHCLTRANSFER pTransfer);
     1128int ShClTransferCancel(PSHCLTRANSFER pTransfer);
     1129int ShClTransferError(PSHCLTRANSFER pTransfer, int rc);
    11271130
    11281131uint32_t ShClTransferAcquire(PSHCLTRANSFER pTransfer);
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp

    r100540 r100545  
    21582158    LogFlowFuncLeaveRC(rc);
    21592159    return rc;
     2160}
     2161
     2162int ShClTransferComplete(PSHCLTRANSFER pTransfer)
     2163{
     2164    AssertPtrReturn(pTransfer, VERR_INVALID_POINTER);
     2165
     2166    LogFlowFuncEnter();
     2167
     2168    shClTransferLock(pTransfer);
     2169
     2170    AssertMsgReturnStmt(pTransfer->State.enmStatus == SHCLTRANSFERSTATUS_STARTED,
     2171                        ("Wrong status (currently is %s)\n", ShClTransferStatusToStr(pTransfer->State.enmStatus)),
     2172                        shClTransferUnlock(pTransfer), VERR_WRONG_ORDER);
     2173
     2174    int rc = shClTransferSetStatus(pTransfer, SHCLTRANSFERSTATUS_STOPPED);
     2175
     2176    shClTransferUnlock(pTransfer);
     2177
     2178    if (pTransfer->Callbacks.pfnOnCompleted)
     2179        pTransfer->Callbacks.pfnOnCompleted(&pTransfer->CallbackCtx, rc);
     2180
     2181    LogFlowFuncLeaveRC(rc);
     2182    return rc;
     2183}
     2184
     2185static int shClTransferCancelOrError(PSHCLTRANSFER pTransfer, int rc)
     2186{
     2187    AssertPtrReturn(pTransfer, VERR_INVALID_POINTER);
     2188
     2189    LogFlowFunc(("%Rrc\n", rc));
     2190
     2191    shClTransferLock(pTransfer);
     2192
     2193    AssertMsgReturnStmt(pTransfer->State.enmStatus == SHCLTRANSFERSTATUS_STARTED,
     2194                        ("Wrong status (currently is %s)\n", ShClTransferStatusToStr(pTransfer->State.enmStatus)),
     2195                        shClTransferUnlock(pTransfer), VERR_WRONG_ORDER);
     2196
     2197    int rc2;
     2198    if (rc == VERR_CANCELLED)
     2199    {
     2200        rc2 = shClTransferSetStatus(pTransfer, SHCLTRANSFERSTATUS_CANCELED);
     2201
     2202        if (pTransfer->Callbacks.pfnOnCompleted)
     2203            pTransfer->Callbacks.pfnOnCompleted(&pTransfer->CallbackCtx, VERR_CANCELLED);
     2204    }
     2205    else
     2206    {
     2207        rc2 = shClTransferSetStatus(pTransfer, SHCLTRANSFERSTATUS_ERROR);
     2208
     2209        if (pTransfer->Callbacks.pfnOnError)
     2210            pTransfer->Callbacks.pfnOnError(&pTransfer->CallbackCtx, rc);
     2211    }
     2212
     2213    shClTransferUnlock(pTransfer);
     2214
     2215    LogFlowFuncLeaveRC(rc2);
     2216    return rc2;
     2217}
     2218
     2219int ShClTransferCancel(PSHCLTRANSFER pTransfer)
     2220{
     2221    return shClTransferCancelOrError(pTransfer, VERR_CANCELLED);
     2222}
     2223
     2224int ShClTransferError(PSHCLTRANSFER pTransfer, int rc)
     2225{
     2226    return shClTransferCancelOrError(pTransfer, rc);
    21602227}
    21612228
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