VirtualBox

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


Ignore:
Timestamp:
Jan 27, 2021 5:11:25 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142470
Message:

Shared Clipboard/Transfers: More code for HTTP transfers. bugref:9437

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

Legend:

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

    r87072 r87452  
    595595/**
    596596 * Structure maintaining clipboard transfer provider context data.
    597  * This is handed in to the provider implementation callbacks.
    598  */
    599 typedef struct SHCLPROVIDERCTX
     597 * This is handed in to the provider interface implementations.
     598 */
     599typedef struct _SHCLTXPROVIDERCTX
    600600{
    601601    /** Pointer to the related Shared Clipboard transfer. */
     
    603603    /** User-defined data pointer. Can be NULL if not needed. */
    604604    void         *pvUser;
    605 } SHCLPROVIDERCTX, *PSHCLPROVIDERCTX;
    606 
    607 /**
    608  * Shared Clipboard transfer provider interface table.
    609  */
    610 typedef struct SHCLPROVIDERINTERFACE
    611 {
    612     DECLCALLBACKMEMBER(int, pfnTransferOpen,(PSHCLPROVIDERCTX pCtx));
    613     DECLCALLBACKMEMBER(int, pfnTransferClose,(PSHCLPROVIDERCTX pCtx));
    614     DECLCALLBACKMEMBER(int, pfnRootsGet,(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList));
    615     DECLCALLBACKMEMBER(int, pfnListOpen,(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList));
    616     DECLCALLBACKMEMBER(int, pfnListClose,(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList));
    617     DECLCALLBACKMEMBER(int, pfnListHdrRead,(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr));
    618     DECLCALLBACKMEMBER(int, pfnListHdrWrite,(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr));
    619     DECLCALLBACKMEMBER(int, pfnListEntryRead,(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pEntry));
    620     DECLCALLBACKMEMBER(int, pfnListEntryWrite,(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pEntry));
    621     DECLCALLBACKMEMBER(int, pfnObjOpen,(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms, PSHCLOBJHANDLE phObj));
    622     DECLCALLBACKMEMBER(int, pfnObjClose,(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj));
    623     DECLCALLBACKMEMBER(int, pfnObjRead,(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, void *pvData, uint32_t cbData,
    624                                         uint32_t fFlags, uint32_t *pcbRead));
    625     DECLCALLBACKMEMBER(int, pfnObjWrite,(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, void *pvData, uint32_t cbData,
    626                                          uint32_t fFlags, uint32_t *pcbWritten));
    627 } SHCLPROVIDERINTERFACE, *PSHCLPROVIDERINTERFACE;
    628 
    629 /**
    630  * Structure for the Shared Clipboard provider creation context.
    631  */
    632 typedef struct _SHCLPROVIDERCREATIONCTX
    633 {
    634     /** Specifies what the source of the provider is. */
    635     SHCLSOURCE             enmSource;
    636     /** The provider interface table. */
    637     SHCLPROVIDERINTERFACE  Interface;
    638     /** Provider callback data. */
    639     void                  *pvUser;
    640 } SHCLPROVIDERCREATIONCTX, *PSHCLPROVIDERCREATIONCTX;
    641 
    642 
    643 /**
    644  * Structure for storing Shared Clipboard transfer callback data.
    645  */
    646 typedef struct _SHCLTRANSFERCALLBACKDATA
    647 {
    648     /** Pointer to related Shared Clipboard transfer. */
    649     PSHCLTRANSFER pTransfer;
    650     /** Saved user pointer. */
    651     void         *pvUser;
    652605    /** Size (in bytes) of data at user pointer. */
    653606    size_t        cbUser;
    654 } SHCLTRANSFERCALLBACKDATA, *PSHCLTRANSFERCALLBACKDATA;
    655 
    656 /**
    657  * Function callback table for Shared Clipboard transfers.
    658  *
    659  * All callbacks are optional and therefore can be NULL.
    660  */
    661 typedef struct SHCLTRANSFERCALLBACKS
    662 {
    663     /** User pointer to data. Optional and can be NULL. */
    664     void  *pvUser;
    665     /** Size (in bytes) of user data pointing at. Optional and can be 0. */
    666     size_t cbUser;
    667     /** Called after the transfer has been initialized. */
    668     DECLCALLBACKMEMBER(int, pfnTransferInitialize,(PSHCLTRANSFERCALLBACKDATA pData));
     607} SHCLTXPROVIDERCTX, *PSHCLTXPROVIDERCTX;
     608
     609struct SHCLTRANSFERCTX;
     610typedef struct SHCLTRANSFERCTX *PSHCLTRANSFERCTX;
     611
     612/**
     613 * Shared Clipboard transfer provider interface table.
     614 */
     615typedef struct _SHCLTXPROVIDERIFACE
     616{
     617    /** Called when the transfer gets initialized. */
     618    DECLCALLBACKMEMBER(int,  pfnInitialize,(PSHCLTXPROVIDERCTX pCtx));
    669619    /** Called before the transfer will be started. */
    670     DECLCALLBACKMEMBER(int, pfnTransferStart,(PSHCLTRANSFERCALLBACKDATA pData));
    671     /** Called when reading / writing the list header is complete. */
    672     DECLCALLBACKMEMBER(void, pfnListHeaderComplete,(PSHCLTRANSFERCALLBACKDATA pData));
    673     /** Called when reading / writing a list entry is complete. */
    674     DECLCALLBACKMEMBER(void, pfnListEntryComplete,(PSHCLTRANSFERCALLBACKDATA pData));
    675     /** Called when the transfer is complete. */
    676     DECLCALLBACKMEMBER(void, pfnTransferComplete,(PSHCLTRANSFERCALLBACKDATA pData, int rc));
     620    DECLCALLBACKMEMBER(int,  pfnStart,(PSHCLTXPROVIDERCTX pCtx));
     621    /** Called when the transfer has been complete. */
     622    DECLCALLBACKMEMBER(void, pfnCompleted,(PSHCLTXPROVIDERCTX pCtx, int rc));
    677623    /** Called when the transfer has been canceled. */
    678     DECLCALLBACKMEMBER(void, pfnTransferCanceled,(PSHCLTRANSFERCALLBACKDATA pData));
     624    DECLCALLBACKMEMBER(void, pfnCanceled,(PSHCLTXPROVIDERCTX pCtx));
    679625    /** Called when transfer resulted in an unrecoverable error. */
    680     DECLCALLBACKMEMBER(void, pfnTransferError,(PSHCLTRANSFERCALLBACKDATA pData, int rc));
    681 } SHCLTRANSFERCALLBACKS, *PSHCLTRANSFERCALLBACKS;
     626    DECLCALLBACKMEMBER(void, pfnError,(PSHCLTXPROVIDERCTX pCtx, int rc));
     627    /** Called when transfer got registered to a transfer context. */
     628    DECLCALLBACKMEMBER(void, pfnRegistered,(PSHCLTXPROVIDERCTX pCtx, PSHCLTRANSFERCTX pTransferCtx));
     629    /** Called when transfer got unregistered from a transfer context. */
     630    DECLCALLBACKMEMBER(void, pfnUnregistered,(PSHCLTXPROVIDERCTX pCtx, PSHCLTRANSFERCTX pTransferCtx));
     631
     632    DECLCALLBACKMEMBER(int, pfnRootsGet,(PSHCLTXPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList));
     633    DECLCALLBACKMEMBER(int, pfnListOpen,(PSHCLTXPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList));
     634    DECLCALLBACKMEMBER(int, pfnListClose,(PSHCLTXPROVIDERCTX pCtx, SHCLLISTHANDLE hList));
     635    DECLCALLBACKMEMBER(int, pfnListHdrRead,(PSHCLTXPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr));
     636    DECLCALLBACKMEMBER(int, pfnListHdrWrite,(PSHCLTXPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr));
     637    DECLCALLBACKMEMBER(int, pfnListEntryRead,(PSHCLTXPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pEntry));
     638    DECLCALLBACKMEMBER(int, pfnListEntryWrite,(PSHCLTXPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pEntry));
     639    DECLCALLBACKMEMBER(int, pfnObjOpen,(PSHCLTXPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms, PSHCLOBJHANDLE phObj));
     640    DECLCALLBACKMEMBER(int, pfnObjClose,(PSHCLTXPROVIDERCTX pCtx, SHCLOBJHANDLE hObj));
     641    DECLCALLBACKMEMBER(int, pfnObjRead,(PSHCLTXPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, void *pvData, uint32_t cbData,
     642                                        uint32_t fFlags, uint32_t *pcbRead));
     643    DECLCALLBACKMEMBER(int, pfnObjWrite,(PSHCLTXPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, void *pvData, uint32_t cbData,
     644                                         uint32_t fFlags, uint32_t *pcbWritten));
     645} SHCLTXPROVIDERIFACE, *PSHCLTXPROVIDERIFACE;
     646
     647/**
     648 * Structure for the Shared Clipboard transfer provider creation context.
     649 */
     650typedef struct _SHCLTXPROVIDERCREATIONCTX
     651{
     652    /** Specifies what the source of the provider is. */
     653    SHCLSOURCE           enmSource;
     654    /** The provider interface table. */
     655    SHCLTXPROVIDERIFACE  Interface;
     656    /** User-provided callback data. */
     657    void                *pvUser;
     658    /** Size (in bytes) of data at user pointer. */
     659    size_t               cbUser;
     660} SHCLTXPROVIDERCREATIONCTX, *PSHCLTXPROVIDERCREATIONCTX;
    682661
    683662/**
     
    737716    RTLISTANCHOR             lstObj;
    738717    /** The transfer's own provider context. */
    739     SHCLPROVIDERCTX          ProviderCtx;
     718    SHCLTXPROVIDERCTX        ProviderCtx;
    740719    /** The transfer's provider interface. */
    741     SHCLPROVIDERINTERFACE    ProviderIface;
    742     /** The transfer's (optional) callback table. */
    743     SHCLTRANSFERCALLBACKS    Callbacks;
     720    SHCLTXPROVIDERIFACE      ProviderIface;
    744721    /** Opaque pointer to implementation-specific parameters. */
    745722    void                    *pvUser;
     
    782759} SHCLHTTPSERVER;
    783760typedef SHCLHTTPSERVER *PSHCLHTTPSERVER;
     761
     762typedef struct _SHCLHTTPCONTEXT
     763{
     764    /** HTTP server instance data. */
     765    SHCLHTTPSERVER      HttpServer;
     766} SHCLHTTPCONTEXT;
     767typedef SHCLHTTPCONTEXT *PSHCLHTTPCONTEXT;
     768
    784769#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP */
    785770
     
    787772 * Structure for keeping Shared Clipboard transfer context around.
    788773 */
    789 typedef struct _SHCLTRANSFERCTX
     774struct SHCLTRANSFERCTX
    790775{
    791776    /** Critical section for serializing access. */
     
    805790    SHCLHTTPSERVER              HttpServer;
    806791#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP */
    807 } SHCLTRANSFERCTX, *PSHCLTRANSFERCTX;
     792};
    808793
    809794int ShClTransferObjCtxInit(PSHCLCLIENTTRANSFEROBJCTX pObjCtx);
     
    828813
    829814int ShClTransferCreate(PSHCLTRANSFER *ppTransfer);
     815int ShClTransferInit(PSHCLTRANSFER pTransfer, SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource);
    830816int ShClTransferDestroy(PSHCLTRANSFER pTransfer);
    831 
    832 int ShClTransferInit(PSHCLTRANSFER pTransfer, SHCLTRANSFERID uID, SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource);
    833 int ShClTransferOpen(PSHCLTRANSFER pTransfer);
    834 int ShClTransferClose(PSHCLTRANSFER pTransfer);
    835817
    836818int ShClTransferListOpen(PSHCLTRANSFER pTransfer, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
     
    881863bool ShClTransferListEntryIsValid(PSHCLLISTENTRY pListEntry);
    882864
    883 int ShClTransferSetInterface(PSHCLTRANSFER pTransfer, PSHCLPROVIDERCREATIONCTX pCreationCtx);
     865int ShClTransferSetProviderIface(PSHCLTRANSFER pTransfer, PSHCLTXPROVIDERCREATIONCTX pCreationCtx);
    884866int ShClTransferRootsSet(PSHCLTRANSFER pTransfer, const char *pszRoots, size_t cbRoots);
    885867void ShClTransferReset(PSHCLTRANSFER pTransfer);
     
    895877int ShClTransferRun(PSHCLTRANSFER pTransfer, PFNRTTHREAD pfnThreadFunc, void *pvUser);
    896878int ShClTransferStart(PSHCLTRANSFER pTransfer);
    897 void ShClTransferSetCallbacks(PSHCLTRANSFER pTransfer, PSHCLTRANSFERCALLBACKS pCallbacks);
    898879
    899880int ShClTransferCtxInit(PSHCLTRANSFERCTX pTransferCtx);
    900881void ShClTransferCtxDestroy(PSHCLTRANSFERCTX pTransferCtx);
    901882void ShClTransferCtxReset(PSHCLTRANSFERCTX pTransferCtx);
    902 PSHCLTRANSFER ShClTransferCtxGetTransfer(PSHCLTRANSFERCTX pTransferCtx, uint32_t uIdx);
     883PSHCLTRANSFER ShClTransferCtxGetTransferById(PSHCLTRANSFERCTX pTransferCtx, uint32_t uID);
     884PSHCLTRANSFER ShClTransferCtxGetTransferByIndex(PSHCLTRANSFERCTX pTransferCtx, uint32_t uIdx);
    903885uint32_t ShClTransferCtxGetRunningTransfers(PSHCLTRANSFERCTX pTransferCtx);
    904886uint32_t ShClTransferCtxGetTotalTransfers(PSHCLTRANSFERCTX pTransferCtx);
     
    906888bool ShClTransferCtxTransfersMaximumReached(PSHCLTRANSFERCTX pTransferCtx);
    907889int ShClTransferCtxTransferRegister(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID *pidTransfer);
    908 int ShClTransferCtxTransferRegisterByIndex(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID idTransfer);
     890int ShClTransferCtxTransferRegisterById(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer, SHCLTRANSFERID idTransfer);
    909891int ShClTransferCtxTransferUnregister(PSHCLTRANSFERCTX pTransferCtx, SHCLTRANSFERID idTransfer);
    910892
    911893#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP
     894int ShClHttpTransferCreate(PSHCLHTTPCONTEXT pCtx, PSHCLTRANSFER pTransfer);
     895int ShClHttpTransferDestroy(PSHCLHTTPCONTEXT pCtx, PSHCLTRANSFER pTransfer);
     896
    912897int ShClTransferHttpServerCreate(PSHCLHTTPSERVER pSrv, uint16_t *puPort);
    913898int ShClTransferHttpServerCreateEx(PSHCLHTTPSERVER pSrv, uint16_t uPort);
     
    922907char *ShClTransferHttpServerGetUrlA(PSHCLHTTPSERVER pSrv, SHCLTRANSFERID idTransfer);
    923908bool ShClTransferHttpServerIsRunning(PSHCLHTTPSERVER pSrv);
    924 #endif
     909#endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP */
    925910
    926911void ShClFsObjFromIPRT(PSHCLFSOBJINFO pDst, PCRTFSOBJINFO pSrc);
  • trunk/include/VBox/GuestHost/SharedClipboard-x11.h

    r87082 r87452  
    3535
    3636#include <VBox/GuestHost/SharedClipboard.h>
     37#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     38# include <VBox/GuestHost/SharedClipboard-transfers.h>
     39#endif
    3740
    3841/** Enables the Xt busy / update handling. */
     
    105108#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    106109    /** The best HTML format X11 has to offer, as an index into the formats table. */
    107     SHCLX11FMTIDX idxFmtURI;
     110    SHCLX11FMTIDX   idxFmtURI;
     111# ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP
     112    /** HTTP transfer context data. */
     113    SHCLHTTPCONTEXT HttpCtx;
     114# endif
    108115#endif
    109116    /** What kind of formats does VBox have to offer? */
     
    148155 *  @{
    149156 */
    150 DECLCALLBACK(int)  ShClX11RequestDataForX11Callback(SHCLCONTEXT *pCtx, SHCLFORMAT uFmt, void **ppv, uint32_t *pcb);
    151 DECLCALLBACK(void) ShClX11ReportFormatsCallback(SHCLCONTEXT *pCtx, SHCLFORMATS fFormats);
    152 DECLCALLBACK(void) ShClX11RequestFromX11CompleteCallback(SHCLCONTEXT *pCtx, int rc, CLIPREADCBREQ *pReq, void *pv, uint32_t cb);
     157/**
     158 * Callback for reading clipboard data from the guest.
     159 * The function will be invoked for every single target the clipboard requests.
     160 *
     161 * @note Runs in Xt event thread.
     162 *
     163 * @returns VBox status code. VERR_NO_DATA if no data available.
     164 * @param   pCtx                Pointer to the host clipboard structure.
     165 * @param   uFmt                The format in which the data should be transferred
     166 *                              (VBOX_SHCL_FMT_XXX).
     167 * @param   ppv                 Returns an allocated buffer with data read from the guest on success.
     168 *                              Needs to be free'd with RTMemFree() by the caller.
     169 * @param   pcb                 Returns the amount of data read (in bytes) on success.
     170 */
     171DECLCALLBACK(int)  ShClX11RequestDataForX11Callback(PSHCLCONTEXT pCtx, SHCLFORMAT uFmt, void **ppv, uint32_t *pcb);
     172
     173/**
     174 * Reports formats available in the X11 clipboard to VBox.
     175 *
     176 * @note   Runs in Xt event thread.
     177 *
     178 * @param  pCtx                 Opaque context pointer for the glue code.
     179 * @param  fFormats             The formats available.
     180 */
     181DECLCALLBACK(void) ShClX11ReportFormatsCallback(PSHCLCONTEXT pCtx, SHCLFORMATS fFormats);
     182
     183/**
     184 * Called by the backend to tell us that a request for data from X11 has completed.
     185 *
     186 * @param  pCtx                 Our context information.
     187 * @param  rcCompletion         The completion status of the request.
     188 * @param  pReq                 The request structure that we passed in when we started
     189 *                              the request.  We RTMemFree() this in this function.
     190 * @param  pv                   The clipboard data returned from X11 if the request succeeded (see @a rcCompletion).
     191 * @param  cb                   The size of the data in @a pv.
     192 */
     193DECLCALLBACK(void) ShClX11RequestFromX11CompleteCallback(PSHCLCONTEXT pCtx, int rc, CLIPREADCBREQ *pReq, void *pv, uint32_t cb);
    153194/** @} */
    154195
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