VirtualBox

Changeset 55422 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Apr 24, 2015 1:52:33 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
99765
Message:

DnD: Protocol overhaul with versioning added which now can communicate with Main.

Location:
trunk/include/VBox
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/GuestHost/DragAndDrop.h

    r51211 r55422  
    6060    };
    6161
     62    enum Dest
     63    {
     64        Source = 0,
     65        Target
     66    };
     67
     68    DnDURIObject(void);
    6269    DnDURIObject(Type type,
    63                  const RTCString &strSrcPath,
    64                  const RTCString &strDstPath,
    65                  uint32_t fMode, uint64_t cbSize);
     70                 const RTCString &strSrcPath = "",
     71                 const RTCString &strDstPath = "",
     72                 uint32_t fMode = 0, uint64_t cbSize = 0);
    6673    virtual ~DnDURIObject(void);
    6774
     
    6976
    7077    const RTCString &GetSourcePath(void) const { return m_strSrcPath; }
    71     const RTCString &GetDestPath(void) const { return m_strDstPath; }
    72     uint32_t GetMode(void) const { return m_fMode; }
     78    const RTCString &GetDestPath(void) const { return m_strTgtPath; }
     79    uint64_t GetMode(void) const { return m_fMode; }
     80    uint64_t GetProcessed(void) const { return m_cbProcessed; }
    7381    uint64_t GetSize(void) const { return m_cbSize; }
    7482    Type GetType(void) const { return m_Type; }
     
    7684public:
    7785
     86    int SetSize(uint64_t uSize) { m_cbSize = uSize; return VINF_SUCCESS; }
     87
     88public:
     89
     90    void Close(void);
    7891    bool IsComplete(void) const;
    79     static int RebaseURIPath(RTCString &strPath, const RTCString &strBaseOld, const RTCString &strBaseNew);
    80     int Read(void *pvBuf, uint32_t cbToRead, uint32_t *pcbRead);
     92    bool IsOpen(void) const;
     93    int Open(Dest enmDest, uint64_t fOpen);
     94    int OpenEx(const RTCString &strPath, Type enmType, Dest enmDest, uint64_t fMode = 0, uint32_t fFlags = 0);
     95    int Read(void *pvBuf, size_t cbBuf, uint32_t *pcbRead);
     96    int Write(const void *pvBuf, size_t cbBuf, uint32_t *pcbWritten);
     97
     98public:
     99
     100    static int RebaseURIPath(RTCString &strPath, const RTCString &strBaseOld = "", const RTCString &strBaseNew = "");
    81101
    82102protected:
     
    88108    Type      m_Type;
    89109    RTCString m_strSrcPath;
    90     RTCString m_strDstPath;
    91     uint32_t  m_fMode;
     110    RTCString m_strTgtPath;
     111    /** File mode. */
     112    uint64_t  m_fMode;
    92113    /** Size (in bytes) to read/write. */
    93114    uint64_t  m_cbSize;
  • trunk/include/VBox/HostServices/DragAndDropSvc.h

    r55091 r55422  
    44
    55/*
    6  * Copyright (C) 2011-2014 Oracle Corporation
     6 * Copyright (C) 2011-2015 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2727#define ___VBox_HostService_DragAndDropSvc_h
    2828
     29#include <VBox/hgcmsvc.h>
    2930#include <VBox/VMMDev.h>
    3031#include <VBox/VBoxGuest2.h>
     
    8687enum eHostFn
    8788{
     89    /** The host just has set a new DnD mode. */
    8890    HOST_DND_SET_MODE                  = 100,
    8991
     
    9294     */
    9395
     96    /** The host entered the VM window for starting an actual
     97     *  DnD operation. */
    9498    HOST_DND_HG_EVT_ENTER              = 200,
     99    /** The host's DnD cursor moved within the VM window. */
    95100    HOST_DND_HG_EVT_MOVE               = 201,
     101    /** The host left the guest VM window. */
    96102    HOST_DND_HG_EVT_LEAVE              = 202,
     103    /** The host issued a "drop" event, meaning that the host is
     104     *  ready to transfer data over to the guest. */
    97105    HOST_DND_HG_EVT_DROPPED            = 203,
     106    /** The host requested to cancel the current DnD operation. */
    98107    HOST_DND_HG_EVT_CANCEL             = 204,
    99108    /** Gets the actual MIME data, based on
    100      *  the format(s) specified by HOST_DND_HG_EVT_ENTER. */
     109     *  the format(s) specified by HOST_DND_HG_EVT_ENTER. If the guest
     110     *  supplied buffer too small to send the actual data, the host
     111     *  will send a HOST_DND_HG_SND_MORE_DATA message as follow-up. */
    101112    HOST_DND_HG_SND_DATA               = 205,
    102113    /** Sent when the actual buffer for HOST_DND_HG_SND_DATA
    103114     *  was too small, issued by the DnD host service. */
    104115    HOST_DND_HG_SND_MORE_DATA          = 206,
    105     /** Directory entry to be handled on the guest. */
     116    /** Directory entry to be sent to the guest. */
    106117    HOST_DND_HG_SND_DIR                = 207,
    107     /** File entry to be handled on the guest. */
    108     HOST_DND_HG_SND_FILE               = 208,
     118    /** File data chunk to send to the guest. */
     119    HOST_DND_HG_SND_FILE_DATA          = 208,
     120    /** File header to send to the guest.
     121     *  Note: Only for protocol version 2 and up (>= VBox 5.0). */
     122    HOST_DND_HG_SND_FILE_HDR           = 209,
    109123
    110124    /*
     
    118132     *  has been started and that the host wants the data in
    119133     *  a specific MIME type. */
    120     HOST_DND_GH_EVT_DROPPED,
    121 
     134    HOST_DND_GH_EVT_DROPPED            = 601,
     135    /** Creates a directory on the guest. */
    122136    HOST_DND_GH_RECV_DIR               = 650,
    123     HOST_DND_GH_RECV_FILE              = 670
     137    /** Retrieves file data from the guest. */
     138    HOST_DND_GH_RECV_FILE_DATA         = 670,
     139    /** Retrieves a file header from the guest.
     140     *  Note: Only for protocol version 2 and up (>= VBox 5.0). */
     141    HOST_DND_GH_RECV_FILE_HDR          = 671,
     142    /** Blow the type up to 32-bit. */
     143    HOST_DND_32BIT_HACK                = 0x7fffffff
    124144};
    125145
     
    127147 * The service functions which are called by guest.
    128148 * Note: When adding new functions to this table, make sure that the actual ID
    129  *       does *not* overlap with the eGuestFn enumeration above!
     149 *       does *not* overlap with the eHostFn enumeration above!
    130150 */
    131151enum eGuestFn
    132152{
     153    /* Guest sends a connection request to the HGCM service.
     154     * Note: New since protocol version 2. */
     155    GUEST_DND_CONNECT                  = 10,
     156
    133157    /**
    134158     * Guest waits for a new message the host wants to process
     
    137161    GUEST_DND_GET_NEXT_HOST_MSG        = 300,
    138162
    139     /* H->G */
     163    /*
     164     * Host -> Guest operation messages.
     165     */
     166
    140167    /** The guest acknowledges that the pending DnD data from
    141168     *  the host can be dropped on the currently selected source
     
    145172     *  from the host. */
    146173    GUEST_DND_HG_REQ_DATA              = 401,
     174    /** Reports back the guest's progress on a host -> guest operation. */
    147175    GUEST_DND_HG_EVT_PROGRESS          = 402,
    148176
    149     /* G->H */
     177    /*
     178     * Guest -> Host operation messages.
     179     */
     180
    150181    /**
    151182     * The guests acknowledges that it currently has a drag'n drop
     
    160191     */
    161192    GUEST_DND_GH_SND_DATA              = 501,
     193    /** Reports an error back to the host. */
    162194    GUEST_DND_GH_EVT_ERROR             = 502,
    163 
     195    /** Guest sends a directory entry to the host. */
    164196    GUEST_DND_GH_SND_DIR               = 700,
    165     GUEST_DND_GH_SND_FILE              = 701
     197    /** Guest sends file data to the host. */
     198    /*  Note: On protocol version 1 this also contains the file name
     199     *        and other attributes. */
     200    GUEST_DND_GH_SND_FILE_DATA         = 701,
     201    /** Guest sends a file header to the host, marking the
     202     *  beginning of a (new) file transfer.
     203     *  Note: Available since protocol version 2 (VBox 5.0). */
     204    GUEST_DND_GH_SND_FILE_HDR          = 702,
     205    /** Blow the type up to 32-bit. */
     206    GUEST_DND_32BIT_HACK               = 0x7fffffff
    166207};
    167208
    168209/**
    169  * The possible states for the progress operations.
    170  */
    171 enum
    172 {
    173     DND_PROGRESS_RUNNING = 1,
     210 * DnD operation progress states.
     211 */
     212typedef enum DNDPROGRESS
     213{
     214    DND_PROGRESS_UNKNOWN               = 0,
     215    DND_PROGRESS_RUNNING               = 1,
    174216    DND_PROGRESS_COMPLETE,
    175217    DND_PROGRESS_CANCELLED,
    176     DND_PROGRESS_ERROR
    177 };
     218    DND_PROGRESS_ERROR,
     219    /** Blow the type up to 32-bit. */
     220    DND_PROGRESS_32BIT_HACK            = 0x7fffffff
     221} DNDPROGRESS, *PDNDPROGRESS;
    178222
    179223#pragma pack (1)
     
    273317} VBOXDNDHGSENDDIRMSG;
    274318
    275 typedef struct VBOXDNDHGSENDFILEMSG
    276 {
    277     VBoxGuestHGCMCallInfo hdr;
    278 
    279     /**
    280      * HG File event.
    281      *
    282      * Used by:
    283      * HOST_DND_HG_SND_FILE
    284      */
     319/**
     320 * File header event.
     321 * Note: Only for protocol version 2 and up.
     322 *
     323 * Used by:
     324 * HOST_DND_HG_SND_FILE_HDR
     325 * HOST_DND_GH_SND_FILE_HDR
     326 */
     327typedef struct VBOXDNDHGSENDFILEHDRMSG
     328{
     329    VBoxGuestHGCMCallInfo hdr;
     330
     331    /** Context ID. Unused at the moment. */
     332    HGCMFunctionParameter uContext;     /* OUT uint32_t */
     333    /** File path. */
    285334    HGCMFunctionParameter pvName;       /* OUT ptr */
     335    /** Size (in bytes) of file path. */
    286336    HGCMFunctionParameter cbName;       /* OUT uint32_t */
    287     HGCMFunctionParameter pvData;       /* OUT ptr */
    288     HGCMFunctionParameter cbData;       /* OUT uint32_t */
     337    /** Optional flags; unused at the moment. */
     338    HGCMFunctionParameter uFlags;       /* OUT uint32_t */
     339    /** File creation mode. */
    289340    HGCMFunctionParameter fMode;        /* OUT uint32_t */
    290 } VBOXDNDHGSENDFILEMSG;
     341    /** Total size (in bytes). */
     342    HGCMFunctionParameter cbTotal;      /* OUT uint64_t */
     343
     344} VBOXDNDHGSENDFILEHDRMSG;
     345
     346/**
     347 * HG: File data (chunk) event.
     348 *
     349 * Used by:
     350 * HOST_DND_HG_SND_FILE
     351 */
     352typedef struct VBOXDNDHGSENDFILEDATAMSG
     353{
     354    VBoxGuestHGCMCallInfo hdr;
     355
     356    union
     357    {
     358        struct
     359        {
     360            HGCMFunctionParameter pvName;       /* OUT ptr */
     361            HGCMFunctionParameter cbName;       /* OUT uint32_t */
     362            HGCMFunctionParameter pvData;       /* OUT ptr */
     363            HGCMFunctionParameter cbData;       /* OUT uint32_t */
     364            HGCMFunctionParameter fMode;        /* OUT uint32_t */
     365        } v1;
     366        struct
     367        {
     368            /** Note: pvName is now part of the VBOXDNDHGSENDFILEHDRMSG message. */
     369            /** Note: cbName is now part of the VBOXDNDHGSENDFILEHDRMSG message. */
     370            HGCMFunctionParameter uContext;     /* OUT uint32_t */
     371            HGCMFunctionParameter pvData;       /* OUT ptr */
     372            HGCMFunctionParameter cbData;       /* OUT uint32_t */
     373            /** Note: fMode is now part of the VBOXDNDHGSENDFILEHDRMSG message. */
     374        } v2;
     375    } u;
     376
     377} VBOXDNDHGSENDFILEDATAMSG;
    291378
    292379typedef struct VBOXDNDGHREQPENDINGMSG
     
    322409 */
    323410
     411/**
     412 * The returned command the host wants to
     413 * run on the guest.
     414 *
     415 * Used by:
     416 * GUEST_DND_GET_NEXT_HOST_MSG
     417 */
    324418typedef struct VBOXDNDNEXTMSGMSG
    325419{
    326420    VBoxGuestHGCMCallInfo hdr;
    327421
    328     /**
    329      * The returned command the host wants to
    330      * run on the guest.
    331      *
    332      * Used by:
    333      * GUEST_DND_GET_NEXT_HOST_MSG
    334      */
    335422    HGCMFunctionParameter msg;          /* OUT uint32_t */
    336423    /** Number of parameters the message needs. */
     
    342429} VBOXDNDNEXTMSGMSG;
    343430
     431/**
     432 * Connection request. Used to tell the DnD protocol
     433 * version to the (host) service.
     434 *
     435 * Used by:
     436 * GUEST_DND_CONNECT
     437 */
     438typedef struct VBOXDNDCONNECTPMSG
     439{
     440    VBoxGuestHGCMCallInfo hdr;
     441
     442    /** Protocol version to use. */
     443    HGCMFunctionParameter uProtocol;     /* OUT uint32_t */
     444    /** Connection flags. Optional. */
     445    HGCMFunctionParameter uFlags;        /* OUT uint32_t */
     446
     447} VBOXDNDCONNECTPMSG;
     448
     449/**
     450 * HG Acknowledge Operation event.
     451 *
     452 * Used by:
     453 * GUEST_DND_HG_ACK_OP
     454 */
    344455typedef struct VBOXDNDHGACKOPMSG
    345456{
    346457    VBoxGuestHGCMCallInfo hdr;
    347458
    348     /**
    349      * HG Acknowledge Operation event.
    350      *
    351      * Used by:
    352      * GUEST_DND_HG_ACK_OP
    353      */
    354459    HGCMFunctionParameter uAction;      /* OUT uint32_t */
    355460} VBOXDNDHGACKOPMSG;
    356461
     462/**
     463 * HG request for data event.
     464 *
     465 * Used by:
     466 * GUEST_DND_HG_REQ_DATA
     467 */
    357468typedef struct VBOXDNDHGREQDATAMSG
    358469{
    359470    VBoxGuestHGCMCallInfo hdr;
    360471
    361     /**
    362      * HG request for data event.
    363      *
    364      * Used by:
    365      * GUEST_DND_HG_REQ_DATA
    366      */
    367472    HGCMFunctionParameter pFormat;      /* OUT ptr */
    368473} VBOXDNDHGREQDATAMSG;
    369474
     475typedef struct VBOXDNDHGEVTPROGRESSMSG
     476{
     477    VBoxGuestHGCMCallInfo hdr;
     478
     479    HGCMFunctionParameter uStatus;
     480    HGCMFunctionParameter uPercent;
     481    HGCMFunctionParameter rc;
     482} VBOXDNDHGEVTPROGRESSMSG;
     483
     484/**
     485 * GH Acknowledge Pending event.
     486 *
     487 * Used by:
     488 * GUEST_DND_GH_ACK_PENDING
     489 */
    370490typedef struct VBOXDNDGHACKPENDINGMSG
    371491{
    372492    VBoxGuestHGCMCallInfo hdr;
    373493
    374     /**
    375      * GH Acknowledge Pending event.
    376      *
    377      * Used by:
    378      * GUEST_DND_GH_ACK_PENDING
    379      */
    380494    HGCMFunctionParameter uDefAction;   /* OUT uint32_t */
    381495    HGCMFunctionParameter uAllActions;  /* OUT uint32_t */
     
    383497} VBOXDNDGHACKPENDINGMSG;
    384498
     499/**
     500 * GH Send Data event.
     501 *
     502 * Used by:
     503 * GUEST_DND_GH_SND_DATA
     504 */
    385505typedef struct VBOXDNDGHSENDDATAMSG
    386506{
    387507    VBoxGuestHGCMCallInfo hdr;
    388508
    389     /**
    390      * GH Send Data event.
    391      *
    392      * Used by:
    393      * GUEST_DND_GH_SND_DATA
    394      */
    395509    HGCMFunctionParameter pvData;       /* OUT ptr */
    396510    /** Total bytes to send. This can be more than
     
    400514} VBOXDNDGHSENDDATAMSG;
    401515
     516/**
     517 * GH Directory event.
     518 *
     519 * Used by:
     520 * GUEST_DND_GH_SND_DIR
     521 */
    402522typedef struct VBOXDNDGHSENDDIRMSG
    403523{
    404524    VBoxGuestHGCMCallInfo hdr;
    405525
    406     /**
    407      * GH Directory event.
    408      *
    409      * Used by:
    410      * GUEST_DND_HG_SND_DIR
    411      */
    412526    HGCMFunctionParameter pvName;       /* OUT ptr */
    413527    HGCMFunctionParameter cbName;       /* OUT uint32_t */
     
    415529} VBOXDNDGHSENDDIRMSG;
    416530
    417 typedef struct VBOXDNDGHSENDFILEMSG
    418 {
    419     VBoxGuestHGCMCallInfo hdr;
    420 
    421     /**
    422      * GH File event.
    423      *
    424      * Used by:
    425      * GUEST_DND_HG_SND_FILE
    426      */
    427     HGCMFunctionParameter pvName;       /* OUT ptr */
    428     HGCMFunctionParameter cbName;       /* OUT uint32_t */
    429     HGCMFunctionParameter pvData;       /* OUT ptr */
    430     HGCMFunctionParameter cbData;       /* OUT uint32_t */
    431     HGCMFunctionParameter fMode;        /* OUT uint32_t */
    432 } VBOXDNDGHSENDFILEMSG;
    433 
     531/**
     532 * GH File header event.
     533 * Note: Only for protocol version 2 and up.
     534 *
     535 * Used by:
     536 * HOST_DND_GH_SND_FILE_HDR
     537 */
     538typedef struct VBOXDNDHGSENDFILEHDRMSG VBOXDNDGHSENDFILEHDRMSG;
     539
     540/**
     541 * GH File data event.
     542 *
     543 * Used by:
     544 * GUEST_DND_HG_SND_FILE_DATA
     545 */
     546typedef struct VBOXDNDGHSENDFILEDATAMSG
     547{
     548    VBoxGuestHGCMCallInfo hdr;
     549
     550    union
     551    {
     552        /* Note: Protocol v1 sends the file name + file mode
     553         *       every time a file data chunk is being sent. */
     554        struct
     555        {
     556            HGCMFunctionParameter pvName;   /* OUT ptr */
     557            HGCMFunctionParameter cbName;   /* OUT uint32_t */
     558            HGCMFunctionParameter fMode;    /* OUT uint32_t */
     559            HGCMFunctionParameter pvData;   /* OUT ptr */
     560            HGCMFunctionParameter cbData;   /* OUT uint32_t */
     561        } v1;
     562        struct
     563        {
     564            /** Context ID. Unused at the moment. */
     565            HGCMFunctionParameter uContext; /* OUT uint32_t */
     566            HGCMFunctionParameter pvData;   /* OUT ptr */
     567            HGCMFunctionParameter cbData;   /* OUT uint32_t */
     568        } v2;
     569    } u;
     570
     571} VBOXDNDGHSENDFILEDATAMSG;
     572
     573/**
     574 * GH Error event.
     575 *
     576 * Used by:
     577 * GUEST_DND_GH_EVT_ERROR
     578 */
    434579typedef struct VBOXDNDGHEVTERRORMSG
    435580{
    436581    VBoxGuestHGCMCallInfo hdr;
    437582
    438     /**
    439      * GH Error event.
    440      *
    441      * Used by:
    442      * GUEST_DND_GH_EVT_ERROR
    443      */
    444     HGCMFunctionParameter uRC;          /* OUT uint32_t */
     583    HGCMFunctionParameter rc;               /* OUT uint32_t */
    445584} VBOXDNDGHEVTERRORMSG;
    446585
     
    452591enum
    453592{
    454     CB_MAGIC_DND_HG_ACK_OP       = 0xe2100b93,
    455     CB_MAGIC_DND_HG_REQ_DATA     = 0x5cb3faf9,
    456     CB_MAGIC_DND_HG_EVT_PROGRESS = 0x8c8a6956,
    457     CB_MAGIC_DND_GH_ACK_PENDING  = 0xbe975a14,
    458     CB_MAGIC_DND_GH_SND_DATA     = 0x4eb61bff,
    459     CB_MAGIC_DND_GH_SND_DIR      = 0x411ca754,
    460     CB_MAGIC_DND_GH_SND_FILE     = 0x65e35eaf,
    461     CB_MAGIC_DND_GH_EVT_ERROR    = 0x117a87c4
     593    CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG      = 0x19820126,
     594    CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG_DATA = 0x19850630,
     595    CB_MAGIC_DND_HG_ACK_OP                 = 0xe2100b93,
     596    CB_MAGIC_DND_HG_REQ_DATA               = 0x5cb3faf9,
     597    CB_MAGIC_DND_HG_EVT_PROGRESS           = 0x8c8a6956,
     598    CB_MAGIC_DND_GH_ACK_PENDING            = 0xbe975a14,
     599    CB_MAGIC_DND_GH_SND_DATA               = 0x4eb61bff,
     600    CB_MAGIC_DND_GH_SND_DIR                = 0x411ca754,
     601    CB_MAGIC_DND_GH_SND_FILE_HDR           = 0x65e35eaf,
     602    CB_MAGIC_DND_GH_SND_FILE_DATA          = 0x19840804,
     603    CB_MAGIC_DND_GH_EVT_ERROR              = 0x117a87c4
    462604};
    463605
     
    468610    /** Context ID to identify callback data. */
    469611    uint32_t u32ContextID;
    470 } VBOXDNDCBHEADERDATA;
    471 typedef VBOXDNDCBHEADERDATA *PVBOXDNDCBHEADERDATA;
     612} VBOXDNDCBHEADERDATA, *PVBOXDNDCBHEADERDATA;
     613
     614typedef struct VBOXDNDCBHGGETNEXTHOSTMSG
     615{
     616    /** Callback data header. */
     617    VBOXDNDCBHEADERDATA hdr;
     618    uint32_t uMsg;
     619    uint32_t cParms;
     620} VBOXDNDCBHGGETNEXTHOSTMSG, *PVBOXDNDCBHGGETNEXTHOSTMSG;
     621
     622typedef struct VBOXDNDCBHGGETNEXTHOSTMSGDATA
     623{
     624    /** Callback data header. */
     625    VBOXDNDCBHEADERDATA hdr;
     626    uint32_t uMsg;
     627    uint32_t cParms;
     628    PVBOXHGCMSVCPARM paParms;
     629} VBOXDNDCBHGGETNEXTHOSTMSGDATA, *PVBOXDNDCBHGGETNEXTHOSTMSGDATA;
    472630
    473631typedef struct VBOXDNDCBHGACKOPDATA
     
    476634    VBOXDNDCBHEADERDATA hdr;
    477635    uint32_t uAction;
    478 } VBOXDNDCBHGACKOPDATA;
    479 typedef VBOXDNDCBHGACKOPDATA *PVBOXDNDCBHGACKOPDATA;
     636} VBOXDNDCBHGACKOPDATA, *PVBOXDNDCBHGACKOPDATA;
    480637
    481638typedef struct VBOXDNDCBHGREQDATADATA
     
    484641    VBOXDNDCBHEADERDATA hdr;
    485642    char *pszFormat;
    486 } VBOXDNDCBHGREQDATADATA;
    487 typedef VBOXDNDCBHGREQDATADATA *PVBOXDNDCBHGREQDATADATA;
     643} VBOXDNDCBHGREQDATADATA, *PVBOXDNDCBHGREQDATADATA;
    488644
    489645typedef struct VBOXDNDCBHGEVTPROGRESSDATA
     
    492648    VBOXDNDCBHEADERDATA hdr;
    493649    uint32_t uPercentage;
    494     uint32_t uState;
    495     int rc;
    496 } VBOXDNDCBHGEVTPROGRESSDATA;
    497 typedef VBOXDNDCBHGEVTPROGRESSDATA *PVBOXDNDCBHGEVTPROGRESSDATA;
     650    uint32_t uStatus;
     651    uint32_t rc;
     652} VBOXDNDCBHGEVTPROGRESSDATA, *PVBOXDNDCBHGEVTPROGRESSDATA;
    498653
    499654typedef struct VBOXDNDCBGHACKPENDINGDATA
     
    504659    uint32_t  uAllActions;
    505660    char     *pszFormat;
    506 } VBOXDNDCBGHACKPENDINGDATA;
    507 typedef VBOXDNDCBGHACKPENDINGDATA *PVBOXDNDCBGHACKPENDINGDATA;
     661} VBOXDNDCBGHACKPENDINGDATA, *PVBOXDNDCBGHACKPENDINGDATA;
    508662
    509663typedef struct VBOXDNDCBSNDDATADATA
     
    516670     *  with every message because the size can change. */
    517671    uint32_t  cbTotalSize;
    518 } VBOXDNDCBSNDDATADATA;
    519 typedef VBOXDNDCBSNDDATADATA *PVBOXDNDCBSNDDATADATA;
     672} VBOXDNDCBSNDDATADATA, *PVBOXDNDCBSNDDATADATA;
    520673
    521674typedef struct VBOXDNDCBSNDDIRDATA
     
    526679    uint32_t  cbPath;
    527680    uint32_t  fMode;
    528 } VBOXDNDCBSNDDIRDATA;
    529 typedef VBOXDNDCBSNDDIRDATA *PVBOXDNDCBSNDDIRDATA;
    530 
    531 typedef struct VBOXDNDCBSNDFILEDATA
    532 {
    533     /** Callback data header. */
    534     VBOXDNDCBHEADERDATA hdr;
     681} VBOXDNDCBSNDDIRDATA, *PVBOXDNDCBSNDDIRDATA;
     682
     683/*  Note: Only for protocol version 2 and up (>= VBox 5.0). */
     684typedef struct VBOXDNDCBSNDFILEHDRDATA
     685{
     686    /** Callback data header. */
     687    VBOXDNDCBHEADERDATA hdr;
     688    /** File path (name). */
    535689    char     *pszFilePath;
     690    /** Size (in bytes) of file path. */
    536691    uint32_t  cbFilePath;
     692    /** Total size (in bytes) of this file. */
     693    uint64_t  cbSize;
     694    /** File (creation) mode. */
    537695    uint32_t  fMode;
    538     void     *pvData;
    539     uint32_t  cbData;
    540 } VBOXDNDCBSNDFILEDATA;
    541 typedef VBOXDNDCBSNDFILEDATA *PVBOXDNDCBSNDFILEDATA;
     696    /** Additional flags. Not used at the moment. */
     697    uint32_t  fFlags;
     698} VBOXDNDCBSNDFILEHDRDATA, *PVBOXDNDCBSNDFILEHDRDATA;
     699
     700typedef struct VBOXDNDCBSNDFILEDATADATA
     701{
     702    /** Callback data header. */
     703    VBOXDNDCBHEADERDATA  hdr;
     704    /** Current file data chunk. */
     705    void                *pvData;
     706    /** Size (in bytes) of current data chunk. */
     707    uint32_t             cbData;
     708    union
     709    {
     710        struct
     711        {
     712            /** File path (name). */
     713            char     *pszFilePath;
     714            /** Size (in bytes) of file path. */
     715            uint32_t  cbFilePath;
     716            /** File (creation) mode. */
     717            uint32_t  fMode;
     718        } v1;
     719        /* Note: Protocol version 2 has the file attributes (name, size,
     720                 mode, ...) in the VBOXDNDCBSNDFILEHDRDATA structure. */
     721    } u;
     722} VBOXDNDCBSNDFILEDATADATA, *PVBOXDNDCBSNDFILEDATADATA;
    542723
    543724typedef struct VBOXDNDCBEVTERRORDATA
     
    546727    VBOXDNDCBHEADERDATA hdr;
    547728    int32_t rc;
    548 } VBOXDNDCBEVTERRORDATA;
    549 typedef VBOXDNDCBEVTERRORDATA *PVBOXDNDCBEVTERRORDATA;
     729} VBOXDNDCBEVTERRORDATA, *PVBOXDNDCBEVTERRORDATA;
    550730
    551731} /* namespace DragAndDropSvc */
  • trunk/include/VBox/HostServices/Service.h

    r55353 r55422  
    44
    55/*
    6  * Copyright (C) 2011-2012 Oracle Corporation
     6 * Copyright (C) 2011-2015 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    5050        initData(uMsg, cParms, aParms);
    5151    }
    52     ~Message()
     52
     53    virtual ~Message(void)
    5354    {
    5455        cleanup();
     
    9091        return VINF_SUCCESS;
    9192    }
     93
    9294    int getParmU64Info(uint32_t iParm, uint64_t *pu64Info) const
    9395    {
     
    100102        return VINF_SUCCESS;
    101103    }
     104
    102105    int getParmPtrInfo(uint32_t iParm, void **ppvAddr, uint32_t *pcSize) const
    103106    {
     
    113116    }
    114117
    115     int copyParms(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst) const
     118    static int copyParms(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst)
    116119    {
    117120        return copyParmsInternal(cParms, paParmsSrc, paParmsDst, false /* fCreatePtrs */);
     
    119122
    120123private:
     124
    121125    uint32_t m_uMsg;
    122126    uint32_t m_cParms;
     
    149153    }
    150154
    151     int copyParmsInternal(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst, bool fCreatePtrs) const
     155    static int copyParmsInternal(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst, bool fCreatePtrs)
    152156    {
    153157        int rc = VINF_SUCCESS;
     
    188192                        /* No, but we have to check if there is enough room. */
    189193                        if (paParmsDst[i].u.pointer.size < paParmsSrc[i].u.pointer.size)
     194                        {
    190195                            rc = VERR_BUFFER_OVERFLOW;
     196                            break;
     197                        }
    191198                    }
     199
    192200                    if (   paParmsDst[i].u.pointer.addr
    193201                        && paParmsSrc[i].u.pointer.size > 0
    194202                        && paParmsDst[i].u.pointer.size > 0)
     203                    {
    195204                        memcpy(paParmsDst[i].u.pointer.addr,
    196205                               paParmsSrc[i].u.pointer.addr,
    197206                               RT_MIN(paParmsDst[i].u.pointer.size, paParmsSrc[i].u.pointer.size));
     207                    }
    198208                    break;
    199209                }
     
    236246{
    237247public:
    238     Client(uint32_t uClientId, VBOXHGCMCALLHANDLE hHandle, uint32_t uMsg, uint32_t cParms, VBOXHGCMSVCPARM aParms[])
     248    Client(uint32_t uClientId, VBOXHGCMCALLHANDLE hHandle = NULL,
     249           uint32_t uMsg = 0, uint32_t cParms = 0, VBOXHGCMSVCPARM aParms[] = NULL)
    239250      : m_uClientId(uClientId)
     251      , m_uProtocol(0)
    240252      , m_hHandle(hHandle)
    241253      , m_uMsg(uMsg)
     
    243255      , m_paParms(aParms) {}
    244256
    245     VBOXHGCMCALLHANDLE handle() const { return m_hHandle; }
    246     uint32_t message() const { return m_uMsg; }
    247     uint32_t clientId() const { return m_uClientId; }
     257public:
     258
     259    VBOXHGCMCALLHANDLE handle(void) const { return m_hHandle; }
     260    uint32_t message(void) const { return m_uMsg; }
     261    uint32_t clientId(void) const { return m_uClientId; }
     262    uint32_t protocol(void) const { return m_uProtocol; }
     263
     264public:
     265
     266    int setProtocol(uint32_t uProtocol) { m_uProtocol = uProtocol; return VINF_SUCCESS; }
     267
     268public:
    248269
    249270    int addMessageInfo(uint32_t uMsg, uint32_t cParms)
     
    259280    int addMessageInfo(const Message *pMessage)
    260281    {
     282        AssertPtrReturn(pMessage, VERR_INVALID_POINTER);
    261283        if (m_cParms != 3)
    262284            return VERR_INVALID_PARAMETER;
     
    269291    int addMessage(const Message *pMessage)
    270292    {
     293        AssertPtrReturn(pMessage, VERR_INVALID_POINTER);
    271294        return pMessage->getData(m_uMsg, m_cParms, m_paParms);
    272295    }
     296
    273297private:
     298
    274299    uint32_t m_uClientId;
     300    /** Optional protocol version the client uses. */
     301    uint32_t m_uProtocol;
    275302    VBOXHGCMCALLHANDLE m_hHandle;
    276303    uint32_t m_uMsg;
  • trunk/include/VBox/VBoxGuestLib.h

    r54010 r55422  
    44
    55/*
    6  * Copyright (C) 2006-2014 Oracle Corporation
     6 * Copyright (C) 2006-2015 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    606606 * Structure containing the context required for
    607607 * either retrieving or sending a HGCM guest control
    608  * command from or to the host.
     608 * commands from or to the host.
    609609 *
    610610 * Note: Do not change parameter order without also
     
    713713/** @name Drag and Drop
    714714 * @{ */
     715/**
     716 * Structure containing the context required for
     717 * either retrieving or sending a HGCM guest drag'n drop
     718 * commands from or to the host.
     719 *
     720 * Note: Do not change parameter order without also
     721 *       adapting all structure initializers.
     722 */
     723typedef struct VBGLR3GUESTDNDCMDCTX
     724{
     725    /** @todo This struct could be handy if we want to implement
     726     *        a second communication channel, e.g. via TCP/IP.
     727     *        Use a union for the HGCM stuff then. */
     728
     729    /** IN: HGCM client ID to use for communication. */
     730    uint32_t uClientID;
     731    /** IN: Protocol version to use. */
     732    uint32_t uProtocol;
     733    /** OUT: Number of parameters retrieved. */
     734    uint32_t uNumParms;
     735} VBGLR3GUESTDNDCMDCTX, *PVBGLR3GUESTDNDCMDCTX;
     736
    715737typedef struct VBGLR3DNDHGCMEVENT
    716738{
    717     uint32_t uType;               /** The event type this struct contains */
    718     uint32_t uScreenId;           /** Screen ID this request belongs to */
    719     char    *pszFormats;          /** Format list (\r\n separated) */
    720     uint32_t cbFormats;           /** Size of pszFormats (\0 included) */
     739    uint32_t uType;               /** The event type this struct contains. */
     740    uint32_t uScreenId;           /** Screen ID this request belongs to. */
     741    char    *pszFormats;          /** Format list (\r\n separated). */
     742    uint32_t cbFormats;           /** Size of pszFormats (\0 included). */
    721743    union
    722744    {
    723745        struct
    724746        {
    725             uint32_t uXpos;       /** X position of guest screen */
    726             uint32_t uYpos;       /** Y position of guest screen */
    727             uint32_t uDefAction;  /** Proposed DnD action */
    728             uint32_t uAllActions; /** Allowed DnD actions */
    729         }a; /** Values used in init, move and drop event type */
     747            uint32_t uXpos;       /** X position of guest screen. */
     748            uint32_t uYpos;       /** Y position of guest screen. */
     749            uint32_t uDefAction;  /** Proposed DnD action. */
     750            uint32_t uAllActions; /** Allowed DnD actions. */
     751        } a; /** Values used in init, move and drop event type. */
    730752        struct
    731753        {
    732             void    *pvData;      /** Data request */
    733             size_t   cbData;      /** Size of pvData */
    734         }b; /** Values used in drop data event type */
    735     }u;
     754            void    *pvData;      /** Data request. */
     755            size_t   cbData;      /** Size of pvData. */
     756        } b; /** Values used in drop data event type. */
     757    } u;
    736758} VBGLR3DNDHGCMEVENT;
    737759typedef VBGLR3DNDHGCMEVENT *PVBGLR3DNDHGCMEVENT;
    738760typedef const PVBGLR3DNDHGCMEVENT CPVBGLR3DNDHGCMEVENT;
    739 VBGLR3DECL(int)     VbglR3DnDConnect(uint32_t *pu32ClientId);
    740 VBGLR3DECL(int)     VbglR3DnDDisconnect(uint32_t u32ClientId);
    741 
    742 VBGLR3DECL(int)     VbglR3DnDProcessNextMessage(uint32_t u32ClientId, CPVBGLR3DNDHGCMEVENT pEvent);
    743 
    744 VBGLR3DECL(int)     VbglR3DnDHGAcknowledgeOperation(uint32_t u32ClientId, uint32_t uAction);
    745 VBGLR3DECL(int)     VbglR3DnDHGRequestData(uint32_t u32ClientId, const char* pcszFormat);
     761VBGLR3DECL(int)     VbglR3DnDConnect(PVBGLR3GUESTDNDCMDCTX pCtx);
     762VBGLR3DECL(int)     VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx);
     763
     764VBGLR3DECL(int)     VbglR3DnDProcessNextMessage(PVBGLR3GUESTDNDCMDCTX pCtx, CPVBGLR3DNDHGCMEVENT pEvent);
     765
     766VBGLR3DECL(int)     VbglR3DnDHGAcknowledgeOperation(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction);
     767VBGLR3DECL(int)     VbglR3DnDHGRequestData(PVBGLR3GUESTDNDCMDCTX pCtx, const char* pcszFormat);
     768VBGLR3DECL(int)     VbglR3DnDHGSetProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr);
    746769#  ifdef VBOX_WITH_DRAG_AND_DROP_GH
    747 VBGLR3DECL(int)     VbglR3DnDGHAcknowledgePending(uint32_t u32ClientId, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats);
    748 VBGLR3DECL(int)     VbglR3DnDGHSendData(uint32_t u32ClientId, const char *pszFormat, void *pvData, uint32_t cbData);
    749 VBGLR3DECL(int)     VbglR3DnDGHSendError(uint32_t u32ClientId, int rcOp);
     770VBGLR3DECL(int)     VbglR3DnDGHAcknowledgePending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats);
     771VBGLR3DECL(int)     VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData);
     772VBGLR3DECL(int)     VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp);
    750773#  endif /* VBOX_WITH_DRAG_AND_DROP_GH */
    751774/** @} */
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