VirtualBox

Changeset 79120 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Jun 13, 2019 10:08:33 AM (6 years ago)
Author:
vboxsync
Message:

Shared Clipboard/URI: Update.

Location:
trunk/include/VBox
Files:
2 edited

Legend:

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

    r79107 r79120  
    2929#ifndef RT_WITHOUT_PRAGMA_ONCE
    3030# pragma once
     31#endif
     32
     33#ifdef VBOX_WITH_SHARED_CLIPBOARD_HOST
     34#include <map> /* Needed for host provider. */
    3135#endif
    3236
     
    378382};
    379383
    380 int SharedClipboardDataHeaderInit(PVBOXCLIPBOARDDATAHDR pDataHdr);
    381 void SharedClipboardDataHeaderDestroy(PVBOXCLIPBOARDDATAHDR pDataHdr);
     384int SharedClipboardURIDataHdrInit(PVBOXCLIPBOARDDATAHDR pDataHdr);
     385void SharedClipboardURIDataHdrDestroy(PVBOXCLIPBOARDDATAHDR pDataHdr);
     386bool SharedClipboardURIDataHdrIsValid(PVBOXCLIPBOARDDATAHDR pDataHdr);
     387bool SharedClipboardURIDataChunkIsValid(PVBOXCLIPBOARDDATACHUNK pDataChunk);
     388void SharedClipboardURIDirDataDestroy(PVBOXCLIPBOARDDIRDATA pDirData);
     389bool SharedClipboardURIDirDataIsValid(PVBOXCLIPBOARDDIRDATA pDirData);
     390void SharedClipboardURIFileHdrDestroy(PVBOXCLIPBOARDFILEHDR pFileHdr);
     391bool SharedClipboardURIFileHdrIsValid(PVBOXCLIPBOARDFILEHDR pFileHdr, PVBOXCLIPBOARDDATAHDR pDataHdr);
     392void SharedClipboardURIFileDataDestroy(PVBOXCLIPBOARDFILEDATA pFileData);
     393bool SharedClipboardURIFileDataIsValid(PVBOXCLIPBOARDFILEDATA pFileData, PVBOXCLIPBOARDDATAHDR pDataHdr);
    382394
    383395/**
     
    405417void *SharedClipboardMetaDataMutableRaw(PSHAREDCLIPBOARDMETADATA pMeta);
    406418const void *SharedClipboardMetaDataRaw(PSHAREDCLIPBOARDMETADATA pMeta);
     419
     420/**
     421 * Structure for maintaining an URI transfer cache.
     422 */
     423typedef struct _SHAREDCLIPBOARDURITRANSFERCACHE
     424{
     425    /** The transfer's cached data header. */
     426    VBOXCLIPBOARDDATAHDR        Header;
     427    /** The transfer's cached meta data. */
     428    SHAREDCLIPBOARDMETADATA     Meta;
     429} SHAREDCLIPBOARDURITRANSFERCACHE, *PSHAREDCLIPBOARDURITRANSFERCACHE;
    407430
    408431/**
     
    436459
    437460/**
     461 * Structure for read parameters.
     462 */
     463typedef struct _SHAREDCLIPBOARDPROVIDERREADPARMS
     464{
     465    union
     466    {
     467        struct
     468        {
     469
     470        } HostService;
     471    } u;
     472} SHAREDCLIPBOARDPROVIDERREADPARMS, *PSHAREDCLIPBOARDPROVIDERREADPARMS;
     473
     474/**
     475 * Structure for write parameters.
     476 */
     477typedef struct _SHAREDCLIPBOARDPROVIDERWRITEPARMS
     478{
     479    union
     480    {
     481        struct
     482        {
     483            uint32_t         uMsg;
     484            uint32_t         cParms;
     485            VBOXHGCMSVCPARM *paParms;
     486        } HostService;
     487    } u;
     488} SHAREDCLIPBOARDPROVIDERWRITEPARMS, *PSHAREDCLIPBOARDPROVIDERWRITEPARMS;
     489
     490/**
    438491 * Interface class acting as a lightweight proxy for abstracting reading / writing clipboard data.
    439492 *
     
    460513    virtual int WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr);
    461514
    462     virtual int ReadMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
    463     virtual int WriteMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
     515    virtual int ReadDataChunk(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvChunk, uint32_t cbChunk, uint32_t *pcbRead,
    464516                              uint32_t fFlags = 0);
     517    virtual int WriteDataChunk(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvChunk, uint32_t cbChunk, uint32_t *pcbWritten,
     518                               uint32_t fFlags = 0);
    465519
    466520    virtual int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
     
    474528
    475529    virtual void Reset(void);
     530
     531public: /* Optional callback handling. */
     532
     533    /*virtual int SetCallbacks();*/
     534
     535    virtual int OnRead(PSHAREDCLIPBOARDPROVIDERREADPARMS pParms);
     536    virtual int OnWrite(PSHAREDCLIPBOARDPROVIDERWRITEPARMS pParms);
    476537
    477538protected:
     
    501562    int WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr);
    502563
    503     int ReadMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
    504     int WriteMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
    505                       uint32_t fFlags = 0);
     564    int ReadDataChunkk(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvChunk, uint32_t cbChunk, uint32_t *pcbRead,
     565                       uint32_t fFlags = 0);
     566    int WriteDataChunk(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvChunk, uint32_t cbChunk, uint32_t *pcbWritten,
     567                       uint32_t fFlags = 0);
    506568
    507569    int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
     
    524586};
    525587
     588#ifdef VBOX_WITH_SHARED_CLIPBOARD_HOST
    526589/**
    527590 * Shared Clipboard provider implementation for host service (host side).
     
    540603    int WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr);
    541604
    542     int ReadMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
    543     int WriteMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
    544                       uint32_t fFlags = 0);
     605    int ReaaDataChunk(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
     606    int WriteDataChunk(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
     607                       uint32_t fFlags = 0);
    545608
    546609    int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
     
    555618    void Reset(void);
    556619
     620public:
     621
     622    int OnRead(PSHAREDCLIPBOARDPROVIDERREADPARMS pParms);
     623    int OnWrite(PSHAREDCLIPBOARDPROVIDERWRITEPARMS pParms);
     624
    557625protected:
    558626
    559627    SharedClipboardProviderHostService(void);
     628
     629    /**
     630     * Structure for maintaining an internal event.
     631     */
     632    struct Event
     633    {
     634        Event(uint32_t uMsg);
     635        virtual ~Event();
     636
     637        uint32_t DataSize(void);
     638        void *DataRaw(void);
     639        int SetData(const void *pvData, uint32_t cbData);
     640        int Wait(RTMSINTERVAL uTimeoutMs);
     641
     642        /** The event's associated message ID (guest function number). */
     643        uint32_t    mMsg;
     644        /** The event's own event semaphore. */
     645        RTSEMEVENT  mEvent;
     646        void       *mpvData;
     647        uint32_t    mcbData;
     648    };
     649
     650    /** Map of events; the key is the guest function number (VBOX_SHARED_CLIPBOARD_GUEST_FN_XXX). */
     651    typedef std::map<uint32_t, Event *> EventMap;
     652
     653    int eventRegister(uint32_t uMsg);
     654    int eventUnregister(uint32_t uMsg);
     655    int eventSignal(uint32_t uMsg);
     656    SharedClipboardProviderHostService::Event *eventGet(uint32_t uMsg);
     657
     658protected:
     659
     660    RTMSINTERVAL                    m_uTimeoutMs;
     661    SHAREDCLIPBOARDURITRANSFERCACHE m_Cache;
     662    EventMap                        m_mapEvents;
     663
    560664};
     665#endif /* VBOX_WITH_SHARED_CLIPBOARD_HOST */
    561666
    562667struct _SHAREDCLIPBOARDURITRANSFER;
     
    659764    /** The transfer's direction. */
    660765    SHAREDCLIPBOARDURITRANSFERDIR       enmDir;
    661     /** The transfer's meta data cache. */
    662     VBOXCLIPBOARDDATAHDR                Header;
    663     /** The transfer's meta data cache. */
    664     SHAREDCLIPBOARDMETADATA             Meta;
     766    /** The transfer's cache. */
     767    SHAREDCLIPBOARDURITRANSFERCACHE     Cache;
    665768    /** The transfer's own (local) area, if any (can be NULL if not needed).
    666769     *  The area itself has a clipboard area ID assigned.
  • trunk/include/VBox/HostServices/VBoxClipboardSvc.h

    r79107 r79120  
    6565 */
    6666/** Calls the host and waits (blocking) for an host event VBOX_SHARED_CLIPBOARD_HOST_MSG_*. */
    67 #define VBOX_SHARED_CLIPBOARD_FN_GET_HOST_MSG      1
     67#define VBOX_SHARED_CLIPBOARD_GUEST_FN_GET_HOST_MSG      1
    6868/** Sends a list of available formats to the host. */
    69 #define VBOX_SHARED_CLIPBOARD_FN_REPORT_FORMATS    2
     69#define VBOX_SHARED_CLIPBOARD_GUEST_FN_REPORT_FORMATS    2
    7070/** Reads data in specified format from the host. */
    71 #define VBOX_SHARED_CLIPBOARD_FN_READ_DATA         3
     71#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_DATA         3
    7272/** Writes data in requested format to the host. */
    73 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA        4
     73#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA        4
    7474/** Reads the data header at the beginning of a (new) data transfer from the host.
    7575 *  New since URI handling was implemented. */
    76 #define VBOX_SHARED_CLIPBOARD_FN_READ_DATA_HDR     5
     76#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_DATA_HDR     5
    7777/** Writes data in requested format to the host. */
    78 #define VBOX_SHARED_CLIPBOARD_FN_READ_DATA_CHUNK   6
     78#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_DATA_CHUNK   6
    7979/** Writes the data header at the beginning of a (new) data transfer to the host.
    8080 *  New since URI handling was implemented. */
    81 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA_HDR    7
     81#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA_HDR    7
    8282/** Writes data in requested format to the host. */
    83 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA_CHUNK  8
     83#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA_CHUNK  8
    8484/** Reads a new directory entry from the host.
    8585 *  New since URI handling was implemented. */
    86 #define VBOX_SHARED_CLIPBOARD_FN_READ_DIR          9
     86#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_DIR          9
    8787/** Writes a new directory entry to the host.
    8888 *  New since URI handling was implemented. */
    89 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_DIR         10
     89#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DIR         10
    9090/** Reads a new file header entry from the host.
    9191 *  New since URI handling was implemented. */
    92 #define VBOX_SHARED_CLIPBOARD_FN_READ_FILE_HDR     11
     92#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_FILE_HDR     11
    9393/** Writes a new file header entry to the host.
    9494     *  New since URI handling was implemented. */
    95 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_FILE_HDR    12
     95#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_FILE_HDR    12
    9696/** Reads a new file data chunk entry from the host.
    9797 *  New since URI handling was implemented. */
    98 #define VBOX_SHARED_CLIPBOARD_FN_READ_FILE_DATA    13
     98#define VBOX_SHARED_CLIPBOARD_GUEST_FN_READ_FILE_DATA    13
    9999/** Writes a new file data chunk entry to the host.
    100100 *  New since URI handling was implemented. */
    101 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_FILE_DATA   14
     101#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_FILE_DATA   14
    102102/** Reports cancellation of the current operation to the host.
    103103 *  New since URI handling was implemented. */
    104 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_CANCEL      15
     104#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_CANCEL      15
    105105/** Reports an error to the host.
    106106 *  New since URI handling was implemented. */
    107 #define VBOX_SHARED_CLIPBOARD_FN_WRITE_ERROR       16
     107#define VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_ERROR       16
    108108
    109109/** The maximum default chunk size for a single data transfer. */
     
    347347enum eVBoxClipboardCallbackMagics
    348348{
    349     CB_MAGIC_CLIPBOARD_WRITE_DATA_HDR   = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA_HDR, 0),
    350     CB_MAGIC_CLIPBOARD_WRITE_DATA_CHUNK = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_DATA_CHUNK, 0),
    351     CB_MAGIC_CLIPBOARD_WRITE_DIR        = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_DIR, 0),
    352     CB_MAGIC_CLIPBOARD_WRITE_FILE_HDR   = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_FILE_HDR, 0),
    353     CB_MAGIC_CLIPBOARD_WRITE_FILE_DATA  = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_FILE_DATA, 0),
    354     CB_MAGIC_CLIPBOARD_WRITE_ERROR      = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_FN_WRITE_ERROR, 0)
     349    CB_MAGIC_CLIPBOARD_WRITE_DATA_HDR   = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA_HDR, 0),
     350    CB_MAGIC_CLIPBOARD_WRITE_DATA_CHUNK = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA_CHUNK, 0),
     351    CB_MAGIC_CLIPBOARD_WRITE_DIR        = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DIR, 0),
     352    CB_MAGIC_CLIPBOARD_WRITE_FILE_HDR   = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_FILE_HDR, 0),
     353    CB_MAGIC_CLIPBOARD_WRITE_FILE_DATA  = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_FILE_DATA, 0),
     354    CB_MAGIC_CLIPBOARD_WRITE_ERROR      = VBOX_CLIPBOARD_CB_MAGIC_MAKE(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_ERROR, 0)
    355355};
    356356
     
    445445void VBoxSvcClipboardUnlock(void);
    446446
     447#ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     448int VBoxSvcClipboardURIReadDataHdr(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDATAHDR pDataHdr);
     449int VBoxSvcClipboardURIReadDataChunk(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDATACHUNK pDataChunk);
     450int VBoxSvcClipboardURIReadDir(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDIRDATA pDirData);
     451int VBoxSvcClipboardURIReadFileHdr(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDFILEHDR pFileHdr);
     452int VBoxSvcClipboardURIReadFileData(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDFILEDATA pFileData);
     453#endif
     454
    447455#endif /* !VBOX_INCLUDED_HostServices_VBoxClipboardSvc_h */
    448456
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