VirtualBox

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


Ignore:
Timestamp:
Jul 4, 2023 4:23:18 PM (23 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158104
Message:

Shared Clipboard: More work on making the internal APIs more fine grained and easier to follow. bugref:9437

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

Legend:

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

    r100290 r100367  
    9090    /** No status set. */
    9191    SHCLTRANSFERSTATUS_NONE = 0,
    92     /** The transfer has been initialized but is not running yet. */
    93     SHCLTRANSFERSTATUS_INITIALIZED,
     92    /** Requests a transfer to be initialized by the host. Only used for H->G transfers.
     93     *  Needed as only the host creates new transfer IDs. */
     94    SHCLTRANSFERSTATUS_REQUESTED = 8,
     95    /** The transfer has been initialized and is ready to go, but is not running yet.
     96     *  At this stage the other party can start reading the root list and other stuff. */
     97    SHCLTRANSFERSTATUS_INITIALIZED = 1,
    9498    /** The transfer has been uninitialized and is not usable anymore. */
    95     SHCLTRANSFERSTATUS_UNINITIALIZED,
     99    SHCLTRANSFERSTATUS_UNINITIALIZED = 2,
    96100    /** The transfer is active and running. */
    97     SHCLTRANSFERSTATUS_STARTED,
     101    SHCLTRANSFERSTATUS_STARTED = 3,
    98102    /** The transfer has been stopped. */
    99     SHCLTRANSFERSTATUS_STOPPED,
     103    SHCLTRANSFERSTATUS_STOPPED = 4,
    100104    /** The transfer has been canceled. */
    101     SHCLTRANSFERSTATUS_CANCELED,
     105    SHCLTRANSFERSTATUS_CANCELED = 5,
    102106    /** The transfer has been killed. */
    103     SHCLTRANSFERSTATUS_KILLED,
     107    SHCLTRANSFERSTATUS_KILLED = 6,
    104108    /** The transfer ran into an unrecoverable error.
    105109     *  This results in completely aborting the operation. */
    106     SHCLTRANSFERSTATUS_ERROR,
     110    SHCLTRANSFERSTATUS_ERROR = 7,
    107111    /** The usual 32-bit hack. */
    108112    SHCLTRANSFERSTATUS_32BIT_SIZE_HACK = 0x7fffffff
     
    361365typedef struct _SHCLREPLY
    362366{
    363     /** Message type (of type VBOX_SHCL_REPLYMSGTYPE_TRANSFER_XXX). */
     367    /** Message type (of type VBOX_SHCL_TX_REPLYMSGTYPE_TRANSFER_XXX). */
    364368    uint32_t uType;
    365369    /** IPRT result of overall operation. Note: int vs. uint32! */
     
    367371    union
    368372    {
    369         /** For VBOX_SHCL_REPLYMSGTYPE_TRANSFER_STATUS. */
     373        /** For VBOX_SHCL_TX_REPLYMSGTYPE_TRANSFER_STATUS. */
    370374        struct
    371375        {
    372376            SHCLTRANSFERSTATUS uStatus;
    373377        } TransferStatus;
    374         /** For VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN. */
     378        /** For VBOX_SHCL_TX_REPLYMSGTYPE_LIST_OPEN. */
    375379        struct
    376380        {
    377381            SHCLLISTHANDLE uHandle;
    378382        } ListOpen;
    379         /** For VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE. */
     383        /** For VBOX_SHCL_TX_REPLYMSGTYPE_LIST_CLOSE. */
    380384        struct
    381385        {
    382386            SHCLLISTHANDLE uHandle;
    383387        } ListClose;
    384         /** For VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN. */
     388        /** For VBOX_SHCL_TX_REPLYMSGTYPE_OBJ_OPEN. */
    385389        struct
    386390        {
    387391            SHCLOBJHANDLE uHandle;
    388392        } ObjOpen;
    389         /** For VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE. */
     393        /** For VBOX_SHCL_TX_REPLYMSGTYPE_OBJ_CLOSE. */
    390394        struct
    391395        {
     
    647651typedef SHCLTXPROVIDERCTX *PSHCLTXPROVIDERCTX;
    648652
    649 struct SHCLTRANSFERCTX;
    650 typedef struct SHCLTRANSFERCTX *PSHCLTRANSFERCTX;
     653struct _SHCLTRANSFERCTX;
     654typedef struct _SHCLTRANSFERCTX *PSHCLTRANSFERCTX;
    651655
    652656/**
     
    907911    /** The node member for using this struct in a RTList. */
    908912    RTLISTNODE                Node;
     913    /** Critical section for serializing access. */
     914    RTCRITSECT                CritSect;
    909915    /** Number of references to this transfer. */
    910916    uint32_t                  cRefs;
     
    917923    /** Maximum data chunk size (in bytes) to transfer. Default is 64K. */
    918924    uint32_t                  cbMaxChunkSize;
     925    /** Status change event. */
     926    RTSEMEVENT                StatusChangeEvent;
    919927    /** The transfer's own event source. */
    920928    SHCLEVENTSOURCE           Events;
     
    951959    /** Contains thread-related attributes. */
    952960    SHCLTRANSFERTHREAD        Thread;
    953     /** Critical section for serializing access. */
    954     RTCRITSECT                CritSect;
    955961} SHCLTRANSFER;
    956962/** Pointer to a Shared Clipboard transfer. */
     
    976982 * Enumeration for HTTP server status changes.
    977983 *
    978  * Keep those as flags, so that we can wait for multiple statuses, if needed.
     984 * Keep those as flags, so that we can wait for multiple statuses, if ever needed.
    979985 */
    980986typedef enum _SHCLHTTPSERVERSTATUS
     
    10411047
    10421048/**
     1049 * Structure for keeping a single transfer context event.
     1050 */
     1051typedef struct _SHCLTRANSFERCTXEVENT
     1052{
     1053    /** Transfer bound to this event.
     1054     *  Can be NULL if not being used. */
     1055    PSHCLTRANSFER  pTransfer;
     1056    /** Whether a transfer was registered or not. */
     1057    bool           fRegistered;
     1058} SHCLTRANSFERCTXEVENT;
     1059/** Pointer to Shared Clipboard transfer context event. */
     1060typedef SHCLTRANSFERCTXEVENT *PSHCLTRANSFERCTXEVENT;
     1061
     1062/**
    10431063 * Structure for keeping Shared Clipboard transfer context around.
    10441064 *
    10451065 * A transfer context contains a list of (grouped) transfers for book keeping.
    10461066 */
    1047 struct SHCLTRANSFERCTX
     1067typedef struct _SHCLTRANSFERCTX
    10481068{
    10491069    /** Critical section for serializing access. */
    10501070    RTCRITSECT                  CritSect;
     1071    /** Event used for waiting. for transfer context changes. */
     1072    RTSEMEVENT                  ChangedEvent;
     1073    /** Event data for \a ChangedEvent. */
     1074    SHCLTRANSFERCTXEVENT        ChangedEventData;
    10511075    /** List of transfers. */
    10521076    RTLISTANCHOR                List;
     
    10591083    /** Number of total transfers (in list). */
    10601084    uint16_t                    cTransfers;
    1061 };
     1085} SHCLTRANSFERCTX;
     1086/** Pointer to Shared Clipboard transfer context. */
     1087typedef SHCLTRANSFERCTX *PSHCLTRANSFERCTX;
    10621088
    10631089/** @name Shared Clipboard transfer interface providers.
    10641090 *  @{
    10651091 */
    1066 PSHCLTXPROVIDERIFACE VBClTransferProviderLocalQueryInterface(PSHCLTXPROVIDER pProvider);
     1092PSHCLTXPROVIDERIFACE ShClTransferProviderLocalQueryInterface(PSHCLTXPROVIDER pProvider);
    10671093/** @} */
    10681094
     
    10961122 *  @{
    10971123 */
    1098 int ShClTransferCreateEx(uint32_t cbMaxChunkSize, uint32_t cMaxListHandles, uint32_t cMaxObjHandles, PSHCLTRANSFER *ppTransfer);
    1099 int ShClTransferCreate(PSHCLTRANSFER *ppTransfer);
    1100 int ShClTransferInit(PSHCLTRANSFER pTransfer, SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource);
     1124int ShClTransferCreateEx(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, uint32_t cbMaxChunkSize, uint32_t cMaxListHandles, uint32_t cMaxObjHandles, PSHCLTRANSFER *ppTransfer);
     1125int ShClTransferCreate(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, PSHCLTRANSFER *ppTransfer);
     1126int ShClTransferInit(PSHCLTRANSFER pTransfer);
    11011127int ShClTransferDestroy(PSHCLTRANSFER pTransfer);
    11021128void ShClTransferReset(PSHCLTRANSFER pTransfer);
     
    11131139SHCLSOURCE ShClTransferGetSource(PSHCLTRANSFER pTransfer);
    11141140SHCLTRANSFERSTATUS ShClTransferGetStatus(PSHCLTRANSFER pTransfer);
     1141int ShClTransferWaitForStatus(PSHCLTRANSFER pTransfer, RTMSINTERVAL msTimeout, SHCLTRANSFERSTATUS enmStatus);
     1142int ShClTransferWaitForStatusChange(PSHCLTRANSFER pTransfer, RTMSINTERVAL msTimeout, SHCLTRANSFERSTATUS *penmStatus);
    11151143
    11161144int ShClTransferListOpen(PSHCLTRANSFER pTransfer, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
     
    11591187
    11601188int ShClTransferRootsInitFromStringList(PSHCLTRANSFER pTransfer, const char *pszRoots, size_t cbRoots);
     1189int ShClTransferRootsInitFromStringListUnicode(PSHCLTRANSFER pTransfer, PRTUTF16 pwszRoots, size_t cbRoots);
    11611190int ShClTransferRootsInitFromFile(PSHCLTRANSFER pTransfer, const char *pszFile);
    11621191uint64_t ShClTransferRootsCount(PSHCLTRANSFER pTransfer);
     
    11731202PSHCLTRANSFER ShClTransferCtxGetTransferById(PSHCLTRANSFERCTX pTransferCtx, uint32_t uID);
    11741203PSHCLTRANSFER ShClTransferCtxGetTransferByIndex(PSHCLTRANSFERCTX pTransferCtx, uint32_t uIdx);
     1204PSHCLTRANSFER ShClTransferCtxGetTransferLast(PSHCLTRANSFERCTX pTransferCtx);
    11751205uint32_t ShClTransferCtxGetRunningTransfers(PSHCLTRANSFERCTX pTransferCtx);
    11761206uint32_t ShClTransferCtxGetTotalTransfers(PSHCLTRANSFERCTX pTransferCtx);
    11771207void ShClTransferCtxCleanup(PSHCLTRANSFERCTX pTransferCtx);
    1178 bool ShClTransferCtxTransfersMaximumReached(PSHCLTRANSFERCTX pTransferCtx);
    1179 int ShClTransferCtxTransferRegister(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID *pidTransfer);
    1180 int ShClTransferCtxTransferRegisterById(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID idTransfer);
    1181 int ShClTransferCtxTransferUnregisterById(PSHCLTRANSFERCTX pTransferCtx, SHCLTRANSFERID idTransfer);
     1208bool ShClTransferCtxIsMaximumReached(PSHCLTRANSFERCTX pTransferCtx);
     1209int ShClTransferCtxCreateId(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFERID pidTransfer);
     1210int ShClTransferCtxRegister(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, PSHCLTRANSFERID pidTransfer);
     1211int ShClTransferCtxRegisterById(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID idTransfer);
     1212int ShClTransferCtxUnregisterById(PSHCLTRANSFERCTX pTransferCtx, SHCLTRANSFERID idTransfer);
     1213int ShClTransferCtxWait(PSHCLTRANSFERCTX pTransferCtx, RTMSINTERVAL msTimeout, bool fRegister, SHCLTRANSFERID idTransfer, PSHCLTRANSFER *ppTransfer);
    11821214/** @} */
    11831215
     
    12101242char *ShClTransferHttpServerGetAddressA(PSHCLHTTPSERVER pSrv);
    12111243char *ShClTransferHttpServerGetUrlA(PSHCLHTTPSERVER pSrv, SHCLTRANSFERID idTransfer);
     1244bool ShClTransferHttpServerIsInitialized(PSHCLHTTPSERVER pSrv);
    12121245bool ShClTransferHttpServerIsRunning(PSHCLHTTPSERVER pSrv);
    12131246int ShClTransferHttpServerWaitForStatusChange(PSHCLHTTPSERVER pSrv, SHCLHTTPSERVERSTATUS fStatus, RTMSINTERVAL msTimeout);
     
    12221255const char *ShClTransferStatusToStr(SHCLTRANSFERSTATUS enmStatus);
    12231256int ShClTransferValidatePath(const char *pcszPath, bool fMustExist);
    1224 int ShClFsObjInfoQuery(const char *pszPath, PSHCLFSOBJINFO pObjInfo);
     1257int ShClFsObjInfoQueryLocal(const char *pszPath, PSHCLFSOBJINFO pObjInfo);
    12251258int ShClFsObjInfoFromIPRT(PSHCLFSOBJINFO pDst, PCRTFSOBJINFO pSrc);
    12261259/** @} */
  • trunk/include/VBox/GuestHost/SharedClipboard-win.h

    r100206 r100367  
    231231    void Destroy(void);
    232232
    233     void SetCallbacks(PSHCLCALLBACKS pCallbacks);
    234 
    235233public: /* IUnknown methods. */
    236234
     
    263261public:
    264262
    265     int SetAndStartTransfer(PSHCLTRANSFER pTransfer);
    266     int SetStatus(Status enmStatus, int rc = VINF_SUCCESS);
     263    int SetTransfer(PSHCLTRANSFER pTransfer);
     264    int SetStatus(Status enmStatus, int rcSts = VINF_SUCCESS);
    267265
    268266public:
  • trunk/include/VBox/GuestHost/SharedClipboard-x11.h

    r100255 r100367  
    144144    /** What kind of formats does VBox have to offer? */
    145145    SHCLFORMATS      vboxFormats;
    146     /** Cache of the last unicode data that we received. */
    147     void            *pvUnicodeCache;
    148     /** Size of the unicode data in the cache. */
    149     uint32_t         cbUnicodeCache;
     146    /** Internval cache of VBox clipboard formats. */
     147    SHCLCACHE        Cache;
    150148    /** When we wish the clipboard to exit, we have to wake up the event
    151149     * loop.  We do this by writing into a pipe.  This end of the pipe is
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