VirtualBox

Ignore:
Timestamp:
Sep 17, 2019 9:05:21 AM (5 years ago)
Author:
vboxsync
Message:

Shared Clipboard/URI: More code for transfer channel handling.

File:
1 edited

Legend:

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

    r80663 r80845  
    4343#include <VBox/GuestHost/SharedClipboard.h>
    4444
     45
     46/** @name Shared Clipboard transfer definitions.
     47 *  @{
     48 */
     49
     50/** No status set. */
     51#define SHCLURITRANSFERSTATUS_NONE           0
     52/** The transfer has been announced but is not running yet. */
     53#define SHCLURITRANSFERSTATUS_READY          1
     54/** The transfer is active and running. */
     55#define SHCLURITRANSFERSTATUS_STARTED        2
     56/** The transfer has been stopped. */
     57#define SHCLURITRANSFERSTATUS_STOPPED        3
     58/** The transfer has been canceled. */
     59#define SHCLURITRANSFERSTATUS_CANCELED       4
     60/** The transfer has been killed. */
     61#define SHCLURITRANSFERSTATUS_KILLED         5
     62/** The transfer ran into an unrecoverable error. */
     63#define SHCLURITRANSFERSTATUS_ERROR          6
     64
     65/** Defines a transfer status. */
     66typedef uint32_t SHCLURITRANSFERSTATUS;
     67
     68/** @} */
     69
    4570/** @name Shared Clipboard handles.
    4671 *  @{
     
    357382    union
    358383    {
     384        struct
     385        {
     386            SHCLURITRANSFERSTATUS uStatus;
     387        } TransferStatus;
    359388        struct
    360389        {
     
    657686    /** The usual 32-bit hack. */
    658687    SHCLURITRANSFERDIR_32BIT_HACK = 0x7fffffff
    659 } SHCLURITRANSFERDIR;
     688} SHCLURITRANSFERDIR, *PSHCLURITRANSFERDIR;
    660689
    661690struct _SHCLURITRANSFER;
     
    673702typedef struct _SHCLURITRANSFEROBJSTATE
    674703{
    675     uint64_t                    cbProcessed;
     704    /** How many bytes were processed (read / write) so far. */
     705    uint64_t cbProcessed;
    676706} SHCLURITRANSFEROBJSTATE, *PSHCLURITRANSFEROBJSTATE;
    677707
     
    679709{
    680710    SHCLOBJHANDLE           uHandle;
    681     char                              *pszPathAbs;
     711    char                   *pszPathAbs;
    682712    SHCLFSOBJINFO           objInfo;
    683713    SHCLSOURCE              enmSource;
     
    685715} SHCLURITRANSFEROBJ, *PSHCLURITRANSFEROBJ;
    686716
    687 /** No status set. */
    688 #define SHCLURITRANSFERSTATUS_NONE           0
    689 /** The transfer has been announced but is not running yet. */
    690 #define SHCLURITRANSFERSTATUS_READY          1
    691 /** The transfer is active and running. */
    692 #define SHCLURITRANSFERSTATUS_RUNNING        2
    693 /** The transfer has been completed. */
    694 #define SHCLURITRANSFERSTATUS_COMPLETED      3
    695 /** The transfer has been canceled. */
    696 #define SHCLURITRANSFERSTATUS_CANCELED       4
    697 /** The transfer ran into an unrecoverable error. */
    698 #define SHCLURITRANSFERSTATUS_ERROR          5
    699 
    700 /** Defines a transfer status. */
    701 typedef uint32_t SHCLURITRANSFERSTATUS;
     717/** Defines a transfer ID. */
     718typedef uint16_t SHCLURITRANSFERID;
    702719
    703720/**
     
    725742{
    726743    /** The list node. */
    727     RTLISTNODE                    Node;
     744    RTLISTNODE      Node;
    728745    /** The list's handle. */
    729     SHCLLISTHANDLE     hList;
     746    SHCLLISTHANDLE  hList;
    730747    /** Type of list handle. */
    731     SHCLURIOBJTYPE     enmType;
     748    SHCLURIOBJTYPE  enmType;
    732749    /** Absolute local path of the list object. */
    733     char                         *pszPathLocalAbs;
     750    char           *pszPathLocalAbs;
    734751    union
    735752    {
     
    753770{
    754771    /** The list node. */
    755     RTLISTNODE                Node;
     772    RTLISTNODE     Node;
    756773    /** The object's handle. */
    757774    SHCLOBJHANDLE  hObj;
     
    759776    SHCLURIOBJTYPE enmType;
    760777    /** Absolute local path of the object. */
    761     char                     *pszPathLocalAbs;
     778    char          *pszPathLocalAbs;
    762779    union
    763780    {
     
    792809{
    793810    /** The transfer's (local) ID. */
    794     uint16_t                            uID;
     811    SHCLURITRANSFERID     uID;
    795812    /** The transfer's current status. */
    796     SHCLURITRANSFERSTATUS    enmStatus;
     813    SHCLURITRANSFERSTATUS enmStatus;
    797814    /** The transfer's direction. */
    798     SHCLURITRANSFERDIR       enmDir;
     815    SHCLURITRANSFERDIR    enmDir;
    799816    /** The transfer's source. */
    800     SHCLSOURCE               enmSource;
     817    SHCLSOURCE            enmSource;
    801818} SHCLURITRANSFERSTATE, *PSHCLURITRANSFERSTATE;
    802819
     
    879896    SHCLPROVIDERINTERFACE  Interface;
    880897    /** Provider callback data. */
    881     void                             *pvUser;
     898    void                  *pvUser;
    882899} SHCLPROVIDERCREATIONCTX, *PSHCLPROVIDERCREATIONCTX;
    883900
     
    893910    PSHCLURITRANSFER pTransfer;
    894911    /** Saved user pointer. */
    895     void                       *pvUser;
     912    void            *pvUser;
    896913} SHCLURITRANSFERCALLBACKDATA, *PSHCLURITRANSFERCALLBACKDATA;
    897914
     
    963980{
    964981    /** The node member for using this struct in a RTList. */
    965     RTLISTNODE                          Node;
     982    RTLISTNODE               Node;
    966983    /** Critical section for serializing access. */
    967     RTCRITSECT                          CritSect;
     984    RTCRITSECT               CritSect;
    968985    /** The transfer's state (for SSM, later). */
    969986    SHCLURITRANSFERSTATE     State;
    970987    /** Timeout (in ms) for waiting of events. Default is 30s. */
    971     RTMSINTERVAL                        uTimeoutMs;
     988    RTMSINTERVAL             uTimeoutMs;
    972989    /** Absolute path to root entries. */
    973     char                               *pszPathRootAbs;
     990    char                    *pszPathRootAbs;
    974991    /** Maximum data chunk size (in bytes) to transfer. Default is 64K. */
    975     uint32_t                            cbMaxChunkSize;
     992    uint32_t                 cbMaxChunkSize;
    976993    /** The transfer's own event source. */
    977994    SHCLEVENTSOURCE          Events;
     
    979996    SHCLLISTHANDLE           uListHandleNext;
    980997    /** List of all list handles elated to this transfer. */
    981     RTLISTANCHOR                        lstList;
     998    RTLISTANCHOR             lstList;
    982999    /** Number of root entries in list. */
    983     uint64_t                            cRoots;
     1000    uint64_t                 cRoots;
    9841001    /** List of root entries of this transfer. */
    985     RTLISTANCHOR                        lstRoots;
     1002    RTLISTANCHOR             lstRoots;
    9861003    /** Next upcoming object handle. */
    9871004    SHCLOBJHANDLE            uObjHandleNext;
    9881005    /** Map of all objects handles related to this transfer. */
    989     RTLISTANCHOR                        lstObj;
     1006    RTLISTANCHOR             lstObj;
    9901007    /** The transfer's own (local) area, if any (can be NULL if not needed).
    9911008     *  The area itself has a clipboard area ID assigned.
    9921009     *  On the host this area ID gets shared (maintained / locked) across all VMs via VBoxSVC. */
    993     SharedClipboardArea                *pArea;
     1010    SharedClipboardArea     *pArea;
     1011    /** The transfer's own provider context. */
    9941012    SHCLPROVIDERCTX          ProviderCtx;
    9951013    /** The transfer's provider interface. */
     
    9981016    SHCLURITRANSFERCALLBACKS Callbacks;
    9991017    /** Opaque pointer to implementation-specific parameters. */
    1000     void                               *pvUser;
     1018    void                    *pvUser;
    10011019    /** Size (in bytes) of implementation-specific parameters. */
    1002     size_t                              cbUser;
     1020    size_t                   cbUser;
    10031021    /** Contains thread-related attributes. */
    10041022    SHCLURITRANSFERTHREAD    Thread;
    10051023} SHCLURITRANSFER, *PSHCLURITRANSFER;
     1024
     1025/**
     1026 * Structure for keeping an URI transfer status report.
     1027 */
     1028typedef struct _SHCLURITRANSFERREPORT
     1029{
     1030    /** Actual status to report. */
     1031    SHCLURITRANSFERSTATUS uStatus;
     1032    /** Result code (rc) to report; might be unused / invalid, based on enmStatus. */
     1033    int                   rc;
     1034    /** Reporting flags. Currently unused and must be 0. */
     1035    uint32_t              fFlags;
     1036} SHCLURITRANSFERREPORT, *PSHCLURITRANSFERREPORT;
    10061037
    10071038/**
     
    10141045    /** List of transfers. */
    10151046    RTLISTANCHOR                List;
    1016     /** Number of running (concurrent) transfers.
    1017      *  At the moment we only support only one transfer per client at a time. */
    1018     uint32_t                    cRunning;
    1019     /** Maximum Number of running (concurrent) transfers.
    1020      *  At the moment we only support only one transfer per client at a time. */
    1021     uint32_t                    cMaxRunning;
     1047    /** Transfer ID allocation bitmap; clear bits are free, set bits are busy. */
     1048    uint64_t                    bmTransferIds[VBOX_SHARED_CLIPBOARD_MAX_TRANSFERS / sizeof(uint64_t) / 8];
     1049    /** Number of running (concurrent) transfers. */
     1050    uint16_t                    cRunning;
     1051    /** Maximum Number of running (concurrent) transfers. */
     1052    uint16_t                    cMaxRunning;
    10221053    /** Number of total transfers (in list). */
    1023     uint32_t                    cTransfers;
     1054    uint16_t                    cTransfers;
    10241055} SHCLURICTX, *PSHCLURICTX;
    10251056
     
    10421073void SharedClipboardURIObjectDataChunkFree(PSHCLOBJDATACHUNK pDataChunk);
    10431074
    1044 int SharedClipboardURITransferCreate(SHCLURITRANSFERDIR enmDir, SHCLSOURCE enmSource,
    1045                                      PSHCLURITRANSFER *ppTransfer);
     1075int SharedClipboardURITransferCreate(PSHCLURITRANSFER *ppTransfer);
    10461076int SharedClipboardURITransferDestroy(PSHCLURITRANSFER pTransfer);
    10471077
     1078int SharedClipboardURITransferInit(PSHCLURITRANSFER pTransfer, uint32_t uID, SHCLURITRANSFERDIR enmDir, SHCLSOURCE enmSource);
    10481079int SharedClipboardURITransferOpen(PSHCLURITRANSFER pTransfer);
    10491080int SharedClipboardURITransferClose(PSHCLURITRANSFER pTransfer);
     
    10731104int SharedClipboardURILTransferRootsAsList(PSHCLURITRANSFER pTransfer, PSHCLROOTLIST *ppRootList);
    10741105
     1106SHCLURITRANSFERID SharedClipboardURITransferGetID(PSHCLURITRANSFER pTransfer);
    10751107SHCLSOURCE SharedClipboardURITransferGetSource(PSHCLURITRANSFER pTransfer);
    10761108SHCLURITRANSFERSTATUS SharedClipboardURITransferGetStatus(PSHCLURITRANSFER pTransfer);
     
    10941126void SharedClipboardURICtxTransfersCleanup(PSHCLURICTX pURI);
    10951127bool SharedClipboardURICtxTransfersMaximumReached(PSHCLURICTX pURI);
    1096 int SharedClipboardURICtxTransferAdd(PSHCLURICTX pURI, PSHCLURITRANSFER pTransfer);
    1097 int SharedClipboardURICtxTransferRemove(PSHCLURICTX pURI, PSHCLURITRANSFER pTransfer);
     1128int SharedClipboardURICtxTransferRegister(PSHCLURICTX pURI, PSHCLURITRANSFER pTransfer, uint32_t *pidTransfer);
     1129int SharedClipboardURICtxTransferRegisterByIndex(PSHCLURICTX pURI, PSHCLURITRANSFER pTransfer, uint32_t idTransfer);
     1130int SharedClipboardURICtxTransferUnregister(PSHCLURICTX pURI, uint32_t idTransfer);
    10981131
    10991132void SharedClipboardFsObjFromIPRT(PSHCLFSOBJINFO pDst, PCRTFSOBJINFO pSrc);
     
    11021135bool SharedClipboardMIMENeedsCache(const char *pcszFormat, size_t cchFormatMax);
    11031136
     1137const char *VBoxClipboardTransferStatusToStr(uint32_t uStatus);
     1138
    11041139#endif /* !VBOX_INCLUDED_GuestHost_SharedClipboard_uri_h */
    11051140
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