VirtualBox

Changeset 99987 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
May 26, 2023 7:28:01 AM (21 months ago)
Author:
vboxsync
Message:

Guest Additions/VBoxClient: Add transfer callbacks to start/stop the HTTP server. ​bugref:9437

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/VBoxClient/clipboard-x11.cpp

    r99590 r99987  
    220220}
    221221
     222#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP
     223/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnStart */
     224static DECLCALLBACK(int) vboxClipboardOnTransferStartCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     225{
     226    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
     227    AssertPtr(pCtx);
     228
     229    PSHCLTRANSFER pTransfer = pCbCtx->pTransfer;
     230    AssertPtr(pTransfer);
     231
     232    /* We only need to start the HTTP server (and register the transfer to it) when we actually receive data from the host. */
     233    if (ShClTransferGetDir(pTransfer) == SHCLTRANSFERDIR_FROM_REMOTE)
     234        return ShClHttpTransferRegisterAndMaybeStart(&pCtx->X11.HttpCtx, pTransfer);
     235
     236    return VINF_SUCCESS;
     237}
     238
     239/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnCompleted */
     240static DECLCALLBACK(void) vboxClipboardOnTransferCompletedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx, int rc)
     241{
     242    RT_NOREF(rc);
     243
     244    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
     245    AssertPtr(pCtx);
     246
     247    PSHCLTRANSFER pTransfer = pCbCtx->pTransfer;
     248    AssertPtr(pTransfer);
     249
     250    /* See comment in vboxClipboardOnTransferInitCallback(). */
     251    if (ShClTransferGetDir(pTransfer) == SHCLTRANSFERDIR_FROM_REMOTE)
     252        ShClHttpTransferUnregisterAndMaybeStop(&pCtx->X11.HttpCtx, pTransfer);
     253}
     254
     255/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnError */
     256static DECLCALLBACK(void) vboxClipboardOnTransferErrorCallback(PSHCLTRANSFERCALLBACKCTX pCtx, int rc)
     257{
     258    return vboxClipboardOnTransferCompletedCallback(pCtx, rc);
     259}
     260#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP */
     261
    222262/**
    223263 * The main loop of the X11-specifc Shared Clipboard code.
     
    232272
    233273    bool fShutdown = false;
     274
     275#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     276# ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP
     277    /*
     278     * Set callbacks.
     279     * Those will be registered within VbglR3 when a new transfer gets initialized.
     280     *
     281     * Used for starting / stopping the HTTP server.
     282     */
     283    RT_ZERO(pCtx->CmdCtx.Transfers.Callbacks);
     284
     285    pCtx->CmdCtx.Transfers.Callbacks.pvUser = pCtx; /* Assign context as user-provided callback data. */
     286    pCtx->CmdCtx.Transfers.Callbacks.cbUser = sizeof(SHCLCONTEXT);
     287
     288    pCtx->CmdCtx.Transfers.Callbacks.pfnOnStart      = vboxClipboardOnTransferStartCallback;
     289    pCtx->CmdCtx.Transfers.Callbacks.pfnOnCompleted  = vboxClipboardOnTransferCompletedCallback;
     290    pCtx->CmdCtx.Transfers.Callbacks.pfnOnError      = vboxClipboardOnTransferErrorCallback;
     291# endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP */
     292#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */
    234293
    235294    /* The thread waits for incoming messages from the host. */
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