VirtualBox

Changeset 103442 in vbox


Ignore:
Timestamp:
Feb 19, 2024 1:51:37 PM (8 months ago)
Author:
vboxsync
Message:

Shared Clipboard: Condensed more code by adding a SHCLTRANSFERCALLBACKS::pfnOnInitialize() callback function. bugref:9437

Location:
trunk
Files:
8 edited

Legend:

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

    r102816 r103442  
    810810 * Shared Clipboard transfer callback table.
    811811 *
    812  * All callbacks are optional (hence all returning void).
     812 * All callbacks are optional.
     813 * Callbacks which can veto the caller have a return value.
    813814 */
    814815typedef struct _SHCLTRANSFERCALLBACKS
     
    820821     */
    821822    DECLCALLBACKMEMBER(void,  pfnOnCreated,(PSHCLTRANSFERCALLBACKCTX pCbCtx));
     823    /**
     824     * Called when the transfer gets initialized.
     825     *
     826     * @return  VBox status code. On error the intialization will will be treated as failed.
     827     * @param   pCbCtx              Pointer to callback context to use.
     828    */
     829    DECLCALLBACKMEMBER(int,  pfnOnInitialize,(PSHCLTRANSFERCALLBACKCTX pCbCtx));
    822830    /**
    823831     * Called after the transfer got initialized.
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp

    r103367 r103442  
    162162
    163163/**
    164  * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialized
     164 * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialize
    165165 *
    166166 * Called by ShClTransferInit via VbglR3.
     
    170170 * @thread  Clipboard main thread.
    171171 */
    172 static DECLCALLBACK(void) vbtrShClTransferInitializedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     172static DECLCALLBACK(int) vbtrShClTransferInitializeCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
    173173{
    174174    LogFlowFuncEnter();
     
    209209
    210210    LogFlowFuncLeaveRC(rc);
     211    return rc;
    211212}
    212213
     
    979980    pCtx->CmdCtx.Transfers.Callbacks.pfnOnCreated     = vbtrShClTransferCreatedCallback;
    980981    pCtx->CmdCtx.Transfers.Callbacks.pfnOnDestroy     = vbtrShClTransferDestroyCallback;
    981     pCtx->CmdCtx.Transfers.Callbacks.pfnOnInitialized = vbtrShClTransferInitializedCallback;
     982    pCtx->CmdCtx.Transfers.Callbacks.pfnOnInitialize  = vbtrShClTransferInitializeCallback;
    982983    pCtx->CmdCtx.Transfers.Callbacks.pfnOnStarted     = vbtrShClTransferStartedCallback;
    983984    pCtx->CmdCtx.Transfers.Callbacks.pfnOnCompleted   = vbtrShClTransferCompletedCallback;
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp

    r103365 r103442  
    21522152    int rc = ShClTransferSetProvider(pTransfer, &Provider);
    21532153    if (RT_SUCCESS(rc))
    2154     {
    21552154        rc = ShClTransferInit(pTransfer);
    2156         if (RT_SUCCESS(rc))
    2157         {
    2158             /* As soon as we report the INITIALIZED state to the host, the host can start reading stuff from the transfer.
    2159              * So make sure that we really are ready here. */
    2160             if (enmDir == SHCLTRANSFERDIR_TO_REMOTE)
    2161                 AssertMsgStmt(ShClTransferRootsCount(pTransfer), ("No root entries set yet!\n"
    2162                                                                   "Those have to be present as soon we report the transfer as being INITIALIZED to the host\n"),
    2163                               rc = VERR_WRONG_ORDER);
    2164         }
    2165     }
    21662155
    21672156    SHCLTRANSFERID const idTransfer = ShClTransferGetID(pTransfer);
  • trunk/src/VBox/Additions/x11/VBoxClient/clipboard-x11.cpp

    r103365 r103442  
    5757#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP
    5858/**
    59  * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialized
     59 * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialize
    6060 *
    6161 * @thread Clipboard main thread.
    6262 */
    63 static DECLCALLBACK(void) vbclX11OnTransferInitializedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     63static DECLCALLBACK(int) vbclX11OnTransferInitializeCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
    6464{
    6565    LogFlowFuncEnter();
     
    111111
    112112    LogFlowFuncLeaveRC(rc);
     113    return rc;
    113114}
    114115
     
    384385    pCtx->CmdCtx.Transfers.Callbacks.cbUser = sizeof(SHCLCONTEXT);
    385386
    386     pCtx->CmdCtx.Transfers.Callbacks.pfnOnInitialized  = vbclX11OnTransferInitializedCallback;
     387    pCtx->CmdCtx.Transfers.Callbacks.pfnOnInitialize   = vbclX11OnTransferInitializeCallback;
    387388    pCtx->CmdCtx.Transfers.Callbacks.pfnOnRegistered   = vbclX11OnTransferRegisteredCallback;
    388389    pCtx->CmdCtx.Transfers.Callbacks.pfnOnUnregistered = vbclX11OnTransferUnregisteredCallback;
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp

    r102955 r103442  
    12331233    pTransfer->Thread.fCancelled = false;
    12341234
    1235     int rc = shClTransferSetStatus(pTransfer, SHCLTRANSFERSTATUS_INITIALIZED);
     1235    int rc = VINF_SUCCESS;
     1236    if (pTransfer->Callbacks.pfnOnInitialize)
     1237        rc = pTransfer->Callbacks.pfnOnInitialize(&pTransfer->CallbackCtx);
     1238
     1239    if (RT_SUCCESS(rc))
     1240    {
     1241        /* Sanity: Make sure that the transfer we're gonna report as INITIALIZED
     1242         *         actually has some root entries set, as the other side can query for those at any time then. */
     1243        if (pTransfer->State.enmDir == SHCLTRANSFERDIR_TO_REMOTE)
     1244            AssertMsgStmt(ShClTransferRootsCount(pTransfer), ("Transfer has no root entries set\n"), rc = VERR_WRONG_ORDER);
     1245
     1246        rc = shClTransferSetStatus(pTransfer, SHCLTRANSFERSTATUS_INITIALIZED);
     1247
     1248        if (   RT_SUCCESS(rc)
     1249            && pTransfer->Callbacks.pfnOnInitialized)
     1250            pTransfer->Callbacks.pfnOnInitialized(&pTransfer->CallbackCtx);
     1251    }
    12361252
    12371253    shClTransferUnlock(pTransfer);
    12381254
    1239     if (RT_SUCCESS(rc))
    1240     {
    1241         if (pTransfer->Callbacks.pfnOnInitialized)
    1242             pTransfer->Callbacks.pfnOnInitialized(&pTransfer->CallbackCtx);
    1243     }
     1255    if (RT_FAILURE(rc))
     1256        LogRel2(("Shared Clipboard: Initialziation of transfer failed with %Rrc\n", rc));
    12441257
    12451258    LogFlowFuncLeaveRC(rc);
     
    15751588
    15761589        SET_CALLBACK(pfnOnCreated);
     1590        SET_CALLBACK(pfnOnInitialize);
    15771591        SET_CALLBACK(pfnOnInitialized);
    15781592        SET_CALLBACK(pfnOnDestroy);
     
    17751789 * @returns VBox status code.
    17761790 * @param   pTransfer           Clipboard transfer to read root list for.
    1777  *                              Must be in STARTED state.
    17781791 */
    17791792int ShClTransferRootListRead(PSHCLTRANSFER pTransfer)
     
    17821795
    17831796    LogFlowFuncEnter();
    1784 
    1785 #ifdef DEBUG
    1786     shClTransferLock(pTransfer);
    1787     AssertMsgReturn(   pTransfer->State.enmStatus == SHCLTRANSFERSTATUS_INITIALIZED
    1788                     || pTransfer->State.enmStatus == SHCLTRANSFERSTATUS_STARTED,
    1789                     ("Cannot read root list in status %s\n", ShClTransferStatusToStr(pTransfer->State.enmStatus)),
    1790                     VERR_WRONG_ORDER);
    1791     shClTransferUnlock(pTransfer);
    1792 #endif
    17931797
    17941798    int rc;
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp

    r102954 r103442  
    24102410
    24112411        rc = ShClTransferInit(pTransfer);
    2412         if (RT_SUCCESS(rc))
    2413         {
    2414             /* Sanity: Make sure that the transfer we're gonna report as INITIALIZED to the guest
    2415              *         actually has some root entries set, as the guest can query for those at any time then. */
    2416             if (enmDir == SHCLTRANSFERDIR_TO_REMOTE)
    2417                 AssertMsgStmt(ShClTransferRootsCount(pTransfer), ("Transfer has no root entries set\n"), rc = VERR_WRONG_ORDER);
    2418         }
    24192412    }
    24202413    else
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp

    r103363 r103442  
    289289
    290290/**
    291  * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialized
     291 * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialize
    292292 *
    293293 * For G->H: Called on transfer intialization to notify the "in-flight" IDataObject about a data transfer.
     
    296296 * @thread  Service main thread.
    297297 */
    298 static DECLCALLBACK(void) shClSvcWinTransferOnInitializedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     298static DECLCALLBACK(void) shClSvcWinTransferOnInitializeCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
    299299{
    300300    LogFlowFuncEnter();
     
    346346
    347347    LogFlowFuncLeaveRC(rc);
     348    return rc;
    348349}
    349350
     
    857858        pClient->Transfers.Callbacks.cbUser = sizeof(SHCLCONTEXT);
    858859
    859         pClient->Transfers.Callbacks.pfnOnCreated     = shClSvcWinTransferOnCreatedCallback;
    860         pClient->Transfers.Callbacks.pfnOnInitialized = shClSvcWinTransferOnInitializedCallback;
    861         pClient->Transfers.Callbacks.pfnOnDestroy     = shClSvcWinTransferOnDestroyCallback;
     860        pClient->Transfers.Callbacks.pfnOnCreated    = shClSvcWinTransferOnCreatedCallback;
     861        pClient->Transfers.Callbacks.pfnOnInitialize = shClSvcWinTransferOnInitializeCallback;
     862        pClient->Transfers.Callbacks.pfnOnDestroy    = shClSvcWinTransferOnDestroyCallback;
    862863#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */
    863864    }
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp

    r103323 r103442  
    8989#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    9090static DECLCALLBACK(void) shClSvcX11TransferOnCreatedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx);
    91 static DECLCALLBACK(void) shClSvcX11TransferOnInitCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx);
     91static DECLCALLBACK(int) shClSvcX11TransferOnInitCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx);
    9292static DECLCALLBACK(void) shClSvcX11TransferOnDestroyCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx);
    9393static DECLCALLBACK(void) shClSvcX11TransferOnUnregisteredCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx, PSHCLTRANSFERCTX pTransferCtx);
     
    178178
    179179                pClient->Transfers.Callbacks.pfnOnCreated      = shClSvcX11TransferOnCreatedCallback;
    180                 pClient->Transfers.Callbacks.pfnOnInitialized  = shClSvcX11TransferOnInitCallback;
     180                pClient->Transfers.Callbacks.pfnOnInitialize   = shClSvcX11TransferOnInitCallback;
    181181                pClient->Transfers.Callbacks.pfnOnDestroy      = shClSvcX11TransferOnDestroyCallback;
    182182                pClient->Transfers.Callbacks.pfnOnUnregistered = shClSvcX11TransferOnUnregisteredCallback;
     
    411411
    412412/**
    413  * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialized
     413 * @copydoc SHCLTRANSFERCALLBACKS::pfnOnInitialize
    414414 *
    415415 * For G->H: Starts the HTTP server if not done yet and registers the transfer with it.
     
    418418 * @thread  Service main thread.
    419419 */
    420 static DECLCALLBACK(void) shClSvcX11TransferOnInitCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     420static DECLCALLBACK(int) shClSvcX11TransferOnInitCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
    421421{
    422422    LogFlowFuncEnter();
     
    455455
    456456    LogFlowFuncLeaveRC(rc);
     457    return rc;
    457458}
    458459
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