Changeset 79299 in vbox for trunk/src/VBox
- Timestamp:
- Jun 24, 2019 10:18:19 AM (6 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp
r79271 r79299 347 347 SHAREDCLIPBOARDPROVIDERCREATIONCTX creationCtx; 348 348 RT_ZERO(creationCtx); 349 creationCtx.enmSource = SHAREDCLIPBOARDPROVIDERSOURCE_VBGLR3; 349 creationCtx.enmSource = SHAREDCLIPBOARDURIPROVIDERSOURCE_VBGLR3; 350 creationCtx.enmDir = SHAREDCLIPBOARDURITRANSFERDIR_READ; 350 351 creationCtx.u.VbglR3.uClientID = pCtx->u32ClientID; 351 352 … … 469 470 SHAREDCLIPBOARDPROVIDERCREATIONCTX creationCtx; 470 471 RT_ZERO(creationCtx); 471 creationCtx.enmSource = SHAREDCLIPBOARDPROVIDERSOURCE_VBGLR3; 472 creationCtx.enmSource = SHAREDCLIPBOARDURIPROVIDERSOURCE_VBGLR3; 473 creationCtx.enmDir = SHAREDCLIPBOARDURITRANSFERDIR_WRITE; 472 474 creationCtx.u.VbglR3.uClientID = pCtx->u32ClientID; 473 475 -
trunk/src/VBox/GuestHost/SharedClipboard/ClipboardDataObjectImpl-win.cpp
r79267 r79299 121 121 m_enmStatus = Initialized; 122 122 123 int rc2 = RTSemEventCreate(&m_EventMetaDataComplete); 124 AssertRC(rc2); 125 123 126 AssertPtr(m_pTransfer->pProvider); 124 127 m_pTransfer->pProvider->AddRef(); … … 130 133 VBoxClipboardWinDataObject::~VBoxClipboardWinDataObject(void) 131 134 { 135 RTSemEventDestroy(m_EventMetaDataComplete); 136 132 137 if (m_pTransfer->pProvider) 133 138 m_pTransfer->pProvider->Release(); … … 218 223 219 224 /** 220 * Creates a FILEGROUPDESCRIPTOR object from a given Shared Clipboard URI list and stores 221 * the result into an HGLOBAL object. 225 * Creates a FILEGROUPDESCRIPTOR object from a given URI transfer and stores the result into an HGLOBAL object. 222 226 * 223 227 * @returns VBox status code. 224 * @param URIList URI list to create objectfor.228 * @param pTransfer URI transfer to create file grou desciprtor for. 225 229 * @param fUnicode Whether the FILEGROUPDESCRIPTOR object shall contain Unicode data or not. 226 230 * @param phGlobal Where to store the allocated HGLOBAL object on success. 227 231 */ 228 int VBoxClipboardWinDataObject::createFileGroupDescriptorFrom URIList(const SharedClipboardURIList &URIList,229 bool fUnicode, HGLOBAL *phGlobal)230 { 231 Assert Return(URIList.GetRootCount(), VERR_INVALID_PARAMETER);232 AssertPtrReturn(phGlobal, 232 int VBoxClipboardWinDataObject::createFileGroupDescriptorFromTransfer(PSHAREDCLIPBOARDURITRANSFER pTransfer, 233 bool fUnicode, HGLOBAL *phGlobal) 234 { 235 AssertPtrReturn(pTransfer, VERR_INVALID_POINTER); 236 AssertPtrReturn(phGlobal, VERR_INVALID_POINTER); 233 237 234 238 LogFlowFuncEnter(); 239 240 SharedClipboardURIList *pURIList = SharedClipboardURITransferGetList(pTransfer); 241 if (!pURIList) 242 return VERR_WRONG_ORDER; 235 243 236 244 const size_t cbFileGroupDescriptor = fUnicode ? sizeof(FILEGROUPDESCRIPTORW) : sizeof(FILEGROUPDESCRIPTORA); 237 245 const size_t cbFileDescriptor = fUnicode ? sizeof(FILEDESCRIPTORW) : sizeof(FILEDESCRIPTORA); 238 246 239 const UINT cItems = (UINT) URIList.GetRootCount(); /** @todo UINT vs. uint64_t */247 const UINT cItems = (UINT)pURIList->GetRootCount(); /** @todo UINT vs. uint64_t */ 240 248 const size_t cbFGD = cbFileGroupDescriptor + (cbFileDescriptor * (cItems - 1)); 241 249 … … 258 266 RT_BZERO(pFD, cbFileDescriptor); 259 267 260 const SharedClipboardURIObject *pObj = URIList.At(i);268 const SharedClipboardURIObject *pObj = pURIList->At(i); 261 269 AssertPtr(pObj); 262 270 const char *pszFile = pObj->GetSourcePathAbs().c_str(); … … 373 381 HRESULT hr = DV_E_FORMATETC; /* Play safe. */ 374 382 375 LogRel2((" Clipboard: cfFormat=%RI16, sFormat=%s, tyMed=%RU32, dwAspect=%RU32 -> lIndex=%u\n",383 LogRel2(("Shared Clipboard: cfFormat=%RI16, sFormat=%s, tyMed=%RU32, dwAspect=%RU32 -> lIndex=%u\n", 376 384 pThisFormat->cfFormat, VBoxClipboardWinDataObject::ClipboardFormatToString(pFormatEtc->cfFormat), 377 385 pThisFormat->tymed, pThisFormat->dwAspect, lIndex)); … … 391 399 #endif 392 400 { 393 break; 394 #if 0 395 const bool fUnicode = lIndex == FormatIndex_FileDescriptorW; 396 397 LogFlowFunc(("FormatIndex_FileDescriptor%s\n", fUnicode ? "W" : "A")); 398 399 int rc = SharedClipboardURITransferMetaDataRead(m_pTransfer, NULL /* cbRead */); 401 int rc = SharedClipboardURITransferPrepare(m_pTransfer); 400 402 if (RT_SUCCESS(rc)) 401 403 { 402 const SharedClipboardURIList *pURIList = SharedClipboardURITransferGetList(m_pTransfer); 403 if ( pURIList 404 && !pURIList->IsEmpty()) 404 const bool fUnicode = lIndex == FormatIndex_FileDescriptorW; 405 406 LogFlowFunc(("FormatIndex_FileDescriptor%s\n", fUnicode ? "W" : "A")); 407 408 /* Register needed callbacks so that we can wait for the meta data to arrive here. */ 409 SHAREDCLIPBOARDURITRANSFERCALLBACKS Callbacks; 410 RT_ZERO(Callbacks); 411 Callbacks.pfnMetaDataComplete = VBoxClipboardWinDataObject::onMetaDataCompleteCallback; 412 413 SharedClipboardURITransferSetCallbacks(m_pTransfer, &Callbacks); 414 415 /* Start the transfer asynchronously in a separate thread. */ 416 rc = SharedClipboardURITransferRun(m_pTransfer, true /* fAsync */); 417 if (RT_SUCCESS(rc)) 405 418 { 406 HGLOBAL hGlobal; 407 rc = createFileGroupDescriptorFromURIList(*pURIList, fUnicode, &hGlobal); 419 /* Wait for the meta data to arrive. */ 420 LogFlowFunc(("Waiting for meta data to arrive ...\n")); 421 rc = RTSemEventWait(m_EventMetaDataComplete, 30 * 1000 /* 30s timeout */); 408 422 if (RT_SUCCESS(rc)) 409 423 { 410 pMedium->tymed = TYMED_HGLOBAL; 411 pMedium->hGlobal = hGlobal; 412 /* Note: hGlobal now is being owned by pMedium / the caller. */ 413 414 hr = S_OK; 424 const SharedClipboardURIList *pURIList = SharedClipboardURITransferGetList(m_pTransfer); 425 if ( pURIList 426 && !pURIList->IsEmpty()) 427 { 428 HGLOBAL hGlobal; 429 rc = createFileGroupDescriptorFromTransfer(m_pTransfer, fUnicode, &hGlobal); 430 if (RT_SUCCESS(rc)) 431 { 432 pMedium->tymed = TYMED_HGLOBAL; 433 pMedium->hGlobal = hGlobal; 434 /* Note: hGlobal now is being owned by pMedium / the caller. */ 435 436 hr = S_OK; 437 } 438 } 415 439 } 416 440 } 417 441 } 418 #endif419 442 break; 420 443 } … … 452 475 453 476 if (hr == DV_E_FORMATETC) 454 LogRel((" Clipboard: Error handling format\n"));477 LogRel(("Shared Clipboard: Error handling format\n")); 455 478 456 479 LogFlowFunc(("hr=%Rhrc\n", hr)); … … 689 712 //&& pFormatEtc->dwAspect == m_pFormatEtc[i].dwAspect) 690 713 { 691 LogRel3((" Clipboard: Format found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32, ulIndex=%RU32\n",714 LogRel3(("Shared Clipboard: Format found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32, ulIndex=%RU32\n", 692 715 pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxClipboardWinDataObject::ClipboardFormatToString(m_pFormatEtc[i].cfFormat), 693 716 pFormatEtc->dwAspect, i)); … … 698 721 } 699 722 700 LogRel3((" Clipboard: Format NOT found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32\n",723 LogRel3(("Shared Clipboard: Format NOT found: tyMed=%RI32, cfFormat=%RI16, sFormats=%s, dwAspect=%RI32\n", 701 724 pFormatEtc->tymed, pFormatEtc->cfFormat, VBoxClipboardWinDataObject::ClipboardFormatToString(pFormatEtc->cfFormat), 702 725 pFormatEtc->dwAspect)); … … 721 744 } 722 745 746 /* static */ 747 DECLCALLBACK(void) VBoxClipboardWinDataObject::onMetaDataCompleteCallback(PSHAREDCLIPBOARDURITRANSFERCALLBACKDATA pData) 748 { 749 VBoxClipboardWinDataObject *pThis = (VBoxClipboardWinDataObject *)pData->pvUser; 750 751 LogFlowFunc(("pThis=%p\n", pThis)); 752 753 int rc2 = RTSemEventSignal(pThis->m_EventMetaDataComplete); 754 AssertRC(rc2); 755 } 756 -
trunk/src/VBox/GuestHost/SharedClipboard/ClipboardProvider-HostService.cpp
r79267 r79299 51 51 } 52 52 53 int SharedClipboardProviderHostService::Prepare(void) 54 { 55 LogFlowFuncEnter(); 56 57 /*return vboxSvcClipboardReportMsg(, 58 VBOX_SHARED_CLIPBOARD_HOST_MSG_READ_DATA, );*/ 59 return 0; 60 } 61 53 62 int SharedClipboardProviderHostService::ReadDataHdr(PVBOXCLIPBOARDDATAHDR *ppDataHdr) 54 63 { 55 RT_NOREF(ppDataHdr); 64 AssertPtrReturn(ppDataHdr, VERR_INVALID_POINTER); 65 66 LogFlowFuncEnter(); 67 56 68 /*return eventWait(VBOX_SHARED_CLIPBOARD_GUEST_FN_WRITE_DATA_HDR, m_Callbacks.pfnReadDataHdr, m_uTimeoutMs, 57 69 (void **)ppDataHdr);*/ … … 61 73 int SharedClipboardProviderHostService::WriteDataHdr(const PVBOXCLIPBOARDDATAHDR pDataHdr) 62 74 { 63 RT_NOREF(pDataHdr);75 AssertPtrReturn(pDataHdr, VERR_INVALID_POINTER); 64 76 65 77 LogFlowFuncEnter(); -
trunk/src/VBox/GuestHost/SharedClipboard/ClipboardProvider.cpp
r79267 r79299 148 148 SharedClipboardProvider::SharedClipboardProvider(void) 149 149 : m_cRefs(0) 150 , m_enmDir(SHAREDCLIPBOARDURITRANSFERDIR_UNKNOWN) 150 151 , m_uTimeoutMs(30 * 1000 /* 30s timeout by default */) 151 152 { … … 178 179 { 179 180 #ifdef VBOX_WITH_SHARED_CLIPBOARD_GUEST 180 case SHAREDCLIPBOARD PROVIDERSOURCE_VBGLR3:181 case SHAREDCLIPBOARDURIPROVIDERSOURCE_VBGLR3: 181 182 pProvider = new SharedClipboardProviderVbglR3(pCtx->u.VbglR3.uClientID); 182 183 break; … … 184 185 185 186 #ifdef VBOX_WITH_SHARED_CLIPBOARD_HOST 186 case SHAREDCLIPBOARD PROVIDERSOURCE_HOSTSERVICE:187 case SHAREDCLIPBOARDURIPROVIDERSOURCE_HOSTSERVICE: 187 188 pProvider = new SharedClipboardProviderHostService(pCtx->u.HostService.pArea); 188 189 break; … … 245 246 * Stubs. 246 247 */ 248 249 int SharedClipboardProvider::Prepare(void) 250 { 251 return VINF_SUCCESS; 252 } 247 253 248 254 int SharedClipboardProvider::ReadDataHdr(PVBOXCLIPBOARDDATAHDR *ppDataHdr) -
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-uri.cpp
r79276 r79299 637 637 pTransfer->cbUser = 0; 638 638 639 RT_ZERO(pTransfer->Callbacks); 640 639 641 pTransfer->pURIList = new SharedClipboardURIList(); 640 642 if (!pTransfer->pURIList) … … 708 710 LogFlowFuncEnter(); 709 711 710 AssertPtrReturn(pTransfer->State.pMeta, VERR_WRONG_ORDER);711 AssertPtrReturn(pTransfer->pURIList, VERR_WRONG_ORDER);712 713 PSHAREDCLIPBOARDMETADATA pMeta = pTransfer->State.pMeta;714 AssertPtrReturn(pMeta, VERR_WRONG_ORDER);715 716 712 int rc; 717 713 718 714 LogFlowFunc(("enmDir=%RU32\n", pTransfer->State.enmDir)); 719 715 716 if (pTransfer->Callbacks.pfnTransferPrepare) 717 { 718 SHAREDCLIPBOARDURITRANSFERCALLBACKDATA callbackData = { pTransfer, pTransfer->Callbacks.pvUser }; 719 pTransfer->Callbacks.pfnTransferPrepare(&callbackData); 720 } 721 720 722 if (pTransfer->State.enmDir == SHAREDCLIPBOARDURITRANSFERDIR_READ) 721 723 { 724 rc = pTransfer->pProvider->Prepare(); 725 #if 0 722 726 rc = pTransfer->pURIList->SetFromURIData(SharedClipboardMetaDataRaw(pMeta), 723 727 SharedClipboardMetaDataGetUsed(pMeta), 724 728 SHAREDCLIPBOARDURILIST_FLAGS_NONE); 725 729 /** @todo Verify pvMetaFmt. */ 730 #endif 726 731 727 732 sharedClipboardURITransferMetaDataDestroyInternal(pTransfer); … … 729 734 else if (pTransfer->State.enmDir == SHAREDCLIPBOARDURITRANSFERDIR_WRITE) 730 735 { 736 AssertPtrReturn(pTransfer->State.pMeta, VERR_WRONG_ORDER); 737 AssertPtrReturn(pTransfer->pURIList, VERR_WRONG_ORDER); 738 739 const PSHAREDCLIPBOARDMETADATA pMeta = pTransfer->State.pMeta; 740 731 741 rc = pTransfer->pURIList->AppendURIPathsFromList((char *)SharedClipboardMetaDataRaw(pMeta), 732 742 SharedClipboardMetaDataGetUsed(pMeta), … … 947 957 * @returns VBox status code. 948 958 * @param pTransfer URI clipboard transfer to set callbacks for. 949 * @param pCallbacks Pointer to callback table to set. Specify NULL to unset existing callbacks. 950 */ 951 void SharedClipboardURITransferSetCallbacks(PSHAREDCLIPBOARDURITRANSFER pTransfer, PSHAREDCLIPBOARDURITRANSFERCALLBACKS pCallbacks) 959 * @param pCallbacks Pointer to callback table to set. 960 */ 961 void SharedClipboardURITransferSetCallbacks(PSHAREDCLIPBOARDURITRANSFER pTransfer, 962 PSHAREDCLIPBOARDURITRANSFERCALLBACKS pCallbacks) 952 963 { 953 964 AssertPtrReturnVoid(pTransfer); 954 /* pCallbacks might be NULL to unset callbacks. */965 AssertPtrReturnVoid(pCallbacks); 955 966 956 967 LogFlowFunc(("pCallbacks=%p\n", pCallbacks)); 957 968 958 if (pCallbacks) 959 { 960 pTransfer->Callbacks = *pCallbacks; 961 } 962 else 963 RT_ZERO(pTransfer->Callbacks); 969 #define SET_CALLBACK(a_pfnCallback) \ 970 if (pCallbacks->a_pfnCallback) \ 971 pTransfer->Callbacks.a_pfnCallback = pCallbacks->a_pfnCallback 972 973 SET_CALLBACK(pfnTransferPrepare); 974 SET_CALLBACK(pfnTransferStarted); 975 SET_CALLBACK(pfnMetaDataComplete); 976 SET_CALLBACK(pfnTransferCanceled); 977 SET_CALLBACK(pfnTransferError); 978 SET_CALLBACK(pfnTransferStarted); 979 980 #undef SET_CALLBACK 964 981 } 965 982 … … 1033 1050 1034 1051 LogFlowFuncEnter(); 1052 1053 if (pTransfer->Callbacks.pfnTransferStarted) 1054 { 1055 SHAREDCLIPBOARDURITRANSFERCALLBACKDATA callbackData = { pTransfer, pTransfer->Callbacks.pvUser }; 1056 pTransfer->Callbacks.pfnTransferStarted(&callbackData); 1057 } 1035 1058 1036 1059 int rc = SharedClipboardURITransferMetaDataRead(pTransfer, NULL /* pcbRead */); … … 1234 1257 { 1235 1258 AssertPtrReturn(pTransfer, VERR_INVALID_POINTER); 1259 /* pcbRead is optional. */ 1236 1260 1237 1261 LogFlowFuncEnter(); … … 1250 1274 if (pvMeta) 1251 1275 { 1276 AssertPtr(pTransfer->State.pHeader); 1252 1277 uint32_t cbMetaToRead = pTransfer->State.pHeader->cbMeta; 1253 1278 while (cbMetaToRead) … … 1273 1298 if (pcbRead) 1274 1299 *pcbRead = cbReadTotal; 1300 1301 if (pTransfer->Callbacks.pfnMetaDataComplete) 1302 { 1303 SHAREDCLIPBOARDURITRANSFERCALLBACKDATA callbackData = { pTransfer, pTransfer->Callbacks.pvUser }; 1304 pTransfer->Callbacks.pfnMetaDataComplete(&callbackData); 1305 } 1275 1306 } 1276 1307 } … … 1293 1324 { 1294 1325 AssertPtrReturn(pTransfer, VERR_INVALID_POINTER); 1326 /* pcbWritten is optional. */ 1295 1327 1296 1328 AssertPtr(pTransfer->pProvider); … … 1329 1361 if (pcbWritten) 1330 1362 *pcbWritten = cbWrittenTotal; 1363 1364 if (pTransfer->Callbacks.pfnMetaDataComplete) 1365 { 1366 SHAREDCLIPBOARDURITRANSFERCALLBACKDATA callbackData = { pTransfer, pTransfer->Callbacks.pvUser }; 1367 pTransfer->Callbacks.pfnMetaDataComplete(&callbackData); 1368 } 1331 1369 } 1332 1370 } … … 1493 1531 LogFlowFuncEnter(); 1494 1532 1533 if (pTransfer->Callbacks.pfnTransferStarted) 1534 { 1535 SHAREDCLIPBOARDURITRANSFERCALLBACKDATA callbackData = { pTransfer, pTransfer->Callbacks.pvUser }; 1536 pTransfer->Callbacks.pfnTransferStarted(&callbackData); 1537 } 1538 1495 1539 int rc = SharedClipboardURITransferMetaDataWrite(pTransfer, NULL /* pcbWritten */); 1496 1540 if (RT_SUCCESS(rc)) -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-uri.cpp
r79276 r79299 97 97 98 98 /** 99 * Reads an URI data header from HGCM service parameters. 100 * 101 * @returns VBox status code. 102 * @param cParms Number of HGCM parameters supplied in \a paParms. 103 * @param paParms Array of HGCM parameters. 104 * @param pDataHdr Pointer to data to write the the HGCM parameters. 105 */ 106 int VBoxSvcClipboardURIWriteDataHdr(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDATAHDR pDataHdr) 107 { 108 int rc; 109 110 if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_READ_DATA_HDR) 111 { 112 /** @todo Set pvMetaFmt + cbMetaFmt. */ 113 /** @todo Calculate header checksum. */ 114 115 /* Note: Context ID (paParms[0]) not used yet. */ 116 HGCMSvcSetU32(&paParms[1], pDataHdr->uFlags); 117 HGCMSvcSetU32(&paParms[2], pDataHdr->uScreenId); 118 HGCMSvcSetU64(&paParms[3], pDataHdr->cbTotal); 119 HGCMSvcSetU32(&paParms[4], pDataHdr->cbMeta); 120 HGCMSvcSetU32(&paParms[5], pDataHdr->cbMetaFmt); 121 HGCMSvcSetPv (&paParms[6], pDataHdr->pvMetaFmt, pDataHdr->cbMetaFmt); 122 HGCMSvcSetU64(&paParms[7], pDataHdr->cObjects); 123 HGCMSvcSetU32(&paParms[8], pDataHdr->enmCompression); 124 HGCMSvcSetU32(&paParms[9], (uint32_t)pDataHdr->enmChecksumType); 125 HGCMSvcSetU32(&paParms[10], pDataHdr->cbChecksum); 126 HGCMSvcSetPv (&paParms[11], pDataHdr->pvChecksum, pDataHdr->cbChecksum); 127 128 LogFlowFunc(("fFlags=0x%x, cbMeta=%RU32, cbTotalSize=%RU64, cObj=%RU64\n", 129 pDataHdr->uFlags, pDataHdr->cbMeta, pDataHdr->cbTotal, pDataHdr->cObjects)); 130 131 rc = VINF_SUCCESS; 132 } 133 else 134 rc = VERR_INVALID_PARAMETER; 135 136 LogFlowFuncLeaveRC(rc); 137 return rc; 138 } 139 140 /** 99 141 * Reads an URI data chunk from HGCM service parameters. 100 142 * … … 133 175 134 176 /** 177 * Writes an URI data chunk to HGCM service parameters. 178 * 179 * @returns VBox status code. 180 * @param cParms Number of HGCM parameters supplied in \a paParms. 181 * @param paParms Array of HGCM parameters. 182 * @param pDataChunk Pointer to data to write the the HGCM parameters. 183 */ 184 int VBoxSvcClipboardURIWriteDataChunk(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDATACHUNK pDataChunk) 185 { 186 int rc; 187 188 if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_READ_DATA_CHUNK) 189 { 190 /** @todo Calculate chunk checksum. */ 191 192 /* Note: Context ID (paParms[0]) not used yet. */ 193 HGCMSvcSetU32(&paParms[1], pDataChunk->cbData); 194 HGCMSvcSetPv (&paParms[2], pDataChunk->pvData, pDataChunk->cbData); 195 HGCMSvcSetU32(&paParms[3], pDataChunk->cbChecksum); 196 HGCMSvcSetPv (&paParms[4], pDataChunk->pvChecksum, pDataChunk->cbChecksum); 197 198 rc = VINF_SUCCESS; 199 } 200 else 201 rc = VERR_INVALID_PARAMETER; 202 203 LogFlowFuncLeaveRC(rc); 204 return rc; 205 } 206 207 /** 135 208 * Reads an URI directory entry from HGCM service parameters. 136 209 * … … 169 242 170 243 /** 244 * Writes an URI directory entry to HGCM service parameters. 245 * 246 * @returns VBox status code. 247 * @param cParms Number of HGCM parameters supplied in \a paParms. 248 * @param paParms Array of HGCM parameters. 249 * @param pDirData Pointer to data to write the the HGCM parameters. 250 */ 251 int VBoxSvcClipboardURIWriteDir(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDDIRDATA pDirData) 252 { 253 int rc; 254 255 if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_READ_DIR) 256 { 257 /* Note: Context ID (paParms[0]) not used yet. */ 258 HGCMSvcSetU32(&paParms[1], pDirData->cbPath); 259 HGCMSvcSetPv (&paParms[2], pDirData->pszPath, pDirData->cbPath); 260 HGCMSvcSetU32(&paParms[3], pDirData->fMode); 261 262 rc = VINF_SUCCESS; 263 } 264 else 265 rc = VERR_INVALID_PARAMETER; 266 267 LogFlowFuncLeaveRC(rc); 268 return rc; 269 } 270 271 /** 171 272 * Reads an URI file header from HGCM service parameters. 172 273 * … … 204 305 205 306 /** 307 * Writes an URI file header to HGCM service parameters. 308 * 309 * @returns VBox status code. 310 * @param cParms Number of HGCM parameters supplied in \a paParms. 311 * @param paParms Array of HGCM parameters. 312 * @param pFileHdr Pointer to data to write the the HGCM parameters. 313 */ 314 int VBoxSvcClipboardURIWriteFileHdr(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDFILEHDR pFileHdr) 315 { 316 int rc; 317 318 if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_READ_FILE_HDR) 319 { 320 /* Note: Context ID (paParms[0]) not used yet. */ 321 HGCMSvcSetU32(&paParms[1], pFileHdr->cbFilePath); 322 HGCMSvcSetPv (&paParms[2], pFileHdr->pszFilePath, pFileHdr->cbFilePath); 323 HGCMSvcSetU32(&paParms[3], pFileHdr->fFlags); 324 HGCMSvcSetU32(&paParms[4], pFileHdr->fMode); 325 HGCMSvcSetU64(&paParms[5], pFileHdr->cbSize); 326 327 rc = VINF_SUCCESS; 328 } 329 else 330 rc = VERR_INVALID_PARAMETER; 331 332 LogFlowFuncLeaveRC(rc); 333 return rc; 334 } 335 336 /** 206 337 * Reads an URI file data chunk from HGCM service parameters. 207 338 * … … 227 358 228 359 LogFlowFunc(("pvData=0x%p, cbData=%RU32\n", pFileData->pvData, pFileData->cbData)); 360 } 361 else 362 rc = VERR_INVALID_PARAMETER; 363 364 LogFlowFuncLeaveRC(rc); 365 return rc; 366 } 367 368 /** 369 * Writes an URI file data chunk to HGCM service parameters. 370 * 371 * @returns VBox status code. 372 * @param cParms Number of HGCM parameters supplied in \a paParms. 373 * @param paParms Array of HGCM parameters. 374 * @param pFileData Pointer to data to write the the HGCM parameters. 375 */ 376 int VBoxSvcClipboardURIWriteFileData(uint32_t cParms, VBOXHGCMSVCPARM paParms[], PVBOXCLIPBOARDFILEDATA pFileData) 377 { 378 int rc; 379 380 if (cParms == VBOX_SHARED_CLIPBOARD_CPARMS_READ_FILE_DATA) 381 { 382 /* Note: Context ID (paParms[0]) not used yet. */ 383 HGCMSvcSetU32(&paParms[1], pFileData->cbData); 384 HGCMSvcSetPv (&paParms[2], pFileData->pvData, pFileData->cbData); 385 HGCMSvcSetU32(&paParms[3], pFileData->cbChecksum); 386 HGCMSvcSetPv (&paParms[4], pFileData->pvChecksum, pFileData->cbChecksum); 387 388 rc = VINF_SUCCESS; 229 389 } 230 390 else … … 293 453 } 294 454 295 bool f DispatchToProvider = false; /* Whether to (also) dispatch the HGCM data to the transfer provider. */455 bool fWriteToProvider = false; /* Whether to (also) dispatch the HGCM data to the transfer provider. */ 296 456 297 457 int rc = VERR_INVALID_PARAMETER; /* Play safe. */ … … 597 757 } 598 758 599 if (f DispatchToProvider)759 if (fWriteToProvider) 600 760 rc = VINF_SUCCESS; 601 761 602 762 if (RT_SUCCESS(rc)) 603 763 { 604 if (f DispatchToProvider)764 if (fWriteToProvider) 605 765 { 606 766 SHAREDCLIPBOARDPROVIDERWRITEPARMS writeParms; -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp
r79269 r79299 128 128 * @param pCtx Clipboard context to use. 129 129 * @param fFormat Format to receive data in. 130 * @param uTimeoutMs Timeout (in ms). Specify 0 if no waiting is required. 130 * @param uTimeoutMs Timeout (in ms) to wait until the render event has been triggered. 131 * Specify 0 if no waiting is required. 131 132 */ 132 133 static int vboxClipboardWinRequestData(PVBOXCLIPBOARDCONTEXT pCtx, VBOXCLIPBOARDFORMAT fFormat, … … 328 329 { 329 330 rc = VBoxClipboardWinURIAnnounce(pWinCtx, &pCtx->pClientData->URI, pTransfer); 330 if (RT_SUCCESS(rc)) 331 { 332 rc = vboxClipboardWinRequestData(pCtx, fFormats, 0 /* Waiting not required */); /** FIX !!!!!!!!!!!! NEEDS TO GO INTO IDATAOBJECT GetData() !!!! */ 333 } 331 332 /* Note: The actual requesting + retrieving of data will be done in the IDataObject implementation 333 (ClipboardDataObjectImpl::GetData()). */ 334 334 } 335 335 else -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r79275 r79299 638 638 SHAREDCLIPBOARDPROVIDERCREATIONCTX creationCtx; 639 639 RT_ZERO(creationCtx); 640 creationCtx.enmSource = SHAREDCLIPBOARDPROVIDERSOURCE_HOSTSERVICE; 640 creationCtx.enmSource = SHAREDCLIPBOARDURIPROVIDERSOURCE_HOSTSERVICE; 641 creationCtx.enmDir = SHAREDCLIPBOARDURITRANSFERDIR_READ; 641 642 creationCtx.u.HostService.pArea = pTransfer->pArea; 642 643
Note:
See TracChangeset
for help on using the changeset viewer.