VirtualBox

Changeset 97748 in vbox


Ignore:
Timestamp:
Dec 6, 2022 9:26:48 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154809
Message:

DnD: Renamed GUEST_DND_FN_GH_EVT_ERROR -> GUEST_DND_FN_EVT_ERROR to make this message more generic and not only bound to guest -> host (G->H) transfers. We also need a way to pass back errors for host -> guest (H->G) transfers.

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/VBox/HostServices/DragAndDropSvc.h

    r96407 r97748  
    217217    GUEST_DND_FN_GET_NEXT_HOST_MSG        = 300,
    218218
     219    /** Reports back an error to the host.
     220     *
     221     *  Note: Don't change the ID to also support older hosts
     222     *        (was GUEST_DND_FN_GH_EVT_ERROR before < 7.0, only for G->H transfers).
     223     *
     224     *        This was changed to GUEST_DND_FN_EVT_ERROR to be a generic event
     225     *        that also can be used for H->G transfers.
     226     *
     227     * @retval  VINF_SUCCESS on success.
     228     * @retval  VERR_INVALID_CLIENT_ID
     229     * @retval  VERR_WRONG_PARAMETER_COUNT
     230     * @retval  VERR_WRONG_PARAMETER_TYPE
     231     * @since   7.0.x
     232     */
     233    GUEST_DND_FN_EVT_ERROR                = 502,
     234
    219235    /*
    220236     * Host -> Guest operation messages.
     
    248264     */
    249265    GUEST_DND_FN_GH_SND_DATA              = 501,
    250     /** The guest reports an error back to the host. */
    251     GUEST_DND_FN_GH_EVT_ERROR             = 502,
    252266    /** The guest sends a directory entry to the host. */
    253267    GUEST_DND_FN_GH_SND_DIR               = 700,
     
    936950    CB_MAGIC_DND_CONNECT                   = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_CONNECT, 0),
    937951    CB_MAGIC_DND_REPORT_FEATURES           = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_REPORT_FEATURES, 0),
     952    CB_MAGIC_DND_EVT_ERROR                 = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_EVT_ERROR, 0),
    938953    CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG      = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GET_NEXT_HOST_MSG, 0),
    939954    CB_MAGIC_DND_HG_ACK_OP                 = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_HG_ACK_OP, 0),
     
    945960    CB_MAGIC_DND_GH_SND_DIR                = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GH_SND_DIR, 0),
    946961    CB_MAGIC_DND_GH_SND_FILE_HDR           = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GH_SND_FILE_HDR, 0),
    947     CB_MAGIC_DND_GH_SND_FILE_DATA          = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GH_SND_FILE_DATA, 0),
    948     CB_MAGIC_DND_GH_EVT_ERROR              = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GH_EVT_ERROR, 0)
     962    CB_MAGIC_DND_GH_SND_FILE_DATA          = VBOX_DND_CB_MAGIC_MAKE(GUEST_DND_FN_GH_SND_FILE_DATA, 0)
    949963};
    950964
  • TabularUnified trunk/include/VBox/VBoxGuestLib.h

    r96885 r97748  
    13361336
    13371337VBGLR3DECL(int)     VbglR3DnDReportFeatures(uint32_t idClient, uint64_t fGuestFeatures, uint64_t *pfHostFeatures);
     1338VBGLR3DECL(int)     VbglR3DnDSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp);
    13381339
    13391340VBGLR3DECL(int)     VbglR3DnDEventGetNext(PVBGLR3GUESTDNDCMDCTX pCtx, PVBGLR3DNDEVENT *ppEvent);
     
    13461347VBGLR3DECL(int)     VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx, VBOXDNDACTION dndActionDefault, VBOXDNDACTIONLIST dndLstActionsAllowed, const char* pcszFormats, uint32_t cbFormats);
    13471348VBGLR3DECL(int)     VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData);
    1348 VBGLR3DECL(int)     VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp);
    13491349#  endif /* VBOX_WITH_DRAG_AND_DROP_GH */
    13501350/** @} */
  • TabularUnified trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDnD.cpp

    r96407 r97748  
    14191419         * not wait for the data it expects from the guest.
    14201420         */
    1421         int rc2 = VbglR3DnDGHSendError(&m_cmdCtx, rc);
     1421        int rc2 = VbglR3DnDSendError(&m_cmdCtx, rc);
    14221422        AssertRC(rc2);
    14231423    }
  • TabularUnified trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibDragAndDrop.cpp

    r97746 r97748  
    103103
    104104    } while (rc == VERR_INTERRUPTED);
     105
     106    return rc;
     107}
     108
     109
     110/**
     111 * Sends a DnD error back to the host.
     112 *
     113 * @returns IPRT status code.
     114 * @param   pCtx                DnD context to use.
     115 * @param   rcErr               Error (IPRT-style) to send.
     116 */
     117VBGLR3DECL(int) VbglR3DnDSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcErr)
     118{
     119    AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
     120
     121    HGCMMsgGHError Msg;
     122    VBGL_HGCM_HDR_INIT(&Msg.hdr, pCtx->uClientID, GUEST_DND_FN_EVT_ERROR, 2);
     123    /** @todo Context ID not used yet. */
     124    Msg.u.v3.uContext.SetUInt32(0);
     125    Msg.u.v3.rc.SetUInt32((uint32_t)rcErr); /* uint32_t vs. int. */
     126
     127    int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg));
     128
     129    /*
     130     * Never return an error if the host did not accept the error at the current
     131     * time.  This can be due to the host not having any appropriate callbacks
     132     * set which would handle that error.
     133     *
     134     * bird: Looks like VERR_NOT_SUPPORTED is what the host will return if it
     135     *       doesn't an appropriate callback.  The code used to ignore ALL errors
     136     *       the host would return, also relevant ones.
     137     */
     138    if (RT_FAILURE(rc))
     139        LogFlowFunc(("Sending error %Rrc failed with rc=%Rrc\n", rcErr, rc));
     140    if (rc == VERR_NOT_SUPPORTED)
     141        rc = VINF_SUCCESS;
    105142
    106143    return rc;
     
    18821919        if (rc != VERR_CANCELLED)
    18831920        {
    1884             int rc2 = VbglR3DnDGHSendError(pCtx, rc);
     1921            int rc2 = VbglR3DnDSendError(pCtx, rc);
    18851922            if (RT_FAILURE(rc2))
    18861923                LogFlowFunc(("Unable to send error (%Rrc) to host, rc=%Rrc\n", rc, rc2));
     
    18901927    return rc;
    18911928}
    1892 
    1893 /**
    1894  * Guest -> Host
    1895  * Send an error back to the host.
    1896  *
    1897  * @returns IPRT status code.
    1898  * @param   pCtx                DnD context to use.
    1899  * @param   rcErr               Error (IPRT-style) to send.
    1900  */
    1901 VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcErr)
    1902 {
    1903     AssertPtrReturn(pCtx, VERR_INVALID_POINTER);
    1904 
    1905     HGCMMsgGHError Msg;
    1906     VBGL_HGCM_HDR_INIT(&Msg.hdr, pCtx->uClientID, GUEST_DND_FN_GH_EVT_ERROR, 2);
    1907     /** @todo Context ID not used yet. */
    1908     Msg.u.v3.uContext.SetUInt32(0);
    1909     Msg.u.v3.rc.SetUInt32((uint32_t)rcErr); /* uint32_t vs. int. */
    1910 
    1911     int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg));
    1912 
    1913     /*
    1914      * Never return an error if the host did not accept the error at the current
    1915      * time.  This can be due to the host not having any appropriate callbacks
    1916      * set which would handle that error.
    1917      *
    1918      * bird: Looks like VERR_NOT_SUPPORTED is what the host will return if it
    1919      *       doesn't an appropriate callback.  The code used to ignore ALL errors
    1920      *       the host would return, also relevant ones.
    1921      */
    1922     if (RT_FAILURE(rc))
    1923         LogFlowFunc(("Sending error %Rrc failed with rc=%Rrc\n", rcErr, rc));
    1924     if (rc == VERR_NOT_SUPPORTED)
    1925         rc = VINF_SUCCESS;
    1926 
    1927     return rc;
    1928 }
    19291929#endif /* VBOX_WITH_DRAG_AND_DROP_GH */
    19301930
  • TabularUnified trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp

    r97740 r97748  
    25662566    if (RT_FAILURE(rc))
    25672567    {
    2568         int rc2 = VbglR3DnDGHSendError(&m_dndCtx, rc);
     2568        int rc2 = VbglR3DnDSendError(&m_dndCtx, rc);
    25692569        LogFlowThisFunc(("Sending error %Rrc to host resulted in %Rrc\n", rc, rc2)); RT_NOREF(rc2);
    25702570        /* This is not fatal for us, just ignore. */
  • TabularUnified trunk/src/VBox/GuestHost/DragAndDrop/DnDUtils.cpp

    r97730 r97748  
    8181        RT_CASE_RET_STR(GUEST_DND_FN_QUERY_FEATURES);
    8282        RT_CASE_RET_STR(GUEST_DND_FN_GET_NEXT_HOST_MSG);
     83        RT_CASE_RET_STR(GUEST_DND_FN_EVT_ERROR);
    8384        RT_CASE_RET_STR(GUEST_DND_FN_HG_ACK_OP);
    8485        RT_CASE_RET_STR(GUEST_DND_FN_HG_REQ_DATA);
     
    8788        RT_CASE_RET_STR(GUEST_DND_FN_GH_SND_DATA_HDR);
    8889        RT_CASE_RET_STR(GUEST_DND_FN_GH_SND_DATA);
    89         RT_CASE_RET_STR(GUEST_DND_FN_GH_EVT_ERROR);
    9090        RT_CASE_RET_STR(GUEST_DND_FN_GH_SND_DIR);
    9191        RT_CASE_RET_STR(GUEST_DND_FN_GH_SND_FILE_DATA);
  • TabularUnified trunk/src/VBox/HostServices/DragAndDrop/VBoxDragAndDropSvc.cpp

    r97731 r97748  
    464464        }
    465465
     466        /* New since VBOx 7.0.x. See define for details. */
     467        case GUEST_DND_FN_EVT_ERROR:
     468        {
     469            rc = VINF_SUCCESS;
     470            break;
     471        }
     472
    466473        case GUEST_DND_FN_HG_ACK_OP:
    467474        case GUEST_DND_FN_HG_REQ_DATA:
     
    482489        case GUEST_DND_FN_GH_SND_FILE_HDR:
    483490        case GUEST_DND_FN_GH_SND_FILE_DATA:
    484         case GUEST_DND_FN_GH_EVT_ERROR:
    485491        {
    486492#ifdef VBOX_WITH_DRAG_AND_DROP_GH
     
    959965                break;
    960966            }
    961             case GUEST_DND_FN_GH_EVT_ERROR:
     967            case GUEST_DND_FN_EVT_ERROR:
    962968            {
    963969                ASSERT_GUEST_BREAK(cParms >= 1);
     
    965971                VBOXDNDCBEVTERRORDATA data;
    966972                RT_ZERO(data);
    967                 data.hdr.uMagic = CB_MAGIC_DND_GH_EVT_ERROR;
     973                data.hdr.uMagic = CB_MAGIC_DND_EVT_ERROR;
    968974
    969975                GET_CONTEXT_ID_PARM0();
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