Changeset 81229 in vbox for trunk/src/VBox/HostServices/SharedClipboard
- Timestamp:
- Oct 11, 2019 2:33:25 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 133917
- Location:
- trunk/src/VBox/HostServices/SharedClipboard
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
r81212 r81229 200 200 int shclSvcTransferStop(PSHCLCLIENT pClient, PSHCLTRANSFER pTransfer); 201 201 bool shclSvcTransferMsgIsAllowed(uint32_t uMode, uint32_t uMsg); 202 void shclSvcClientTransfersReset(PSHCLCLIENT pClient); 202 203 #endif /* VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS */ 203 204 -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r81223 r81229 58 58 *********************************************************************************************************************************/ 59 59 60 /** 61 * Resets all transfers of a Shared Clipboard client. 62 * 63 * @param pClient Client to reset transfers for. 64 */ 65 void shclSvcClientTransfersReset(PSHCLCLIENT pClient) 66 { 67 if (!pClient) 68 return; 69 70 LogFlowFuncEnter(); 71 72 const uint32_t cTransfers = ShClTransferCtxGetTotalTransfers(&pClient->TransferCtx); 73 for (uint32_t i = 0; i < cTransfers; i++) 74 { 75 PSHCLTRANSFER pTransfer = ShClTransferCtxGetTransfer(&pClient->TransferCtx, i); 76 if (pTransfer) 77 shclSvcTransferAreaDetach(&pClient->State, pTransfer); 78 } 79 80 ShClTransferCtxDestroy(&pClient->TransferCtx); 81 } 82 83 84 /********************************************************************************************************************************* 85 * Provider implementation * 86 *********************************************************************************************************************************/ 87 60 88 DECLCALLBACK(int) shclSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx) 61 89 { … … 208 236 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pCtx->pTransfer->Events); 209 237 210 pMsg->Ctx.uContextID = VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 238 pMsg->Ctx.uContextID = VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, pCtx->pTransfer->State.uID, 211 239 uEvent); 212 240 … … 233 261 234 262 Assert(pReply->uType == VBOX_SHCL_REPLYMSGTYPE_LIST_OPEN); 263 264 LogFlowFunc(("hList=%RU64\n", pReply->u.ListOpen.uHandle)); 235 265 236 266 *phList = pReply->u.ListOpen.uHandle; … … 466 496 Assert(pReply->uType == VBOX_SHCL_REPLYMSGTYPE_OBJ_OPEN); 467 497 498 LogFlowFunc(("hObj=%RU64\n", pReply->u.ObjOpen.uHandle)); 499 468 500 *phObj = pReply->u.ObjOpen.uHandle; 469 501 … … 519 551 520 552 Assert(pReply->uType == VBOX_SHCL_REPLYMSGTYPE_OBJ_CLOSE); 553 554 LogFlowFunc(("hObj=%RU64\n", pReply->u.ObjClose.uHandle)); 521 555 #endif 522 556 … … 765 799 if (cParms >= 6) 766 800 rc = HGCMSvcGetU32(&paParms[5], &pReply->u.TransferStatus.uStatus); 801 802 LogFlowFunc(("uTransferStatus=%RU32\n", pReply->u.TransferStatus.uStatus)); 767 803 break; 768 804 } … … 772 808 if (cParms >= 6) 773 809 rc = HGCMSvcGetU64(&paParms[5], &pReply->u.ListOpen.uHandle); 810 811 LogFlowFunc(("hListOpen=%RU64\n", pReply->u.ListOpen.uHandle)); 812 break; 813 } 814 815 case VBOX_SHCL_REPLYMSGTYPE_LIST_CLOSE: 816 { 817 if (cParms >= 6) 818 rc = HGCMSvcGetU64(&paParms[5], &pReply->u.ListClose.uHandle); 819 820 LogFlowFunc(("hListClose=%RU64\n", pReply->u.ListClose.uHandle)); 774 821 break; 775 822 } … … 779 826 if (cParms >= 6) 780 827 rc = HGCMSvcGetU64(&paParms[5], &pReply->u.ObjOpen.uHandle); 828 829 LogFlowFunc(("hObjOpen=%RU64\n", pReply->u.ObjOpen.uHandle)); 781 830 break; 782 831 } … … 786 835 if (cParms >= 6) 787 836 rc = HGCMSvcGetU64(&paParms[5], &pReply->u.ObjClose.uHandle); 837 838 LogFlowFunc(("hObjClose=%RU64\n", pReply->u.ObjClose.uHandle)); 788 839 break; 789 840 } … … 1152 1203 } 1153 1204 } 1154 }1155 else1156 rc = VERR_INVALID_PARAMETER;1157 1158 LogFlowFuncLeaveRC(rc);1159 return rc;1160 }1161 1162 /**1163 * Gets a transfer error from HGCM service parameters.1164 *1165 * @returns VBox status code.1166 * @param cParms Number of HGCM parameters supplied in \a paParms.1167 * @param paParms Array of HGCM parameters.1168 * @param pRc Where to store the received error code.1169 */1170 static int shclSvcTransferGetError(uint32_t cParms, VBOXHGCMSVCPARM paParms[], int *pRc)1171 {1172 AssertPtrReturn(paParms, VERR_INVALID_PARAMETER);1173 AssertPtrReturn(pRc, VERR_INVALID_PARAMETER);1174 1175 int rc;1176 1177 if (cParms == VBOX_SHCL_CPARMS_ERROR)1178 {1179 rc = HGCMSvcGetU32(&paParms[1], (uint32_t *)pRc); /** @todo int vs. uint32_t !!! */1180 1205 } 1181 1206 else … … 1848 1873 } 1849 1874 #endif 1850 case VBOX_SHCL_GUEST_FN_CANCEL:1851 {1852 LogRel2(("Shared Clipboard: Transfer canceled\n"));1853 break;1854 }1855 1856 case VBOX_SHCL_GUEST_FN_ERROR:1857 {1858 int rcGuest;1859 rc = shclSvcTransferGetError(cParms,paParms, &rcGuest);1860 if (RT_SUCCESS(rc))1861 LogRel(("Shared Clipboard: Transfer error from guest: %Rrc\n", rcGuest));1862 break;1863 }1864 1865 1875 default: 1866 1876 LogFunc(("Not implemented\n")); -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r81223 r81229 1060 1060 } 1061 1061 1062 /** 1063 * Gets an error from HGCM service parameters. 1064 * 1065 * @returns VBox status code. 1066 * @param cParms Number of HGCM parameters supplied in \a paParms. 1067 * @param paParms Array of HGCM parameters. 1068 * @param pRc Where to store the received error code. 1069 */ 1070 static int shclSvcGetError(uint32_t cParms, VBOXHGCMSVCPARM paParms[], int *pRc) 1071 { 1072 AssertPtrReturn(paParms, VERR_INVALID_PARAMETER); 1073 AssertPtrReturn(pRc, VERR_INVALID_PARAMETER); 1074 1075 int rc; 1076 1077 if (cParms == VBOX_SHCL_CPARMS_ERROR) 1078 { 1079 rc = HGCMSvcGetU32(&paParms[1], (uint32_t *)pRc); /** @todo int vs. uint32_t !!! */ 1080 } 1081 else 1082 rc = VERR_INVALID_PARAMETER; 1083 1084 LogFlowFuncLeaveRC(rc); 1085 return rc; 1086 } 1087 1062 1088 int shclSvcSetSource(PSHCLCLIENT pClient, SHCLSOURCE enmSource) 1063 1089 { … … 1121 1147 1122 1148 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 1123 PSHCLTRANSFER pTransfer = ShClTransferCtxGetTransfer(&pClient->TransferCtx, 0 /* Index*/); 1124 if (pTransfer) 1125 shclSvcTransferAreaDetach(&pClient->State, pTransfer); 1126 1127 ShClTransferCtxDestroy(&pClient->TransferCtx); 1149 shclSvcClientTransfersReset(pClient); 1128 1150 #endif 1129 1151 … … 1487 1509 } 1488 1510 1511 case VBOX_SHCL_GUEST_FN_CANCEL: 1512 { 1513 LogRel2(("Shared Clipboard: Operation canceled by guest side\n")); 1514 1515 /** @todo Do we need to do anything here? */ 1516 break; 1517 } 1518 1519 case VBOX_SHCL_GUEST_FN_ERROR: 1520 { 1521 int rcGuest; 1522 rc = shclSvcGetError(cParms,paParms, &rcGuest); 1523 if (RT_SUCCESS(rc)) 1524 { 1525 LogRel(("Shared Clipboard: Error from guest side: %Rrc\n", rcGuest)); 1526 1527 /* Reset client state and start over. */ 1528 shclSvcClientStateReset(&pClient->State); 1529 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 1530 shclSvcClientTransfersReset(pClient); 1531 #endif 1532 } 1533 break; 1534 } 1535 1489 1536 default: 1490 1537 {
Note:
See TracChangeset
for help on using the changeset viewer.