VirtualBox

Changeset 100616 in vbox for trunk


Ignore:
Timestamp:
Jul 17, 2023 6:22:58 PM (15 months ago)
Author:
vboxsync
Message:

Shared Clipboard: More code for host service error propagation. bugref:9437

Location:
trunk
Files:
3 edited

Legend:

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

    r100615 r100616  
    5050#define VBOX_CLIPBOARD_EXT_FN_DATA_READ            (2)
    5151#define VBOX_CLIPBOARD_EXT_FN_DATA_WRITE           (3)
     52#define VBOX_CLIPBOARD_EXT_FN_ERROR                (4)
    5253
    5354typedef DECLCALLBACKTYPE(int, FNSHCLEXTCALLBACK,(uint32_t u32Function, uint32_t u32Format, void *pvData, uint32_t cbData));
     
    7980                                    pfnCallback;
    8081        } SetCallback;
     82        /** Reports a clipboard error. */
     83        struct
     84        {
     85            /** Clipboard ID. Optional and can be NULL. */
     86            char                   *pszId;
     87            /** User friendly error message. */
     88            char                   *pszMsg;
     89            /** IPRT-style error code. */
     90            int                     rc;
     91        } Error;
    8192    } u;
    8293} SHCLEXTPARMS;
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp

    r100563 r100616  
    15111511                                LogRel(("Shared Clipboard: Guest reported error %Rrc for transfer %RU32\n",
    15121512                                        pReply->rc, pTransfer->State.uID));
     1513
     1514                                if (g_ExtState.pfnExtension)
     1515                                {
     1516                                    SHCLEXTPARMS parms;
     1517                                    RT_ZERO(parms);
     1518
     1519                                    parms.u.Error.rc     = pReply->rc;
     1520                                    parms.u.Error.pszMsg = RTStrAPrintf2("Guest reported error %Rrc for transfer %RU32", /** @todo Make the error messages more fine-grained based on rc. */
     1521                                                                         pReply->rc, pTransfer->State.uID);
     1522                                    AssertPtrBreakStmt(parms.u.Error.pszMsg, rc = VERR_NO_MEMORY);
     1523
     1524                                    g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_ERROR, &parms, sizeof(parms));
     1525
     1526                                    RTStrFree(parms.u.Error.pszMsg);
     1527                                    parms.u.Error.pszMsg = NULL;
     1528                                }
     1529
    15131530                                RT_FALL_THROUGH();
    15141531                            }
     1532
    15151533                            default:
    15161534                            {
  • trunk/src/VBox/Main/src-client/GuestShClPrivate.cpp

    r100609 r100616  
    4343
    4444# include <VBox/GuestHost/SharedClipboard.h>
     45# ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     46#  include <VBox/GuestHost/SharedClipboard-transfers.h>
     47# endif
    4548# include <VBox/HostServices/VBoxClipboardSvc.h>
     49# include <VBox/HostServices/VBoxClipboardExt.h>
    4650# include <VBox/version.h>
    4751
     
    232236    AssertPtrReturn(pThis, VERR_INVALID_POINTER);
    233237
     238    PSHCLEXTPARMS pParms = (PSHCLEXTPARMS)pvParms;
     239    /* pParms might be NULL, depending on the message. */
     240
    234241    int vrc = VINF_SUCCESS;
    235242
    236243    switch (u32Function)
    237244    {
    238 # ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    239         case VBOX_SHCL_GUEST_FN_REPLY:
     245        case VBOX_CLIPBOARD_EXT_FN_ERROR:
    240246        {
    241             vrc = pThis->reportError("foo", VERR_ADDRESS_CONFLICT, "bar");
     247            vrc = pThis->reportError(pParms->u.Error.pszId, pParms->u.Error.rc, pParms->u.Error.pszMsg);
    242248            break;
    243249        }
    244 # endif
    245         case VBOX_SHCL_GUEST_FN_ERROR:
    246             vrc = pThis->reportError("foo", VERR_ADDRESS_CONFLICT, "bar");
    247             break;
    248250
    249251        default:
     
    251253    }
    252254
    253     PSHCLSVCEXT const pExt = &pThis->m_SvcExtVRDP; /* Currently we only have one extension only. */
     255    PSHCLSVCEXT const pExt = &pThis->m_SvcExtVRDP; /* Currently we have one extension only. */
    254256
    255257    if (pExt->pfnExt)
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