Changeset 71335 in vbox for trunk/src/VBox/HostServices
- Timestamp:
- Mar 14, 2018 3:07:20 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 121286
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/GuestControl/service.cpp
r71331 r71335 605 605 606 606 /** 607 * Set to in idicate that a client call (GUEST_MSG_WAIT) is pending.607 * Set to indicate that a client call (GUEST_MSG_WAIT) is pending. 608 608 */ 609 609 int SetPending(const ClientConnection *pConnection) … … 1026 1026 int clientConnect(uint32_t u32ClientID, void *pvClient); 1027 1027 int clientDisconnect(uint32_t u32ClientID, void *pvClient); 1028 int client GetCommand(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]);1029 int client SetMsgFilterSet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]);1030 int client SetMsgFilterUnset(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]);1028 int clientMsgGet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); 1029 int clientMsgFilterSet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); 1030 int clientMsgFilterUnset(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); 1031 1031 int clientMsgSkip(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); 1032 int cancelHostCmd(uint32_t u32ContextID);1033 int cancelPendingWaits(uint32_t u32ClientID, int rcPending);1034 1032 int hostCallback(uint32_t eFunction, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); 1035 1033 int hostProcessCommand(uint32_t eFunction, uint32_t cParms, VBOXHGCMSVCPARM paParms[]); … … 1115 1113 bool fLast = RTListNodeIsLast(&mHostCmdList, &pCurCmd->Node); 1116 1114 1117 int rc2 = cancelHostCmd(pCurCmd->mContextID); 1115 uint32_t cParms = 0; 1116 VBOXHGCMSVCPARM arParms[2]; 1117 arParms[cParms++].setUInt32(pCurCmd->mContextID); 1118 1119 int rc2 = hostCallback(GUEST_DISCONNECTED, cParms, arParms); 1118 1120 if (RT_FAILURE(rc2)) 1119 1121 { … … 1141 1143 1142 1144 /** 1143 * Either fills in parameters from a pending host command into our guest context or 1144 * defer the guest call until we have something from the host. 1145 * A client asks for the next message to process. 1146 * 1147 * This either fills in a pending host command into the client's parameter space 1148 * or defers the guest call until we have something from the host. 1145 1149 * 1146 1150 * @return IPRT status code. … … 1150 1154 * @param paParms Array of parameters. 1151 1155 */ 1152 int Service::client GetCommand(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle,1153 1156 int Service::clientMsgGet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, 1157 uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1154 1158 { 1155 1159 /* … … 1180 1184 } 1181 1185 1182 int Service::clientSetMsgFilterSet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, 1183 uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1186 /** 1187 * A client tells this service to set a message filter. 1188 * That way a client only will get new messages which matches the filter. 1189 * 1190 * @return VBox status code. 1191 * @param u32ClientID The client's ID. 1192 * @param callHandle The client's call handle. 1193 * @param cParms Number of parameters. 1194 * @param paParms Array of parameters. 1195 */ 1196 int Service::clientMsgFilterSet(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, 1197 uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1184 1198 { 1185 1199 RT_NOREF(callHandle); … … 1231 1245 } 1232 1246 1233 int Service::clientSetMsgFilterUnset(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, 1234 uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1247 /** 1248 * A client tells this service to unset (clear) its message filter. 1249 * 1250 * @return VBox status code. 1251 * @param u32ClientID The client's ID. 1252 * @param callHandle The client's call handle. 1253 * @param cParms Number of parameters. 1254 * @param paParms Array of parameters. 1255 */ 1256 int Service::clientMsgFilterUnset(uint32_t u32ClientID, VBOXHGCMCALLHANDLE callHandle, 1257 uint32_t cParms, VBOXHGCMSVCPARM paParms[]) 1235 1258 { 1236 1259 RT_NOREF(callHandle, paParms); … … 1313 1336 1314 1337 /** 1315 * Cancels a buffered host command to unblock waiting on Main side1316 * via callbacks.1317 *1318 * @return IPRT status code.1319 * @param u32ContextID Context ID of host command to cancel.1320 */1321 int Service::cancelHostCmd(uint32_t u32ContextID)1322 {1323 Assert(mpfnHostCallback);1324 1325 LogFlowFunc(("Cancelling CID=%u ...\n", u32ContextID));1326 1327 uint32_t cParms = 0;1328 VBOXHGCMSVCPARM arParms[2];1329 arParms[cParms++].setUInt32(u32ContextID);1330 1331 return hostCallback(GUEST_DISCONNECTED, cParms, arParms);1332 }1333 1334 /**1335 * Client asks itself (in another thread) to cancel all pending waits which are blocking the client1336 * from shutting down / doing something else.1337 *1338 * @return IPRT status code.1339 * @param u32ClientID The client's ID.1340 * @param rcPending Result code for completing pending operation.1341 */1342 int Service::cancelPendingWaits(uint32_t u32ClientID, int rcPending)1343 {1344 ClientStateMapIter itClientState = mClientStateMap.find(u32ClientID);1345 if (itClientState != mClientStateMap.end())1346 return itClientState->second.CancelWaiting(rcPending);1347 1348 return VINF_SUCCESS;1349 }1350 1351 /**1352 1338 * Notifies the host (using low-level HGCM callbacks) about an event 1353 1339 * which was sent from the client. … … 1367 1353 { 1368 1354 VBOXGUESTCTRLHOSTCALLBACK data(cParms, paParms); 1369 rc = mpfnHostCallback(mpvHostData, eFunction, 1370 (void *)(&data), sizeof(data)); 1355 rc = mpfnHostCallback(mpvHostData, eFunction, (void *)(&data), sizeof(data)); 1371 1356 } 1372 1357 else … … 1480 1465 { 1481 1466 LogFlowFunc(("[Client %RU32] GUEST_MSG_GET\n", u32ClientID)); 1482 rc = client GetCommand(u32ClientID, callHandle, cParms, paParms);1467 rc = clientMsgGet(u32ClientID, callHandle, cParms, paParms); 1483 1468 } 1484 1469 else … … 1492 1477 */ 1493 1478 case GUEST_CANCEL_PENDING_WAITS: 1479 { 1494 1480 LogFlowFunc(("[Client %RU32] GUEST_CANCEL_PENDING_WAITS\n", u32ClientID)); 1495 rc = cancelPendingWaits(u32ClientID, VINF_SUCCESS /* Pending result */); 1481 ClientStateMapIter itClientState = mClientStateMap.find(u32ClientID); 1482 if (itClientState != mClientStateMap.end()) 1483 rc = itClientState->second.CancelWaiting(VINF_SUCCESS /* Pending result */); 1496 1484 break; 1485 } 1497 1486 1498 1487 /* … … 1502 1491 case GUEST_MSG_FILTER_SET: 1503 1492 LogFlowFunc(("[Client %RU32] GUEST_MSG_FILTER_SET\n", u32ClientID)); 1504 rc = client SetMsgFilterSet(u32ClientID, callHandle, cParms, paParms);1493 rc = clientMsgFilterSet(u32ClientID, callHandle, cParms, paParms); 1505 1494 break; 1506 1495 … … 1510 1499 case GUEST_MSG_FILTER_UNSET: 1511 1500 LogFlowFunc(("[Client %RU32] GUEST_MSG_FILTER_UNSET\n", u32ClientID)); 1512 rc = client SetMsgFilterUnset(u32ClientID, callHandle, cParms, paParms);1501 rc = clientMsgFilterUnset(u32ClientID, callHandle, cParms, paParms); 1513 1502 break; 1514 1503
Note:
See TracChangeset
for help on using the changeset viewer.