VirtualBox

Changeset 79027 in vbox for trunk/include


Ignore:
Timestamp:
Jun 6, 2019 2:47:16 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131179
Message:

Shared Clipboard/URI: Update (more glue code, transfer callbacks).

Location:
trunk/include/VBox
Files:
3 edited

Legend:

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

    r78974 r79027  
    386386{
    387387    /** Actual meta data block. */
    388     void  *pvMeta;
     388    void    *pvMeta;
    389389    /** Total size (in bytes) of the allocated meta data block .*/
    390     size_t cbMeta;
     390    uint32_t cbMeta;
    391391    /** How many bytes are being used in the meta data block. */
    392     size_t cbUsed;
     392    uint32_t cbUsed;
    393393} SHAREDCLIPBOARDMETADATA, *PSHAREDCLIPBOARDMETADATA;
    394394
     
    396396void SharedClipboardMetaDataDestroy(PSHAREDCLIPBOARDMETADATA pMeta);
    397397int SharedClipboardMetaDataAdd(PSHAREDCLIPBOARDMETADATA pMeta, const void *pvDataAdd, uint32_t cbDataAdd);
    398 int SharedClipboardMetaDataResize(PSHAREDCLIPBOARDMETADATA pMeta, size_t cbNewSize);
     398int SharedClipboardMetaDataResize(PSHAREDCLIPBOARDMETADATA pMeta, uint32_t cbNewSize);
     399size_t SharedClipboardMetaDataGetFree(PSHAREDCLIPBOARDMETADATA pMeta);
    399400size_t SharedClipboardMetaDataGetUsed(PSHAREDCLIPBOARDMETADATA pMeta);
    400401size_t SharedClipboardMetaDataGetSize(PSHAREDCLIPBOARDMETADATA pMeta);
     
    453454public: /* Interface to be implemented. */
    454455
    455     virtual int ReadMetaData(uint32_t fFlags = 0);
    456     virtual int WriteMetaData(const void *pvBuf, size_t cbBuf, size_t *pcbWritten, uint32_t fFlags = 0);
     456    virtual int ReadDataHdr(PVBOXCLIPBOARDDATAHDR pDataHdr);
     457    virtual int WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr);
     458
     459    virtual int ReadMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
     460    virtual int WriteMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
     461                              uint32_t fFlags = 0);
    457462
    458463    virtual int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
    459     virtual int ReadDirectoryObj(SharedClipboardURIObject &Obj);
    460 
    461464    virtual int WriteDirectory(const PVBOXCLIPBOARDDIRDATA pDirData);
    462     virtual int WriteDirectoryObj(const SharedClipboardURIObject &Obj);
    463465
    464466    virtual int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
    465     virtual int ReadFileHdrObj(SharedClipboardURIObject &Obj);
    466 
    467467    virtual int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
    468     virtual int WriteFileHdrObj(const SharedClipboardURIObject &Obj);
    469468
    470469    virtual int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbRead);
    471     virtual int ReadFileDataObj(SharedClipboardURIObject &Obj, uint32_t *pcbRead);
    472 
    473470    virtual int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbWritten);
    474     virtual int WriteFileDataObj(const SharedClipboardURIObject &Obj, uint32_t *pcbWritten);
    475471
    476472    virtual void Reset(void);
    477 
    478 public:
    479 
    480           SharedClipboardURIList   &GetURIList(void) { return m_URIList; }
    481     const SharedClipboardURIObject *GetURIObjectCurrent(void) { return m_URIList.First(); }
    482473
    483474protected:
     
    489480    /** Number of references to this instance. */
    490481    volatile uint32_t      m_cRefs;
    491     /** Current URI list. */
    492     SharedClipboardURIList m_URIList;
    493482};
    494483
     
    506495public:
    507496
    508     int ReadMetaData(uint32_t fFlags = 0);
    509     int WriteMetaData(const void *pvBuf, size_t cbBuf, size_t *pcbWritten, uint32_t fFlags = 0);
     497    int ReadDataHdr(PVBOXCLIPBOARDDATAHDR pDataHdr);
     498    int WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr);
     499
     500    int ReadMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead, uint32_t fFlags = 0);
     501    int WriteMetaData(const PVBOXCLIPBOARDDATAHDR pDataHdr, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten,
     502                      uint32_t fFlags = 0);
    510503
    511504    int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
     
    514507    int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
    515508    int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
     509
    516510    int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbRead);
    517511    int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbWritten);
     
    543537};
    544538
    545 typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERSTARTED(void *pvUser);
     539struct _SHAREDCLIPBOARDURITRANSFER;
     540typedef _SHAREDCLIPBOARDURITRANSFER *PSHAREDCLIPBOARDURITRANSFER;
     541
     542/**
     543 * Structure for storing URI transfer callback data.
     544 */
     545typedef struct _SHAREDCLIPBOARDURITRANSFERCALLBACKDATA
     546{
     547    /** Pointer to related URI transfer. */
     548    PSHAREDCLIPBOARDURITRANSFER pTransfer;
     549    /** Saved user pointer. */
     550    void                       *pvUser;
     551} SHAREDCLIPBOARDURITRANSFERCALLBACKDATA, *PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA;
     552
     553typedef DECLCALLBACK(void) FNSHAREDCLIPBOARDURITRANSFERSTARTED(PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA pData);
    546554/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERSTARTED function. */
    547555typedef FNSHAREDCLIPBOARDURITRANSFERSTARTED *PFNSHAREDCLIPBOARDURITRANSFERSTARTED;
    548556
    549 typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERCANCELED(void *pvUser);
     557typedef DECLCALLBACK(void) FNSHAREDCLIPBOARDURITRANSFERCANCELED(PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA pData);
    550558/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERCANCELED function. */
    551559typedef FNSHAREDCLIPBOARDURITRANSFERCANCELED *PFNSHAREDCLIPBOARDURITRANSFERCANCELED;
    552560
    553 typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERCOMPLETE(void *pvUser, int rc);
     561typedef DECLCALLBACK(void) FNSHAREDCLIPBOARDURITRANSFERCOMPLETE(PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA pData, int rc);
    554562/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERCOMPLETE function. */
    555563typedef FNSHAREDCLIPBOARDURITRANSFERCOMPLETE *PFNSHAREDCLIPBOARDURITRANSFERCOMPLETE;
    556564
    557 typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERERROR(void *pvUser, int rc);
     565typedef DECLCALLBACK(void) FNSHAREDCLIPBOARDURITRANSFERERROR(PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA pData, int rc);
    558566/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERERROR function. */
    559567typedef FNSHAREDCLIPBOARDURITRANSFERERROR *PFNSHAREDCLIPBOARDURITRANSFERERROR;
     
    565573typedef struct _SHAREDCLIPBOARDURITRANSFERCALLBACKS
    566574{
     575    /** Saved user pointer. */
     576    void                                 *pvUser;
    567577    /** Function pointer, called when the transfer has been started. */
    568578    PFNSHAREDCLIPBOARDURITRANSFERSTARTED  pfnTransferStarted;
     
    590600
    591601/**
     602 * Enumeration specifying an URI transfer direction.
     603 */
     604typedef enum _SHAREDCLIPBOARDURITRANSFERDIR
     605{
     606    /** Unknown transfer directory. */
     607    SHAREDCLIPBOARDURITRANSFERDIR_UNKNOWN = 0,
     608    /** Read transfer (from source). */
     609    SHAREDCLIPBOARDURITRANSFERDIR_READ,
     610    /** Write transfer (to target). */
     611    SHAREDCLIPBOARDURITRANSFERDIR_WRITE,
     612    /** The usual 32-bit hack. */
     613    SHAREDCLIPBOARDURITRANSFERDIR__32BIT_HACK = 0x7fffffff
     614} SHAREDCLIPBOARDURITRANSFERDIR;
     615
     616/**
    592617 * Structure for maintaining a single URI transfer.
     618 *
     619 ** @todo Not yet thread safe.
    593620 */
    594621typedef struct _SHAREDCLIPBOARDURITRANSFER
     
    596623    /** The node member for using this struct in a RTList. */
    597624    RTLISTNODE                          Node;
     625    /** Critical section for serializing access. */
     626    RTCRITSECT                          CritSect;
     627    /** The transfer's direction. */
     628    SHAREDCLIPBOARDURITRANSFERDIR       enmDir;
     629    /** The transfer's meta data cache. */
     630    VBOXCLIPBOARDDATAHDR                Header;
     631    /** The transfer's meta data cache. */
     632    SHAREDCLIPBOARDMETADATA             Meta;
     633    /** The URI list for this transfer. */
     634    SharedClipboardURIList              URIList;
    598635    /** The Shared Clipboard provider in charge for this transfer. */
    599636    SharedClipboardProvider            *pProvider;
     
    604641    /** Contains thread-related attributes. */
    605642    SHAREDCLIPBOARDURITRANSFERTHREAD    Thread;
     643    /** (Optional) callbacks related to this transfer. */
     644    SHAREDCLIPBOARDURITRANSFERCALLBACKS Callbacks;
    606645} SHAREDCLIPBOARDURITRANSFER, *PSHAREDCLIPBOARDURITRANSFER;
    607646
     
    621660} SHAREDCLIPBOARDURICTX, *PSHAREDCLIPBOARDURICTX;
    622661
    623 int SharedClipboardURITransferCreate(PSHAREDCLIPBOARDPROVIDERCREATIONCTX pCtx,
     662int SharedClipboardURITransferCreate(SHAREDCLIPBOARDURITRANSFERDIR enmDir, PSHAREDCLIPBOARDPROVIDERCREATIONCTX pCtx,
    624663                                     PSHAREDCLIPBOARDURITRANSFER *ppTransfer);
    625 void SharedClipboardURITransferDestroy(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     664int SharedClipboardURITransferDestroy(PSHAREDCLIPBOARDURITRANSFER pTransfer);
    626665void SharedClipboardURITransferReset(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     666const SharedClipboardURIObject *SharedClipboardURITransferGetCurrentObject(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     667SharedClipboardProvider *SharedClipboardURITransferGetProvider(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     668const SharedClipboardURIList *SharedClipboardURITransferGetList(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     669const SharedClipboardURIObject *SharedClipboardURITransferGetObject(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint64_t uIdx);
     670void SharedClipboardURITransferSetCallbacks(PSHAREDCLIPBOARDURITRANSFER pTransfer, PSHAREDCLIPBOARDURITRANSFERCALLBACKS pCallbacks);
     671int SharedClipboardURITransferThreadCreate(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     672int SharedClipboardURITransferThreadDestroy(PSHAREDCLIPBOARDURITRANSFER pTransfer, RTMSINTERVAL uTimeoutMs);
     673
     674int SharedClipboardURITransferMetaDataAdd(PSHAREDCLIPBOARDURITRANSFER pTransfer, const void *pvMeta, uint32_t cbMeta);
     675int SharedClipboardURITransferMetaGet(PSHAREDCLIPBOARDURITRANSFER pTransfer, const void *pvMeta, uint32_t cbMeta);
     676int SharedClipboardURITransferMetaDataRead(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint32_t *pcbRead);
     677int SharedClipboardURITransferMetaDataWrite(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint32_t *pcbWritten);
     678
    627679int SharedClipboardURITransferWrite(PSHAREDCLIPBOARDURITRANSFER pTransfer);
    628 int SharedClipboardURITransferWriteThread(RTTHREAD hThread, void *pvUser);
    629 
    630 int SharedClipboardURICtxInit(PSHAREDCLIPBOARDURICTX pURI, PSHAREDCLIPBOARDURITRANSFER pTransfer);
     680int SharedClipboardURITransferWriteObjects(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     681
     682int SharedClipboardURICtxInit(PSHAREDCLIPBOARDURICTX pURI);
    631683void SharedClipboardURICtxDestroy(PSHAREDCLIPBOARDURICTX pURI);
    632684void SharedClipboardURICtxReset(PSHAREDCLIPBOARDURICTX pURI);
     
    634686uint32_t SharedClipboardURICtxGetActiveTransfers(PSHAREDCLIPBOARDURICTX pURI);
    635687int SharedClipboardURICtxTransferAdd(PSHAREDCLIPBOARDURICTX pURI, PSHAREDCLIPBOARDURITRANSFER pTransfer);
     688int SharedClipboardURICtxTransferRemove(PSHAREDCLIPBOARDURICTX pURI, PSHAREDCLIPBOARDURITRANSFER pTransfer);
    636689
    637690bool SharedClipboardMIMEHasFileURLs(const char *pcszFormat, size_t cchFormatMax);
  • trunk/include/VBox/GuestHost/SharedClipboard-win.h

    r78974 r79027  
    260260
    261261    VBoxClipboardWinStreamImpl(VBoxClipboardWinDataObject *pParent,
    262                                PSHAREDCLIPBOARDURITRANSFER pTransfer, SharedClipboardURIObject *pURIObj);
     262                               PSHAREDCLIPBOARDURITRANSFER pTransfer, uint64_t uObjIdx);
    263263    virtual ~VBoxClipboardWinStreamImpl(void);
    264264
     
    286286
    287287    static HRESULT Create(VBoxClipboardWinDataObject *pParent,
    288                           PSHAREDCLIPBOARDURITRANSFER pTransfer, SharedClipboardURIObject *pURIObj, IStream **ppStream);
     288                          PSHAREDCLIPBOARDURITRANSFER pTransfer, uint64_t uObjIdx, IStream **ppStream);
    289289
    290290private:
     
    295295    LONG                        m_lRefCount;
    296296    /** Pointer to the associated URI transfer object. */
    297     PSHAREDCLIPBOARDURITRANSFER m_pTransfer;
    298     /** Pointer to the associated URI object. */
    299     SharedClipboardURIObject   *m_pURIObj;
     297    PSHAREDCLIPBOARDURITRANSFER m_pURITransfer;
     298    /** Index of the object to handle within the associated URI transfer object. */
     299    uint64_t                    m_uObjIdx;
    300300};
    301301
  • trunk/include/VBox/VBoxGuestLib.h

    r78946 r79027  
    602602VBGLR3DECL(int)     VbglR3ClipboardDisconnect(HGCMCLIENTID idClient);
    603603VBGLR3DECL(int)     VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient, uint32_t *pMsg, uint32_t *pfFormats);
    604 #  ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    605 VBGLR3DECL(int)     VbglR3ClipboardReadMetaData(HGCMCLIENTID idClient, SharedClipboardURIList &URIList);
    606 VBGLR3DECL(int)     VbglR3ClipboardWriteMetaData(HGCMCLIENTID idClient, const SharedClipboardURIList &URIList);
    607 #  endif /* VBOX_WITH_SHARED_CLIPBOARD_URI_LIST */
    608604VBGLR3DECL(int)     VbglR3ClipboardReadData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb, uint32_t *pcb);
    609605VBGLR3DECL(int)     VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats);
    610606VBGLR3DECL(int)     VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb);
     607
    611608#  ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     609VBGLR3DECL(int)     VbglR3ClipboardReadDataHdr(HGCMCLIENTID idClient, PVBOXCLIPBOARDDATAHDR pDataHdr);
     610VBGLR3DECL(int)     VbglR3ClipboardWriteDataHdr(HGCMCLIENTID idClient, const PVBOXCLIPBOARDDATAHDR pDataHdr);
     611VBGLR3DECL(int)     VbglR3ClipboardReadMetaData(HGCMCLIENTID idClient, PVBOXCLIPBOARDDATAHDR pDataHdr,
     612                                                void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead);
     613VBGLR3DECL(int)     VbglR3ClipboardReadMetaDataEx(HGCMCLIENTID idClient, PVBOXCLIPBOARDDATAHDR pDataHdr,
     614                                                  void *pvMeta, uint32_t cbMeta, uint32_t *pcbRead);
     615VBGLR3DECL(int)     VbglR3ClipboardWriteMetaData(HGCMCLIENTID idClient, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten);
     616VBGLR3DECL(int)     VbglR3ClipboardWriteMetaDataEx(HGCMCLIENTID idClient, const void *pvMeta, uint32_t cbMeta, uint32_t *pcbWritten);
    612617VBGLR3DECL(int)     VbglR3ClipboardReadDir(HGCMCLIENTID idClient, char *pszDirname, uint32_t cbDirname, uint32_t *pcbDirnameRecv,
    613618                                           uint32_t *pfMode);
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