Changeset 80990 in vbox for trunk/src/VBox/Additions/common
- Timestamp:
- Sep 25, 2019 6:20:09 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 133584
- Location:
- trunk/src/VBox/Additions/common
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp
r80968 r80990 48 48 49 49 50 /** 51 * Function naming convention: 52 * 53 * FunctionNameRecv = Receives a host message (request). 54 * FunctionNameReply = Replies to a host message (request). 55 * FunctionNameSend = Sends a guest message to the host. 56 */ 57 58 50 59 /********************************************************************************************************************************* 51 60 * Prototypes * … … 1177 1186 } 1178 1187 1179 VBGLR3DECL(int) VbglR3ClipboardObjRead (PVBGLR3SHCLCMDCTX pCtx, SHCLOBJHANDLE hObj,1180 void *pvData, uint32_t cbData, uint32_t *pcbRead)1188 VBGLR3DECL(int) VbglR3ClipboardObjReadSend(PVBGLR3SHCLCMDCTX pCtx, SHCLOBJHANDLE hObj, 1189 void *pvData, uint32_t cbData, uint32_t *pcbRead) 1181 1190 { 1182 1191 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); … … 1214 1223 } 1215 1224 1216 VBGLR3DECL(int) VbglR3ClipboardObjWrite (PVBGLR3SHCLCMDCTX pCtx, SHCLOBJHANDLE hObj,1217 void *pvData, uint32_t cbData, uint32_t *pcbWritten)1225 VBGLR3DECL(int) VbglR3ClipboardObjWriteSend(PVBGLR3SHCLCMDCTX pCtx, SHCLOBJHANDLE hObj, 1226 void *pvData, uint32_t cbData, uint32_t *pcbWritten) 1218 1227 { 1219 1228 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); … … 1243 1252 *pcbWritten = cbData; /** @todo For now return all as being written. */ 1244 1253 } 1254 1255 LogFlowFuncLeaveRC(rc); 1256 return rc; 1257 } 1258 1259 /********************************************************************************************************************************* 1260 * Transfer interface implementations * 1261 *********************************************************************************************************************************/ 1262 1263 static int vbglR3ClipboardTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList) 1264 { 1265 LogFlowFuncEnter(); 1266 1267 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1268 AssertPtr(pCmdCtx); 1269 1270 int rc = VbglR3ClipboardRootListRead(pCmdCtx, ppRootList); 1271 1272 LogFlowFuncLeaveRC(rc); 1273 return rc; 1274 } 1275 1276 static int vbglR3ClipboardTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, 1277 PSHCLLISTHANDLE phList) 1278 { 1279 LogFlowFuncEnter(); 1280 1281 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1282 AssertPtr(pCmdCtx); 1283 1284 int rc = VbglR3ClipboardListOpenSend(pCmdCtx, pOpenParms, phList); 1285 1286 LogFlowFuncLeaveRC(rc); 1287 return rc; 1288 } 1289 1290 static int vbglR3ClipboardTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList) 1291 { 1292 LogFlowFuncEnter(); 1293 1294 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1295 AssertPtr(pCmdCtx); 1296 1297 int rc = VbglR3ClipboardListCloseSend(pCmdCtx, hList); 1298 1299 LogFlowFuncLeaveRC(rc); 1300 return rc; 1301 } 1302 1303 static int vbglR3ClipboardTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx, 1304 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr) 1305 { 1306 LogFlowFuncEnter(); 1307 1308 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1309 AssertPtr(pCmdCtx); 1310 1311 int rc = SharedClipboardTransferListHdrInit(pListHdr); 1312 if (RT_SUCCESS(rc)) 1313 { 1314 if (RT_SUCCESS(rc)) 1315 { 1316 rc = VbglR3ClipboardListHdrRead(pCmdCtx, hList, 0 /* fFlags */, pListHdr); 1317 } 1318 else 1319 SharedClipboardTransferListHdrDestroy(pListHdr); 1320 } 1321 1322 LogFlowFuncLeaveRC(rc); 1323 return rc; 1324 } 1325 1326 static int vbglR3ClipboardTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx, 1327 SHCLLISTHANDLE hList, PSHCLLISTENTRY pEntry) 1328 { 1329 LogFlowFuncEnter(); 1330 1331 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1332 AssertPtr(pCmdCtx); 1333 1334 int rc = VbglR3ClipboardListEntryRead(pCmdCtx, hList, pEntry); 1335 1336 LogFlowFuncLeaveRC(rc); 1337 return rc; 1338 } 1339 1340 static int vbglR3ClipboardTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, 1341 PSHCLOBJOPENCREATEPARMS pCreateParms, PSHCLOBJHANDLE phObj) 1342 { 1343 LogFlowFuncEnter(); 1344 1345 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1346 AssertPtr(pCmdCtx); 1347 1348 int rc = VbglR3ClipboardObjOpenSend(pCmdCtx, pCreateParms, phObj); 1349 1350 LogFlowFuncLeaveRC(rc); 1351 return rc; 1352 } 1353 1354 static int vbglR3ClipboardTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj) 1355 { 1356 LogFlowFuncEnter(); 1357 1358 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1359 AssertPtr(pCmdCtx); 1360 1361 int rc = VbglR3ClipboardObjCloseSend(pCmdCtx, hObj); 1362 1363 LogFlowFuncLeaveRC(rc); 1364 return rc; 1365 } 1366 1367 static int vbglR3ClipboardTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, 1368 SHCLOBJHANDLE hObj, void *pvData, uint32_t cbData, 1369 uint32_t fFlags, uint32_t *pcbRead) 1370 { 1371 LogFlowFuncEnter(); 1372 1373 PVBGLR3SHCLCMDCTX pCmdCtx = (PVBGLR3SHCLCMDCTX)pCtx->pvUser; 1374 AssertPtr(pCmdCtx); 1375 1376 RT_NOREF(fFlags); /* Not used yet. */ 1377 1378 int rc = VbglR3ClipboardObjReadSend(pCmdCtx, hObj, pvData, cbData, pcbRead); 1245 1379 1246 1380 LogFlowFuncLeaveRC(rc); … … 1275 1409 if (RT_SUCCESS(rc)) 1276 1410 { 1277 rc = SharedClipboardTransferStart(pTransfer); 1411 /* If this is a read transfer (reading data from host), set the interface to use 1412 * our VbglR3 routines here. */ 1413 if (enmDir == SHCLTRANSFERDIR_READ) 1414 { 1415 SHCLPROVIDERCREATIONCTX creationCtx; 1416 RT_ZERO(creationCtx); 1417 1418 creationCtx.Interface.pfnRootsGet = vbglR3ClipboardTransferIfaceGetRoots; 1419 1420 creationCtx.Interface.pfnListOpen = vbglR3ClipboardTransferIfaceListOpen; 1421 creationCtx.Interface.pfnListClose = vbglR3ClipboardTransferIfaceListClose; 1422 creationCtx.Interface.pfnListHdrRead = vbglR3ClipboardTransferIfaceListHdrRead; 1423 creationCtx.Interface.pfnListEntryRead = vbglR3ClipboardTransferIfaceListEntryRead; 1424 1425 creationCtx.Interface.pfnObjOpen = vbglR3ClipboardTransferIfaceObjOpen; 1426 creationCtx.Interface.pfnObjClose = vbglR3ClipboardTransferIfaceObjClose; 1427 creationCtx.Interface.pfnObjRead = vbglR3ClipboardTransferIfaceObjRead; 1428 1429 rc = SharedClipboardTransferSetInterface(pTransfer, &creationCtx); 1430 } 1431 1432 if (RT_SUCCESS(rc)) 1433 rc = SharedClipboardTransferStart(pTransfer); 1278 1434 } 1279 else 1435 1436 if (RT_FAILURE(rc)) 1280 1437 SharedClipboardTransferCtxTransferUnregister(pTransferCtx, uTransferID); 1281 1438 } … … 1300 1457 ? SHCLTRANSFERSTATUS_STARTED : SHCLTRANSFERSTATUS_ERROR, rc); 1301 1458 AssertRC(rc2); 1459 1460 if (RT_FAILURE(rc)) 1461 { 1462 SharedClipboardTransferDestroy(pTransfer); 1463 pTransfer = NULL; 1464 } 1302 1465 1303 1466 LogFlowFuncLeaveRC(rc); … … 1424 1587 pEvent->enmType = VBGLR3CLIPBOARDEVENTTYPE_URI_TRANSFER_STATUS; 1425 1588 1426 LogRel2(("Shared Clipboard: Received status % RU32 (%Rrc) for transfer ID=%RU16\n",1427 pEvent->u.TransferStatus.Report.uStatus, pEvent->u.TransferStatus.Report.rc,1589 LogRel2(("Shared Clipboard: Received status %s (rc=%Rrc) for transfer ID=%RU16\n", 1590 VBoxShClTransferStatusToStr(pEvent->u.TransferStatus.Report.uStatus), pEvent->u.TransferStatus.Report.rc, 1428 1591 pEvent->u.TransferStatus.uID)); 1429 1592 } … … 1550 1713 break; 1551 1714 } 1552 1553 #if 01554 case VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_WRITE:1555 {1556 LogFlowFunc(("VBOX_SHCL_HOST_MSG_TRANSFER_LIST_HDR_WRITE\n"));1557 1558 SHCLLISTHDR hdrList;1559 rc = SharedClipboardTransferListHdrInit(&hdrList);1560 if (RT_SUCCESS(rc))1561 {1562 rc = VBglR3ClipboardListHdrRecv(pCtx, )1563 }1564 break;1565 }1566 #endif1567 1715 1568 1716 case VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_READ: … … 1603 1751 } 1604 1752 1605 #if 01606 case VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_WRITE:1607 {1608 LogFlowFunc(("VBOX_SHCL_HOST_MSG_TRANSFER_LIST_ENTRY_WRITE\n"));1609 pEvent->enmType = VBGLR3CLIPBOARDEVENTTYPE_URI_LIST_ENTRY_WRITE;1610 break;1611 }1612 #endif1613 1614 1753 case VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_OPEN: 1615 1754 { … … 1684 1823 rc = SharedClipboardTransferObjectRead(pTransfer, hObj, pvBuf, cbToRead, &cbRead, fFlags); 1685 1824 if (RT_SUCCESS(rc)) 1686 rc = VbglR3ClipboardObjWrite (pCmdCtx, hObj, pvBuf, cbRead, NULL /* pcbWritten */);1825 rc = VbglR3ClipboardObjWriteSend(pCmdCtx, hObj, pvBuf, cbRead, NULL /* pcbWritten */); 1687 1826 1688 1827 RTMemFree(pvBuf); … … 1695 1834 } 1696 1835 1697 #if 01698 case VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_WRITE:1699 {1700 LogFlowFunc(("VBOX_SHCL_HOST_MSG_TRANSFER_OBJ_WRITE\n"));1701 break;1702 }1703 #endif1704 1705 1836 default: 1706 1837 { … … 1792 1923 } 1793 1924 1794 #if 01795 VBGLR3DECL(int) VbglR3ClipboardListHdrReadRecv(HGCMCLIENTID idClient, PSHCLLISTHANDLE phList)1796 {1797 AssertPtrReturn(phList, VERR_INVALID_POINTER);1798 1799 VBoxShClListHdrReadMsg Msg;1800 RT_ZERO(Msg);1801 1802 VBGL_HGCM_HDR_INIT(&Msg.hdr, idClient,1803 VBOX_SHCL_GUEST_FN_LIST_HDR_READ, VBOX_SHCL_CPARMS_LIST_HDR_READ);1804 1805 Msg.uContext.SetUInt32(0); /** @todo Not used yet. */1806 Msg.uHandle.SetUInt64(0);1807 1808 int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg));1809 if (RT_SUCCESS(rc))1810 {1811 Msg.uHandle.GetUInt32(phList);1812 }1813 1814 LogFlowFuncLeaveRC(rc);1815 return rc;1816 }1817 1818 1925 /** 1819 * Sends a list headerto the host.1926 * Reports (advertises) guest clipboard formats to the host. 1820 1927 * 1821 1928 * @returns VBox status code. 1822 * @param idClient The client id returned by VbglR3ClipboardConnect(). 1823 * @param hList List handle to send header for. 1824 * @param pListHdr List header to send. 1929 * @param pCtx The command context returned by VbglR3ClipboardConnectEx(). 1930 * @param pFormats The formats to report. 1825 1931 */ 1826 VBGLR3DECL(int) VbglR3ClipboardListHdrSend(HGCMCLIENTID idClient, 1827 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr) 1828 { 1829 AssertPtrReturn(pListHdr, VERR_INVALID_POINTER); 1830 1831 VBoxShClListHdrMsg Msg; 1832 RT_ZERO(Msg); 1833 1834 VBGL_HGCM_HDR_INIT(&Msg.hdr, idClient, 1835 VBOX_SHCL_GUEST_FN_LIST_HDR_WRITE, VBOX_SHCL_CPARMS_LIST_HDR); 1836 1837 Msg.uContext.SetUInt32(0); /** @todo Not used yet. */ 1838 Msg.fFeatures.SetUInt32(pListHdr->fFeatures); 1839 Msg.cTotalObjects.SetUInt64(pListHdr->cTotalObjects); 1840 Msg.cbTotalSize.SetUInt64(pListHdr->cbTotalSize); 1841 Msg.enmCompression.SetUInt32(pListHdr->enmCompression); 1842 Msg.enmChecksumType.SetUInt32(RTDIGESTTYPE_INVALID); 1843 1844 int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg)); 1845 1846 LogFlowFuncLeaveRC(rc); 1847 return rc; 1848 } 1849 1850 /** 1851 * Sends a list entry to the host. 1852 * 1853 * @returns IPRT status code. 1854 * @param idClient The client id returned by VbglR3ClipboardConnect() 1855 * @param hList List handle to send entry for. 1856 * @param pListEntry List entry to send. 1857 */ 1858 VBGLR3DECL(int) VbglR3ClipboardSendListEntryWrite(HGCMCLIENTID idClient, 1859 SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry) 1860 { 1861 AssertPtrReturn(pListEntry, VERR_INVALID_POINTER); 1862 1863 VBoxShClListEntryWriteMsg Msg; 1864 RT_ZERO(Msg); 1865 1866 VBGL_HGCM_HDR_INIT(&Msg.hdr, idClient, 1867 VBOX_SHCL_GUEST_FN_LIST_ENTRY_WRITE, VBOX_SHCL_CPARMS_LIST_ENTRY_WRITE); 1868 1869 Msg.uContext.SetUInt32(0); /** @todo Not used yet. */ 1870 Msg.uHandle.SetUInt64(hList); 1871 Msg.fInfo.SetUInt32(pListEntry->fInfo); 1872 Msg.cbInfo.SetUInt32(pListEntry->cbInfo); 1873 Msg.pvInfo.SetPtr(pListEntry->pvInfo, pListEntry->cbInfo); 1874 1875 int rc = VbglR3HGCMCall(&Msg.hdr, sizeof(Msg)); 1876 1877 LogFlowFuncLeaveRC(rc); 1878 return rc; 1879 } 1880 #endif 1881 1882 /** 1883 * Sends (reports) guest clipboard formats to the host. 1884 * 1885 * @returns VBox status code. 1886 * @param pCtx The command context returned by VbglR3ClipboardConnect(). 1887 * @param pFormats The formats to send (report). 1888 */ 1889 VBGLR3DECL(int) VbglR3ClipboardFormatsSend(PVBGLR3SHCLCMDCTX pCtx, PSHCLFORMATDATA pFormats) 1890 { 1932 VBGLR3DECL(int) VbglR3ClipboardFormatsReportEx(PVBGLR3SHCLCMDCTX pCtx, PSHCLFORMATDATA pFormats) 1933 { 1934 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 1935 AssertPtrReturn(pFormats, VERR_INVALID_POINTER); 1936 1891 1937 VBoxShClFormatsMsg Msg; 1892 1938 1893 1939 int rc; 1940 1941 LogFlowFunc(("uFormats=0x%x\n", pFormats->uFormats)); 1894 1942 1895 1943 if (pCtx->uProtocolVer == 0) … … 1922 1970 * @returns VBox status code. 1923 1971 * @param idClient The client id returned by VbglR3ClipboardConnect(). 1924 * @param fFormats The formats to advertise.1972 * @param fFormats The formats to report. 1925 1973 */ 1926 VBGLR3DECL(int) VbglR3ClipboardReportFormats(HGCMCLIENTID idClient, uint32_t fFormats) 1927 { 1974 VBGLR3DECL(int) VbglR3ClipboardFormatsReport(HGCMCLIENTID idClient, uint32_t fFormats) 1975 { 1976 AssertReturn(idClient, VERR_INVALID_PARAMETER); 1977 AssertReturn(fFormats, VERR_INVALID_PARAMETER); 1978 1928 1979 VBoxShClFormatsMsg Msg; 1929 1980 … … 1948 1999 VBGLR3DECL(int) VbglR3ClipboardWriteData(HGCMCLIENTID idClient, uint32_t fFormat, void *pv, uint32_t cb) 1949 2000 { 2001 AssertReturn (idClient, VERR_INVALID_PARAMETER); 2002 AssertPtrReturn(pv, VERR_INVALID_POINTER); 2003 AssertReturn (cb, VERR_INVALID_PARAMETER); 2004 1950 2005 VBoxShClWriteDataMsg Msg; 1951 2006 RT_ZERO(Msg); … … 1970 2025 * 1971 2026 * @returns VBox status code. 1972 * @param pCtx The command context returned by VbglR3ClipboardConnect ().2027 * @param pCtx The command context returned by VbglR3ClipboardConnectEx(). 1973 2028 * @param pData Clipboard data to send. 1974 2029 */ 1975 2030 VBGLR3DECL(int) VbglR3ClipboardWriteDataEx(PVBGLR3SHCLCMDCTX pCtx, PSHCLDATABLOCK pData) 1976 2031 { 2032 AssertPtrReturn(pCtx, VERR_INVALID_POINTER); 2033 AssertPtrReturn(pData, VERR_INVALID_POINTER); 2034 1977 2035 int rc; 1978 2036 … … 2012 2070 VBGLR3DECL(int) VbglR3ClipboardWriteError(HGCMCLIENTID idClient, int rcErr) 2013 2071 { 2072 AssertReturn(idClient, VERR_INVALID_PARAMETER); 2073 2014 2074 VBoxShClWriteErrorMsg Msg; 2015 2075 RT_ZERO(Msg); -
trunk/src/VBox/Additions/common/VBoxService/VBoxServiceClipboard-os2.cpp
r80847 r80990 611 611 } 612 612 VGSvcVerbose(4, "clipboard: reporting fFormats=%#x\n", fFormats); 613 VbglR3Clipboard ReportFormats(g_u32ClientId, fFormats);613 VbglR3ClipboardFormatsReport(g_u32ClientId, fFormats); 614 614 } 615 615 … … 658 658 g_fEmptyClipboard = true; 659 659 VGSvcVerbose(3, "Reporting empty clipboard\n"); 660 VbglR3Clipboard ReportFormats(g_u32ClientId, 0);660 VbglR3ClipboardFormatsReport(g_u32ClientId, 0); 661 661 } 662 662 } … … 681 681 g_fEmptyClipboard = true; 682 682 VGSvcVerbose(3, "Reporting empty clipboard\n"); 683 VbglR3Clipboard ReportFormats(g_u32ClientId, 0);683 VbglR3ClipboardFormatsReport(g_u32ClientId, 0); 684 684 685 685 vgsvcClipboardOs2PollViewer();
Note:
See TracChangeset
for help on using the changeset viewer.