VirtualBox

Changeset 80444 in vbox for trunk/include/VBox/GuestHost


Ignore:
Timestamp:
Aug 27, 2019 5:47:44 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
132934
Message:

Shared Clipboard/URI: Added protocol versioning support plus enhanced versions of existing commands (to also provide context IDs, among other stuff). So far only the host service(s) and the Windows guest is using the new(er) protocol.

Location:
trunk/include/VBox/GuestHost
Files:
3 edited

Legend:

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

    r80359 r80444  
    434434    /** Total size (in bytes) returned. */
    435435    uint64_t cbTotalSize;
    436     /** Compression being method used. Not implemented yet. */
    437     uint32_t enmCompression;
    438     /** Checksum type being used. Not implemented yet. */
    439     uint32_t enmChecksumType;
    440436} VBOXCLIPBOARDLISTHDR, *PVBOXCLIPBOARDLISTHDR;
    441437
     
    700696
    701697/**
    702  * Structure for an (optional) URI transfer event payload.
    703  */
    704 typedef struct _SHAREDCLIPBOARDURITRANSFERPAYLOAD
    705 {
    706     /** Payload ID; currently unused. */
    707     uint32_t uID;
    708     /** Pointer to actual payload data. */
    709     void    *pvData;
    710     /** Size (in bytes) of actual payload data. */
    711     uint32_t cbData;
    712 } SHAREDCLIPBOARDURITRANSFERPAYLOAD, *PSHAREDCLIPBOARDURITRANSFERPAYLOAD;
    713 
    714 /**
    715  * Structure for maintaining an URI transfer event.
    716  */
    717 typedef struct _SHAREDCLIPBOARDURITRANSFEREVENT
    718 {
    719     /** Event semaphore for signalling the event. */
    720     RTSEMEVENT                         hEventSem;
    721     /** Payload to this event. Optional and can be NULL. */
    722     PSHAREDCLIPBOARDURITRANSFERPAYLOAD pPayload;
    723 } SHAREDCLIPBOARDURITRANSFEREVENT, *PSHAREDCLIPBOARDURITRANSFEREVENT;
    724 
    725 /** Map of URI transfer events.
    726  *  The key specifies the event type of SHAREDCLIPBOARDURITRANSFEREVENTTYPE. */
    727 typedef std::map<uint16_t, SHAREDCLIPBOARDURITRANSFEREVENT *> SharedClipboardURITransferEventMap;
    728 
    729 /**
    730698 * Enumeration for specifying a Shared Clipboard object type.
    731699 */
     
    750718typedef struct _SHAREDCLIPBOARDURILISTHANDLEINFO
    751719{
     720    /** The list node. */
     721    RTLISTNODE                    Node;
     722    /** The list's handle. */
     723    SHAREDCLIPBOARDLISTHANDLE     hList;
    752724    /** Type of list handle. */
    753     SHAREDCLIPBOARDURIOBJTYPE enmType;
     725    SHAREDCLIPBOARDURIOBJTYPE     enmType;
    754726    /** Absolute local path of the list object. */
    755     char                     *pszPathLocalAbs;
     727    char                         *pszPathLocalAbs;
    756728    union
    757729    {
     
    768740} SHAREDCLIPBOARDURILISTHANDLEINFO, *PSHAREDCLIPBOARDURILISTHANDLEINFO;
    769741
    770 /** Map of URI list handles.
    771  *  The key specifies the list handle. */
    772 typedef std::map<SHAREDCLIPBOARDLISTHANDLE, SHAREDCLIPBOARDURILISTHANDLEINFO *> SharedClipboardURIListMap;
    773 
    774742/**
    775743 * Structure for keeping URI object handle information.
     
    778746typedef struct _SHAREDCLIPBOARDURIOBJHANDLEINFO
    779747{
     748    /** The list node. */
     749    RTLISTNODE                Node;
     750    /** The object's handle. */
     751    SHAREDCLIPBOARDOBJHANDLE  hObj;
    780752    /** Type of object handle. */
    781753    SHAREDCLIPBOARDURIOBJTYPE enmType;
     
    796768} SHAREDCLIPBOARDURIOBJHANDLEINFO, *PSHAREDCLIPBOARDURIOBJHANDLEINFO;
    797769
    798 /** Map of URI object handles.
    799  *  The key specifies the object handle. */
    800 typedef std::map<SHAREDCLIPBOARDOBJHANDLE, SHAREDCLIPBOARDURIOBJHANDLEINFO *> SharedClipboardURIObjMap;
    801 
    802770/**
    803771 * Structure for keeping a single root list entry.
    804  *
    805  * Warning: Contains non-POD types.
    806772 */
    807773typedef struct _SHAREDCLIPBOARDURILISTROOT
    808774{
     775    /** The list node. */
     776    RTLISTNODE          Node;
    809777    /** Absolute path of entry. */
    810     RTCString strPathAbs;
     778    char               *pszPathAbs;
    811779} SHAREDCLIPBOARDURILISTROOT, *PSHAREDCLIPBOARDURILISTROOT;
    812 
    813 /** List of URI list root entries. */
    814 typedef RTCList<SHAREDCLIPBOARDURILISTROOT> SharedClipboardURIListRootEntries;
    815780
    816781/**
     
    866831SHAREDCLIPBOARDPROVIDERFUNCDECLVOID(TRANSFEROPEN)
    867832SHAREDCLIPBOARDPROVIDERFUNCDECLVOID(TRANSFERCLOSE)
    868 SHAREDCLIPBOARDPROVIDERFUNCDECL(GETROOTS, PVBOXCLIPBOARDROOTLIST *ppRootList);
     833SHAREDCLIPBOARDPROVIDERFUNCDECL(GETROOTS, PVBOXCLIPBOARDROOTLIST *ppRootList)
    869834SHAREDCLIPBOARDPROVIDERFUNCDECL(LISTOPEN, PVBOXCLIPBOARDLISTOPENPARMS pOpenParms, PSHAREDCLIPBOARDLISTHANDLE phList)
    870 SHAREDCLIPBOARDPROVIDERFUNCDECL(LISTCLOSE, SHAREDCLIPBOARDLISTHANDLE hList);
     835SHAREDCLIPBOARDPROVIDERFUNCDECL(LISTCLOSE, SHAREDCLIPBOARDLISTHANDLE hList)
    871836SHAREDCLIPBOARDPROVIDERFUNCDECL(LISTHDRREAD, SHAREDCLIPBOARDLISTHANDLE hList, PVBOXCLIPBOARDLISTHDR pListHdr)
    872837SHAREDCLIPBOARDPROVIDERFUNCDECL(LISTHDRWRITE, SHAREDCLIPBOARDLISTHANDLE hList, PVBOXCLIPBOARDLISTHDR pListHdr)
     
    883848typedef struct _SHAREDCLIPBOARDPROVIDERINTERFACE
    884849{
    885     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(TRANSFEROPEN, pfnTransferOpen);
    886     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(TRANSFERCLOSE, pfnTransferClose);
    887     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(GETROOTS, pfnGetRoots);
    888     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTOPEN, pfnListOpen);
    889     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTCLOSE, pfnListClose);
    890     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTHDRREAD, pfnListHdrRead);
    891     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTHDRWRITE, pfnListHdrWrite);
    892     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTENTRYREAD, pfnListEntryRead);
    893     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTENTRYWRITE, pfnListEntryWrite);
    894     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJOPEN, pfnObjOpen);
    895     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJCLOSE, pfnObjClose);
    896     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJREAD, pfnObjRead);
    897     SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJWRITE, pfnObjWrite);
     850    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(TRANSFEROPEN, pfnTransferOpen)
     851    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(TRANSFERCLOSE, pfnTransferClose)
     852    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(GETROOTS, pfnGetRoots)
     853    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTOPEN, pfnListOpen)
     854    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTCLOSE, pfnListClose)
     855    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTHDRREAD, pfnListHdrRead)
     856    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTHDRWRITE, pfnListHdrWrite)
     857    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTENTRYREAD, pfnListEntryRead)
     858    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(LISTENTRYWRITE, pfnListEntryWrite)
     859    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJOPEN, pfnObjOpen)
     860    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJCLOSE, pfnObjClose)
     861    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJREAD, pfnObjRead)
     862    SHAREDCLIPBOARDPROVIDERFUNCMEMBER(OBJWRITE, pfnObjWrite)
    898863} SHAREDCLIPBOARDPROVIDERINTERFACE, *PSHAREDCLIPBOARDPROVIDERINTERFACE;
    899864
     
    953918    void                                  *pvUser;
    954919    /** Function pointer, called when the transfer is going to be prepared. */
    955     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERPREPARE, pfnTransferPrepare);
     920    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERPREPARE, pfnTransferPrepare)
    956921    /** Function pointer, called when the transfer has been started. */
    957     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERSTARTED, pfnTransferStarted);
     922    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERSTARTED, pfnTransferStarted)
    958923    /** Function pointer, called when reading / writing the list header is complete. */
    959     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(LISTHEADERCOMPLETE, pfnListHeaderComplete);
     924    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(LISTHEADERCOMPLETE, pfnListHeaderComplete)
    960925    /** Function pointer, called when reading / writing a list entry is complete. */
    961     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(LISTENTRYCOMPLETE, pfnListEntryComplete);
     926    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(LISTENTRYCOMPLETE, pfnListEntryComplete)
    962927    /** Function pointer, called when the transfer is complete. */
    963     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERCOMPLETE, pfnTransferComplete);
     928    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERCOMPLETE, pfnTransferComplete)
    964929    /** Function pointer, called when the transfer has been canceled. */
    965     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERCANCELED, pfnTransferCanceled);
     930    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERCANCELED, pfnTransferCanceled)
    966931    /** Function pointer, called when transfer resulted in an unrecoverable error. */
    967     SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERERROR, pfnTransferError);
     932    SHAREDCLIPBOARDTRANSFERCALLBACKMEMBER(TRANSFERERROR, pfnTransferError)
    968933} SHAREDCLIPBOARDURITRANSFERCALLBACKS, *PSHAREDCLIPBOARDURITRANSFERCALLBACKS;
    969934
     
    1003968    /** Maximum data chunk size (in bytes) to transfer. Default is 64K. */
    1004969    uint32_t                            cbMaxChunkSize;
    1005     /** Events related to this transfer. */
    1006     SharedClipboardURITransferEventMap *pMapEvents;
     970    /** The transfer's own event source. */
     971    SHAREDCLIPBOARDEVENTSOURCE          Events;
    1007972    /** Next upcoming list handle. */
    1008973    SHAREDCLIPBOARDLISTHANDLE           uListHandleNext;
    1009     /** Map of all lists related to this transfer. */
    1010     SharedClipboardURIListMap          *pMapLists;
     974    /** List of all list handles elated to this transfer. */
     975    RTLISTANCHOR                        lstList;
     976    /** Number of root entries in list. */
     977    uint64_t                            cRoots;
    1011978    /** List of root entries of this transfer. */
    1012     SharedClipboardURIListRootEntries   lstRootEntries;
     979    RTLISTANCHOR                        lstRoots;
    1013980    /** Next upcoming object handle. */
    1014981    SHAREDCLIPBOARDOBJHANDLE            uObjHandleNext;
    1015     /** Next upcoming event ID.
    1016      *  0 is reserved for invalid event IDs. */
    1017     uint16_t                            uEventIDNext;
    1018     /** Map of all objects related to this transfer. */
    1019     SharedClipboardURIObjMap           *pMapObj;
     982    /** Map of all objects handles related to this transfer. */
     983    RTLISTANCHOR                        lstObj;
    1020984    /** The transfer's own (local) area, if any (can be NULL if not needed).
    1021985     *  The area itself has a clipboard area ID assigned.
     
    10931057
    10941058int SharedClipboardURITransferPrepare(PSHAREDCLIPBOARDURITRANSFER pTransfer);
    1095 int SharedClipboardURITransferSetData(PSHAREDCLIPBOARDURITRANSFER pTransfer, SharedClipboardURIListRootEntries *pEntries);
    10961059int SharedClipboardURITransferSetInterface(PSHAREDCLIPBOARDURITRANSFER pTransfer,
    10971060                                           PSHAREDCLIPBOARDPROVIDERCREATIONCTX pCreationCtx);
     
    11011064
    11021065uint32_t SharedClipboardURILTransferRootsCount(PSHAREDCLIPBOARDURITRANSFER pTransfer);
    1103 int SharedClipboardURILTransferRootsEntry(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint32_t uIndex, PVBOXCLIPBOARDLISTENTRY pEntry);
     1066int SharedClipboardURILTransferRootsEntry(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint64_t uIndex, PVBOXCLIPBOARDROOTLISTENTRY pEntry);
    11041067int SharedClipboardURILTransferRootsAsList(PSHAREDCLIPBOARDURITRANSFER pTransfer, PVBOXCLIPBOARDROOTLIST *ppRootList);
    11051068
     
    11101073void SharedClipboardURITransferSetCallbacks(PSHAREDCLIPBOARDURITRANSFER pTransfer,
    11111074                                            PSHAREDCLIPBOARDURITRANSFERCALLBACKS pCallbacks);
    1112 
    1113 int SharedClipboardURITransferPayloadAlloc(uint32_t uID, const void *pvData, uint32_t cbData,
    1114                                            PSHAREDCLIPBOARDURITRANSFERPAYLOAD *ppPayload);
    1115 void SharedClipboardURITransferPayloadFree(PSHAREDCLIPBOARDURITRANSFERPAYLOAD pPayload);
    1116 
    1117 uint16_t SharedClipboardURITransferEventIDGenerate(PSHAREDCLIPBOARDURITRANSFER pTransfer);
    1118 int SharedClipboardURITransferEventRegister(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint16_t uID);
    1119 int SharedClipboardURITransferEventUnregister(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint16_t uID);
    1120 int SharedClipboardURITransferEventWait(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint16_t uID, RTMSINTERVAL uTimeoutMs,
    1121                                         PSHAREDCLIPBOARDURITRANSFERPAYLOAD *ppPayload);
    1122 int SharedClipboardURITransferEventSignal(PSHAREDCLIPBOARDURITRANSFER pTransfer, uint16_t uID, PSHAREDCLIPBOARDURITRANSFERPAYLOAD pPayload);
    11231075
    11241076int SharedClipboardURITransferRead(PSHAREDCLIPBOARDURITRANSFER pTransfer);
  • trunk/include/VBox/GuestHost/SharedClipboard-win.h

    r80374 r80444  
    130130
    131131VBOXCLIPBOARDFORMAT VBoxClipboardWinClipboardFormatToVBox(UINT uFormat);
    132 int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, PVBOXCLIPBOARDFORMAT pfFormats);
     132int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, PSHAREDCLIPBOARDFORMATDATA pFormats);
    133133
    134134#ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
  • trunk/include/VBox/GuestHost/SharedClipboard.h

    r79630 r80444  
    3131
    3232#include <iprt/cdefs.h>
     33#include <iprt/list.h>
    3334#include <iprt/types.h>
    3435
     
    6061
    6162/**
     63 * Structure for keeping a generic Shared Clipboard data block.
     64 */
     65typedef struct _SHAREDCLIPBOARDDATABLOCK
     66{
     67    /** Clipboard format this data block represents. */
     68    VBOXCLIPBOARDFORMAT  uFormat;
     69    /** Pointer to actual data block. */
     70    void                *pvData;
     71    /** Size (in bytes) of actual data block. */
     72    uint32_t             cbData;
     73} SHAREDCLIPBOARDDATABLOCK, *PSHAREDCLIPBOARDDATABLOCK;
     74
     75/**
     76 * Structure for keeping a Shared Clipboard data read request.
     77 */
     78typedef struct _SHAREDCLIPBOARDDATAREQ
     79{
     80    /** In which format the data needs to be sent. */
     81    VBOXCLIPBOARDFORMAT uFmt;
     82    /** Read flags; currently unused. */
     83    uint32_t            fFlags;
     84    /** Maximum data (in byte) can be sent. */
     85    uint32_t            cbSize;
     86} SHAREDCLIPBOARDDATAREQ, *PSHAREDCLIPBOARDDATAREQ;
     87
     88/**
     89 * Structure for keeping Shared Clipboard formats specifications.
     90 */
     91typedef struct _SHAREDCLIPBOARDFORMATDATA
     92{
     93    /** Available format(s) as bit map. */
     94    VBOXCLIPBOARDFORMATS uFormats;
     95    /** Formats flags. Currently unused. */
     96    uint32_t             fFlags;
     97} SHAREDCLIPBOARDFORMATDATA, *PSHAREDCLIPBOARDFORMATDATA;
     98
     99/**
     100 * Structure for an (optional) Shared Clipboard event payload.
     101 */
     102typedef struct _SHAREDCLIPBOARDEVENTPAYLOAD
     103{
     104    /** Payload ID; currently unused. */
     105    uint32_t uID;
     106    /** Pointer to actual payload data. */
     107    void    *pvData;
     108    /** Size (in bytes) of actual payload data. */
     109    uint32_t cbData;
     110} SHAREDCLIPBOARDEVENTPAYLOAD, *PSHAREDCLIPBOARDEVENTPAYLOAD;
     111
     112/**
     113 * Structure for maintaining a Shared Clipboard event.
     114 */
     115typedef struct _SHAREDCLIPBOARDEVENT
     116{
     117    /** List node. */
     118    RTLISTNODE                   Node;
     119    /** The event's ID, for self-reference. */
     120    uint16_t                     uID;
     121    /** Event semaphore for signalling the event. */
     122    RTSEMEVENT                   hEventSem;
     123    /** Payload to this event. Optional and can be NULL. */
     124    PSHAREDCLIPBOARDEVENTPAYLOAD pPayload;
     125} SHAREDCLIPBOARDEVENT, *PSHAREDCLIPBOARDEVENT;
     126
     127/**
     128 * Structure for maintaining a Shared Clipboard event source.
     129 *
     130 * Each event source maintains an own counter for events, so that
     131 * it can be used in different contexts.
     132 */
     133typedef struct _SHAREDCLIPBOARDEVENTSOURCE
     134{
     135    /** The event source' ID. */
     136    uint16_t                 uID;
     137    /** Next upcoming event ID.
     138     *  0 is reserved for invalid event IDs. */
     139    uint16_t                 uEventIDNext;
     140    /** List of events (PSHAREDCLIPBOARDEVENT). */
     141    RTLISTANCHOR             lstEvents;
     142} SHAREDCLIPBOARDEVENTSOURCE, *PSHAREDCLIPBOARDEVENTSOURCE;
     143
     144int SharedClipboardPayloadAlloc(uint32_t uID, const void *pvData, uint32_t cbData,
     145                                PSHAREDCLIPBOARDEVENTPAYLOAD *ppPayload);
     146void SharedClipboardPayloadFree(PSHAREDCLIPBOARDEVENTPAYLOAD pPayload);
     147
     148int SharedClipboardEventSourceCreate(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID);
     149void SharedClipboardEventSourceDestroy(PSHAREDCLIPBOARDEVENTSOURCE pSource);
     150
     151uint16_t SharedClipboardEventIDGenerate(PSHAREDCLIPBOARDEVENTSOURCE pSource);
     152int SharedClipboardEventRegister(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID);
     153int SharedClipboardEventUnregister(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID);
     154int SharedClipboardEventWait(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID, RTMSINTERVAL uTimeoutMs,
     155                             PSHAREDCLIPBOARDEVENTPAYLOAD* ppPayload);
     156int SharedClipboardEventSignal(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID, PSHAREDCLIPBOARDEVENTPAYLOAD pPayload);
     157void SharedClipboardEventPayloadDetach(PSHAREDCLIPBOARDEVENTSOURCE pSource, uint16_t uID);
     158
     159/**
    62160 * Enumeration to specify the Shared Clipboard URI source type.
    63161 */
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