Changeset 82526 in vbox for trunk/src/VBox/HostServices
- Timestamp:
- Dec 9, 2019 9:48:53 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 135388
- Location:
- trunk/src/VBox/HostServices/SharedClipboard
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
r82506 r82526 146 146 RTCList<SHCLCLIENTMSG *> queueMsg; 147 147 /** The client's own event source. 148 * Needed for events which are not bound to a specific transfer. 149 * @todo r=bird: s/Events/EventSrc/ !! */ 150 SHCLEVENTSOURCE Events; 148 * Needed for events which are not bound to a specific transfer. */ 149 SHCLEVENTSOURCE EventSrc; 151 150 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 152 151 /** Transfer contextdata. */ … … 221 220 void shClSvcMsgSetPeekReturn(PSHCLCLIENTMSG pMsg, PVBOXHGCMSVCPARM paDstParms, uint32_t cDstParms); 222 221 int shClSvcMsgAdd(PSHCLCLIENT pClient, PSHCLCLIENTMSG pMsg, bool fAppend); 223 int shClSvcMsgPeek(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[], bool fWait);224 int shClSvcMsgGet(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]);225 222 226 223 int shClSvcClientInit(PSHCLCLIENT pClient, uint32_t uClientID); -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r82479 r82526 752 752 case VBOX_SHCL_GUEST_FN_REPLY: 753 753 RT_FALL_THROUGH(); 754 case VBOX_SHCL_GUEST_FN_ CANCEL:754 case VBOX_SHCL_GUEST_FN_MSG_CANCEL: 755 755 RT_FALL_THROUGH(); 756 756 case VBOX_SHCL_GUEST_FN_ERROR: -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp
r82513 r82526 189 189 { 190 190 PSHCLEVENTPAYLOAD pPayload; 191 rc = ShClEventWait(&pCtx->pClient->Event s, uEvent, 30 * 1000, &pPayload);191 rc = ShClEventWait(&pCtx->pClient->EventSrc, uEvent, 30 * 1000, &pPayload); 192 192 if (RT_SUCCESS(rc)) 193 193 { … … 196 196 197 197 /* Detach the payload, as the caller then will own the data. */ 198 ShClEventPayloadDetach(&pCtx->pClient->Event s, uEvent);198 ShClEventPayloadDetach(&pCtx->pClient->EventSrc, uEvent); 199 199 /** 200 200 * @todo r=bird: The payload has already been detached, … … 204 204 } 205 205 206 ShClEventUnregister(&pCtx->pClient->Event s, uEvent);206 ShClEventUnregister(&pCtx->pClient->EventSrc, uEvent); 207 207 } 208 208 -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp
r82480 r82526 194 194 if (pReq) 195 195 { 196 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->Event s);196 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->EventSrc); 197 197 198 198 pReq->pv = pData->pvData; … … 201 201 pReq->uEvent = uEvent; 202 202 203 rc = ShClEventRegister(&pClient->Event s, uEvent);203 rc = ShClEventRegister(&pClient->EventSrc, uEvent); 204 204 if (RT_SUCCESS(rc)) 205 205 { … … 208 208 { 209 209 PSHCLEVENTPAYLOAD pPayload; 210 rc = ShClEventWait(&pClient->Event s, uEvent, 30 * 1000, &pPayload);210 rc = ShClEventWait(&pClient->EventSrc, uEvent, 30 * 1000, &pPayload); 211 211 if (RT_SUCCESS(rc)) 212 212 { … … 218 218 } 219 219 220 ShClEventUnregister(&pClient->Event s, uEvent);220 ShClEventUnregister(&pClient->EventSrc, uEvent); 221 221 } 222 222 } … … 304 304 } 305 305 306 rc2 = ShClEventSignal(&pCtx->pClient->Event s, pReq->uEvent, pPayload);306 rc2 = ShClEventSignal(&pCtx->pClient->EventSrc, pReq->uEvent, pPayload); 307 307 AssertRC(rc2); 308 308 } … … 356 356 { 357 357 PSHCLEVENTPAYLOAD pPayload; 358 rc = ShClEventWait(&pCtx->pClient->Event s, uEvent, 30 * 1000, &pPayload);358 rc = ShClEventWait(&pCtx->pClient->EventSrc, uEvent, 30 * 1000, &pPayload); 359 359 if (RT_SUCCESS(rc)) 360 360 { … … 363 363 364 364 /* Detach the payload, as the caller then will own the data. */ 365 ShClEventPayloadDetach(&pCtx->pClient->Event s, uEvent);365 ShClEventPayloadDetach(&pCtx->pClient->EventSrc, uEvent); 366 366 } 367 367 368 ShClEventUnregister(&pCtx->pClient->Event s, uEvent);368 ShClEventUnregister(&pCtx->pClient->EventSrc, uEvent); 369 369 } 370 370 } … … 399 399 LogFlowFuncEnter(); 400 400 401 SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->Event s);402 403 int rc = ShClEventRegister(&pClient->Event s, uEvent);401 SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->EventSrc); 402 403 int rc = ShClEventRegister(&pClient->EventSrc, uEvent); 404 404 if (RT_SUCCESS(rc)) 405 405 { … … 414 414 /* X supplies the data asynchronously, so we need to wait for data to arrive first. */ 415 415 PSHCLEVENTPAYLOAD pPayload; 416 rc = ShClEventWait(&pClient->Event s, uEvent, 30 * 1000, &pPayload);416 rc = ShClEventWait(&pClient->EventSrc, uEvent, 30 * 1000, &pPayload); 417 417 if (RT_SUCCESS(rc)) 418 418 { … … 423 423 } 424 424 425 ShClEventUnregister(&pClient->Event s, uEvent);425 ShClEventUnregister(&pClient->EventSrc, uEvent); 426 426 } 427 427 -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r82525 r82526 52 52 * 53 53 * There are currently four messages defined. The first is 54 * VBOX_SHCL_GUEST_FN_MSG_GET / VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, which waits54 * VBOX_SHCL_GUEST_FN_MSG_GET / VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, which waits 55 55 * for a message from the host. If a host message is sent while the guest is 56 56 * not waiting, it will be queued until the guest requests it. The host code … … 78 78 * Since VBox 6.1 a newer protocol (v1) has been established to also support 79 79 * file transfers. This protocol uses a (per-client) message queue instead 80 * (see VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLDvs. VBOX_SHCL_GUEST_FN_GET_HOST_MSG).80 * (see VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT vs. VBOX_SHCL_GUEST_FN_GET_HOST_MSG). 81 81 * 82 82 * To distinguish the old (legacy) or new(er) protocol, the VBOX_SHCL_GUEST_FN_CONNECT … … 295 295 /** Host feature mask (VBOX_SHCL_HF_0_XXX) for VBOX_SHCL_GUEST_FN_REPORT_FEATURES 296 296 * and VBOX_SHCL_GUEST_FN_QUERY_FEATURES. */ 297 static uint64_t const g_fHostFeatures0 = VBOX_SHCL_HF_0_CONTEXT_ID; 297 static uint64_t const g_fHostFeatures0 = VBOX_SHCL_HF_0_CONTEXT_ID 298 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 299 | VBOX_SHCL_HF_0_TRANSFERS 300 #endif 301 ; 298 302 299 303 … … 449 453 450 454 /** 451 * Sets the VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLDreturn parameters.455 * Sets the VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT return parameters. 452 456 * 453 457 * This function does the necessary translation between the legacy protocol (<= VBox 6.0) and the new protocols (>= VBox 6.1), … … 587 591 { 588 592 /* Create the client's own event source. */ 589 rc = ShClEventSourceCreate(&pClient->Event s, 0 /* ID, ignored */);593 rc = ShClEventSourceCreate(&pClient->EventSrc, 0 /* ID, ignored */); 590 594 if (RT_SUCCESS(rc)) 591 595 { 592 LogFlowFunc(("[Client %RU32] Using event source %RU32\n", uClientID, pClient->Event s.uID));596 LogFlowFunc(("[Client %RU32] Using event source %RU32\n", uClientID, pClient->EventSrc.uID)); 593 597 594 598 /* Reset the client state. */ … … 621 625 622 626 /* Make sure to send a quit message to the guest so that it can terminate gracefully. */ 627 RTCritSectEnter(&pClient->CritSect); 623 628 if (pClient->Pending.uType) 624 629 { 625 if (pClient->Pending.cParms >= 2) 626 { 630 if (pClient->Pending.cParms > 1) 627 631 HGCMSvcSetU32(&pClient->Pending.paParms[0], VBOX_SHCL_HOST_MSG_QUIT); 632 if (pClient->Pending.cParms > 2) 628 633 HGCMSvcSetU32(&pClient->Pending.paParms[1], 0); 629 }630 634 g_pHelpers->pfnCallComplete(pClient->Pending.hHandle, VINF_SUCCESS); 631 pClient->Pending.uType = 0; 632 } 633 634 ShClEventSourceDestroy(&pClient->Events); 635 pClient->Pending.uType = 0; 636 pClient->Pending.cParms = 0; 637 pClient->Pending.hHandle = NULL; 638 pClient->Pending.paParms = NULL; 639 } 640 RTCritSectLeave(&pClient->CritSect); 641 642 ShClEventSourceDestroy(&pClient->EventSrc); 635 643 636 644 shClSvcClientStateDestroy(&pClient->State); … … 666 674 667 675 /* Reset event source. */ 668 ShClEventSourceReset(&pClient->Event s);676 ShClEventSourceReset(&pClient->EventSrc); 669 677 670 678 /* Reset pending state. */ … … 772 780 * @param fWait Set if we should wait for a message, clear if to return 773 781 * immediately. 774 */ 775 int shClSvcMsgPeek(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[], 776 bool fWait) 782 * 783 * @note Caller takes and leave the client's critical section. 784 */ 785 static int shClSvcClientMsgPeek(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[], bool fWait) 777 786 { 778 787 /* … … 851 860 852 861 /** 853 * Implements VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD.862 * Implements VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT. 854 863 * 855 864 * @returns VBox status code. … … 861 870 * @param cParms Number of parameters. 862 871 * @param paParms Array of parameters. 863 */ 864 int shClSvcMsgGetOld(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 872 * 873 * @note Caller takes and leave the client's critical section. 874 */ 875 static int shClSvcClientMsgOldGet(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 865 876 { 866 877 int rc; … … 910 921 pClient->Pending.cParms = cParms; 911 922 pClient->Pending.paParms = paParms; 912 pClient->Pending.uType = VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD;923 pClient->Pending.uType = VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT; 913 924 914 925 rc = VINF_HGCM_ASYNC_EXECUTE; /* The caller must not complete it. */ … … 939 950 * @param cParms Number of parameters. 940 951 * @param paParms Array of parameters. 941 */ 942 int shClSvcMsgGet(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 952 * 953 * @note Called from within pClient->CritSect. 954 */ 955 static int shClSvcClientMsgGet(PSHCLCLIENT pClient, VBOXHGCMCALLHANDLE hCall, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 943 956 { 944 957 /* … … 1048 1061 1049 1062 /** 1063 * Implements VBOX_SHCL_GUEST_FN_MSG_GET. 1064 * 1065 * @returns VBox status code. 1066 * @retval VINF_SUCCESS if message retrieved and removed from the pending queue. 1067 * @retval VERR_TRY_AGAIN if no message pending. 1068 * @retval VERR_MISMATCH if the incoming message ID does not match the pending. 1069 * @retval VINF_HGCM_ASYNC_EXECUTE if message was completed already. 1070 * 1071 * @param pClient The client state. 1072 * @param cParms Number of parameters. 1073 * 1074 * @note Called from within pClient->CritSect. 1075 */ 1076 static int shClSvcClientMsgCancel(PSHCLCLIENT pClient, uint32_t cParms) 1077 { 1078 /* 1079 * Validate the request. 1080 */ 1081 ASSERT_GUEST_MSG_RETURN(cParms == 0, ("cParms=%u!\n", cParms), VERR_WRONG_PARAMETER_COUNT); 1082 1083 /* 1084 * Execute. 1085 */ 1086 if (pClient->Pending.uType != 0) 1087 { 1088 LogFlowFunc(("[Client %RU32] Cancelling waiting thread, isPending=%d, pendingNumParms=%RU32, m_idSession=%x\n", 1089 pClient->State.uClientID, pClient->Pending.uType, pClient->Pending.cParms, pClient->State.uSessionID)); 1090 1091 /* 1092 * The PEEK call is simple: At least two parameters, all set to zero before sleeping. 1093 */ 1094 int rcComplete; 1095 if (pClient->Pending.uType == VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT) 1096 { 1097 Assert(pClient->Pending.cParms >= 2); 1098 HGCMSvcSetU32(&pClient->Pending.paParms[0], VBOX_SHCL_HOST_MSG_CANCELED); 1099 rcComplete = VINF_TRY_AGAIN; 1100 } 1101 /* 1102 * The MSG_OLD call is complicated, though we're 1103 * generally here to wake up someone who is peeking and have two parameters. 1104 * If there aren't two parameters, fail the call. 1105 */ 1106 else 1107 { 1108 Assert(pClient->Pending.uType == VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT); 1109 if (pClient->Pending.cParms > 0) 1110 HGCMSvcSetU32(&pClient->Pending.paParms[0], VBOX_SHCL_HOST_MSG_CANCELED); 1111 if (pClient->Pending.cParms > 1) 1112 HGCMSvcSetU32(&pClient->Pending.paParms[1], 0); 1113 rcComplete = pClient->Pending.cParms == 2 ? VINF_SUCCESS : VERR_TRY_AGAIN; 1114 } 1115 1116 g_pHelpers->pfnCallComplete(pClient->Pending.hHandle, rcComplete); 1117 1118 pClient->Pending.hHandle = NULL; 1119 pClient->Pending.paParms = NULL; 1120 pClient->Pending.cParms = 0; 1121 pClient->Pending.uType = 0; 1122 return VINF_SUCCESS; 1123 } 1124 return VWRN_NOT_FOUND; 1125 } 1126 1127 1128 /** 1050 1129 * Wakes up a pending client (i.e. waiting for new messages). 1051 1130 * … … 1081 1160 fDonePending = true; 1082 1161 } 1083 else if (pClient->Pending.uType == VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD) /* Legacy, Guest Additions < 6.1. */1162 else if (pClient->Pending.uType == VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT) /* Legacy, Guest Additions < 6.1. */ 1084 1163 { 1085 1164 bool fRemove; … … 1132 1211 * @param puEvent Event ID for waiting for new data. Optional. 1133 1212 */ 1134 int ShClSvcDataReadRequest(PSHCLCLIENT pClient, PSHCLDATAREQ pDataReq, 1135 PSHCLEVENTID puEvent) 1213 int ShClSvcDataReadRequest(PSHCLCLIENT pClient, PSHCLDATAREQ pDataReq, PSHCLEVENTID puEvent) 1136 1214 { 1137 1215 AssertPtrReturn(pClient, VERR_INVALID_POINTER); … … 1147 1225 if (pMsgReadData) 1148 1226 { 1149 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->Event s);1227 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->EventSrc); 1150 1228 1151 1229 LogFlowFunc(("uFmt=0x%x\n", pDataReq->uFmt)); 1152 1230 1153 1231 HGCMSvcSetU64(&pMsgReadData->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 1154 pClient->Event s.uID, uEvent));1232 pClient->EventSrc.uID, uEvent)); 1155 1233 HGCMSvcSetU32(&pMsgReadData->paParms[1], 0 /* fFlags */); 1156 1234 HGCMSvcSetU32(&pMsgReadData->paParms[2], pDataReq->uFmt); … … 1160 1238 if (RT_SUCCESS(rc)) 1161 1239 { 1162 rc = ShClEventRegister(&pClient->Event s, uEvent);1240 rc = ShClEventRegister(&pClient->EventSrc, uEvent); 1163 1241 if (RT_SUCCESS(rc)) 1164 1242 { … … 1170 1248 } 1171 1249 else 1172 ShClEventUnregister(&pClient->Event s, uEvent);1250 ShClEventUnregister(&pClient->EventSrc, uEvent); 1173 1251 } 1174 1252 } … … 1195 1273 /* Older Guest Additions (<= VBox 6.0) did not have any context ID handling, so we ASSUME that the last event registered 1196 1274 * is the one we want to handle (as this all was a synchronous protocol anyway). */ 1197 uEvent = ShClEventGetLast(&pClient->Event s);1275 uEvent = ShClEventGetLast(&pClient->EventSrc); 1198 1276 } 1199 1277 else … … 1208 1286 if (RT_SUCCESS(rc)) 1209 1287 { 1210 rc = ShClEventSignal(&pClient->Event s, uEvent, pPayload);1288 rc = ShClEventSignal(&pClient->EventSrc, uEvent, pPayload); 1211 1289 if (RT_FAILURE(rc)) 1212 1290 ShClPayloadFree(pPayload); … … 1253 1331 if (pMsg) 1254 1332 { 1255 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->Event s);1333 const SHCLEVENTID uEvent = ShClEventIDGenerate(&pClient->EventSrc); 1256 1334 1257 1335 HGCMSvcSetU64(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 1258 pClient->Event s.uID, uEvent));1336 pClient->EventSrc.uID, uEvent)); 1259 1337 HGCMSvcSetU32(&pMsg->paParms[1], fFormats); 1260 1338 HGCMSvcSetU32(&pMsg->paParms[2], fFlags); … … 1295 1373 * Handles the VBOX_SHCL_GUEST_FN_REPORT_FORMATS message from the guest. 1296 1374 */ 1297 static int shClSvc GuestReportFormats(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[])1375 static int shClSvcClientReportFormats(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1298 1376 { 1299 1377 /* … … 1390 1468 * Handles the VBOX_SHCL_GUEST_FN_DATA_READ message from the guest. 1391 1469 */ 1392 static int shClSvc GetDataRead(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[])1470 static int shClSvcClientReadData(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1393 1471 { 1394 1472 LogFlowFuncEnter(); … … 1552 1630 } 1553 1631 1554 int shClSvc GetDataWrite(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[])1632 int shClSvcClientWriteData(PSHCLCLIENT pClient, uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1555 1633 { 1556 1634 LogFlowFuncEnter(); … … 1591 1669 ASSERT_GUEST_RETURN(paParms[iParm].type == VBOX_HGCM_SVC_PARM_64BIT, VERR_WRONG_PARAMETER_TYPE); 1592 1670 cmdCtx.uContextID = paParms[iParm].u.uint64; 1593 uint64_t const idCtxExpected = VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, pClient->Event s.uID,1671 uint64_t const idCtxExpected = VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, pClient->EventSrc.uID, 1594 1672 VBOX_SHCL_CONTEXTID_GET_EVENT(cmdCtx.uContextID)); 1595 1673 ASSERT_GUEST_MSG_RETURN(cmdCtx.uContextID == idCtxExpected, … … 1676 1754 * @param pRc Where to store the received error code. 1677 1755 */ 1678 static int shClSvc GetError(uint32_t cParms, VBOXHGCMSVCPARM paParms[], int *pRc)1756 static int shClSvcClientError(uint32_t cParms, VBOXHGCMSVCPARM paParms[], int *pRc) 1679 1757 { 1680 1758 AssertPtrReturn(paParms, VERR_INVALID_PARAMETER); … … 1823 1901 { 1824 1902 RT_NOREF(u32ClientID, pvClient, tsArrival); 1825 1826 int rc = VINF_SUCCESS;1827 1828 1903 PSHCLCLIENT pClient = (PSHCLCLIENT)pvClient; 1829 1904 AssertPtr(pClient); 1830 1905 1906 #ifdef LOG_ENABLED 1831 1907 LogFunc(("u32ClientID=%RU32, fn=%RU32 (%s), cParms=%RU32, paParms=%p\n", 1832 1908 u32ClientID, u32Function, ShClGuestMsgToStr(u32Function), cParms, paParms)); 1833 1834 #ifdef LOG_ENABLED1835 1909 for (uint32_t i = 0; i < cParms; i++) 1836 1910 { … … 1838 1912 LogFunc((" paParms[%d]: type %RU32 - value %RU32\n", i, paParms[i].type, paParms[i].u.uint32)); 1839 1913 } 1840 #endif1841 1842 1914 LogFunc(("Client state: fFlags=0x%x, fGuestFeatures0=0x%x, fGuestFeatures1=0x%x\n", 1843 1915 pClient->State.fFlags, pClient->State.fGuestFeatures0, pClient->State.fGuestFeatures1)); 1844 1916 #endif 1917 1918 int rc; 1845 1919 switch (u32Function) 1846 1920 { 1847 case VBOX_SHCL_GUEST_FN_GET_HOST_MSG_OLD: 1848 rc = shClSvcMsgGetOld(pClient, callHandle, cParms, paParms); 1921 case VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT: 1922 RTCritSectEnter(&pClient->CritSect); 1923 rc = shClSvcClientMsgOldGet(pClient, callHandle, cParms, paParms); 1924 RTCritSectLeave(&pClient->CritSect); 1849 1925 break; 1850 1926 … … 1863 1939 1864 1940 case VBOX_SHCL_GUEST_FN_MSG_PEEK_NOWAIT: 1865 rc = shClSvcMsgPeek(pClient, callHandle, cParms, paParms, false /*fWait*/); 1941 RTCritSectEnter(&pClient->CritSect); 1942 rc = shClSvcClientMsgPeek(pClient, callHandle, cParms, paParms, false /*fWait*/); 1943 RTCritSectLeave(&pClient->CritSect); 1866 1944 break; 1867 1945 1868 1946 case VBOX_SHCL_GUEST_FN_MSG_PEEK_WAIT: 1869 rc = shClSvcMsgPeek(pClient, callHandle, cParms, paParms, true /*fWait*/); 1947 RTCritSectEnter(&pClient->CritSect); 1948 rc = shClSvcClientMsgPeek(pClient, callHandle, cParms, paParms, true /*fWait*/); 1949 RTCritSectLeave(&pClient->CritSect); 1870 1950 break; 1871 1951 1872 1952 case VBOX_SHCL_GUEST_FN_MSG_GET: 1873 rc = shClSvcMsgGet(pClient, callHandle, cParms, paParms); 1953 RTCritSectEnter(&pClient->CritSect); 1954 rc = shClSvcClientMsgGet(pClient, callHandle, cParms, paParms); 1955 RTCritSectLeave(&pClient->CritSect); 1874 1956 break; 1875 1957 1958 case VBOX_SHCL_GUEST_FN_MSG_CANCEL: 1959 RTCritSectEnter(&pClient->CritSect); 1960 rc = shClSvcClientMsgCancel(pClient, cParms); 1961 RTCritSectLeave(&pClient->CritSect); 1962 break; 1963 1876 1964 case VBOX_SHCL_GUEST_FN_REPORT_FORMATS: 1877 rc = shClSvc GuestReportFormats(pClient, cParms, paParms);1965 rc = shClSvcClientReportFormats(pClient, cParms, paParms); 1878 1966 break; 1879 1967 1880 1968 case VBOX_SHCL_GUEST_FN_DATA_READ: 1881 rc = shClSvc GetDataRead(pClient, cParms, paParms);1969 rc = shClSvcClientReadData(pClient, cParms, paParms); 1882 1970 break; 1883 1971 1884 1972 case VBOX_SHCL_GUEST_FN_DATA_WRITE: 1885 rc = shClSvc GetDataWrite(pClient, cParms, paParms);1973 rc = shClSvcClientWriteData(pClient, cParms, paParms); 1886 1974 break; 1887 1975 1888 case VBOX_SHCL_GUEST_FN_CANCEL:1889 {1890 LogRel2(("Shared Clipboard: Operation canceled by guest side\n"));1891 1892 /** @todo r=bird: What on earth is this? The only user of this message1893 * (VBOX_SHCL_GUEST_FN_CANCEL) is VbglR3ClipboardMsgPeekWait(), where it was1894 * copied over from guest control. What happens here is _nothing_ like what it1895 * expects to happen. See GstCtrlService::clientMsgCancel for a reference.1896 */1897 1898 /* Reset client state and start over. */1899 shclSvcClientStateReset(&pClient->State);1900 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS1901 shClSvcClientTransfersReset(pClient);1902 #endif1903 /** @todo Do we need to do anything else here? */1904 break;1905 }1906 1907 1976 case VBOX_SHCL_GUEST_FN_ERROR: 1908 1977 { 1909 1978 int rcGuest; 1910 rc = shClSvc GetError(cParms,paParms, &rcGuest);1979 rc = shClSvcClientError(cParms,paParms, &rcGuest); 1911 1980 if (RT_SUCCESS(rc)) 1912 1981 { … … 1925 1994 { 1926 1995 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 1927 if (u32Function <= VBOX_SHCL_GUEST_FN_LAST) 1996 if ( u32Function <= VBOX_SHCL_GUEST_FN_LAST 1997 && (pClient->State.fGuestFeatures0 & VBOX_SHCL_GF_0_CONTEXT_ID) ) 1928 1998 { 1929 1999 if (g_fTransferMode & VBOX_SHCL_TRANSFER_MODE_ENABLED) -
trunk/src/VBox/HostServices/SharedClipboard/testcase/tstClipboardServiceHost.cpp
r82447 r82526 139 139 } 140 140 141 /* Does testing of VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, needed for providing compatibility to older Guest Additions clients. */141 /* Does testing of VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, needed for providing compatibility to older Guest Additions clients. */ 142 142 static void testGetHostMsgOld(void) 143 143 { … … 147 147 int rc; 148 148 149 RTTestISub("Setting up VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLDtest");149 RTTestISub("Setting up VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT test"); 150 150 rc = setupTable(&table); 151 151 RTTESTI_CHECK_MSG_RETV(RT_SUCCESS(rc), ("rc=%Rrc\n", rc)); … … 163 163 call.rc = VERR_TRY_AGAIN; 164 164 table.pfnConnect(NULL, 1 /* clientId */, &g_Client, 0, 0); 165 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);165 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 166 166 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This should get updated only when the guest call completes. */ 167 167 testMsgAddReadData(&g_Client, VBOX_SHCL_FMT_UNICODETEXT); … … 170 170 RTTESTI_CHECK_RC_OK(call.rc); 171 171 call.rc = VERR_TRY_AGAIN; 172 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);172 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 173 173 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This call should not complete yet. */ 174 174 … … 179 179 HGCMSvcSetU32(&parms[1], 0); 180 180 call.rc = VERR_TRY_AGAIN; 181 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);181 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 182 182 RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHCL_HOST_MSG_READ_DATA); 183 183 RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHCL_FMT_HTML); 184 184 RTTESTI_CHECK_RC_OK(call.rc); 185 185 call.rc = VERR_TRY_AGAIN; 186 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);186 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 187 187 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This call should not complete yet. */ 188 188 … … 192 192 HGCMSvcSetU32(&parms[1], 0); 193 193 call.rc = VERR_TRY_AGAIN; 194 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);194 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 195 195 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This should get updated only when the guest call completes. */ 196 196 testMsgAddReadData(&g_Client, VBOX_SHCL_FMT_UNICODETEXT | VBOX_SHCL_FMT_HTML); … … 199 199 RTTESTI_CHECK_RC_OK(call.rc); 200 200 call.rc = VERR_TRY_AGAIN; 201 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);201 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 202 202 RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHCL_HOST_MSG_READ_DATA); 203 203 RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHCL_FMT_HTML); 204 204 RTTESTI_CHECK_RC_OK(call.rc); 205 205 call.rc = VERR_TRY_AGAIN; 206 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);206 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 207 207 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This call should not complete yet. */ 208 208 … … 213 213 HGCMSvcSetU32(&parms[1], 0); 214 214 call.rc = VERR_TRY_AGAIN; 215 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);215 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 216 216 RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHCL_HOST_MSG_READ_DATA); 217 217 RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHCL_FMT_UNICODETEXT); 218 218 RTTESTI_CHECK_RC_OK(call.rc); 219 219 call.rc = VERR_TRY_AGAIN; 220 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);220 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 221 221 RTTESTI_CHECK(parms[0].u.uint32 == VBOX_SHCL_HOST_MSG_READ_DATA); 222 222 RTTESTI_CHECK(parms[1].u.uint32 == VBOX_SHCL_FMT_HTML); 223 223 RTTESTI_CHECK_RC_OK(call.rc); 224 224 call.rc = VERR_TRY_AGAIN; 225 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_ GET_HOST_MSG_OLD, 2, parms, 0);225 table.pfnCall(NULL, &call, 1 /* clientId */, &g_Client, VBOX_SHCL_GUEST_FN_MSG_OLD_GET_WAIT, 2, parms, 0); 226 226 RTTESTI_CHECK_RC(call.rc, VERR_TRY_AGAIN); /* This call should not complete yet. */ 227 227 table.pfnDisconnect(NULL, 1 /* clientId */, &g_Client);
Note:
See TracChangeset
for help on using the changeset viewer.