ANSC_HANDLE SlapOmoGetObjBroker ( ANSC_HANDLE hThisObject, ANSC_HANDLE hTokenChain ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_MAPPER_OBJECT pMyObject = (PSLAP_OBJ_MAPPER_OBJECT )hThisObject; PSLAP_OBJ_MAPPER_PROPERTY pProperty = (PSLAP_OBJ_MAPPER_PROPERTY)&pMyObject->Property; PSLAP_OBJ_BROKER_OBJECT pRootObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pMyObject->hRootObjBroker; PSLAP_OBJ_BROKER_OBJECT pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pRootObjBroker; PSLAP_OBJ_BROKER_OBJECT pNextObjBroker = (PSLAP_OBJ_BROKER_OBJECT )NULL; PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )hTokenChain; PANSC_STRING_TOKEN pPathToken = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; pSLinkEntry = AnscQueuePopEntry(&pPathTokenChain->TokensQueue); while ( pSLinkEntry && pThisObjBroker ) { pPathToken = ACCESS_ANSC_STRING_TOKEN(pSLinkEntry); pNextObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pThisObjBroker->GetObjBroker ( (ANSC_HANDLE)pThisObjBroker, pPathToken->Name ); if ( pNextObjBroker ) { AnscFreeMemory(pPathToken); } else { AnscQueuePushEntryAtFront(&pPathTokenChain->TokensQueue, &pPathToken->Linkage); break; } pThisObjBroker = pNextObjBroker; pSLinkEntry = AnscQueuePopEntry(&pPathTokenChain->TokensQueue); } if ( pSLinkEntry ) { return (ANSC_HANDLE)NULL; } return (ANSC_HANDLE)pThisObjBroker; }
ANSC_STATUS SlapOboRemove ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_BROKER_OBJECT pMyObject = (PSLAP_OBJ_BROKER_OBJECT)hThisObject; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)pMyObject->hSlapObjEntity; PSLAP_OBJ_PROXY_OBJECT pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT )pMyObject->hSlapObjProxy; if ( pMyObject->PathName ) { AnscFreeMemory(pMyObject->PathName); pMyObject->PathName = NULL; } pMyObject->DelAllObjBrokers((ANSC_HANDLE)pMyObject); if ( pSlapObjEntity ) { pSlapObjEntity->Remove((ANSC_HANDLE)pSlapObjEntity); pMyObject->hSlapObjEntity = (ANSC_HANDLE)NULL; } if ( pSlapObjProxy ) { pSlapObjProxy->Remove((ANSC_HANDLE)pSlapObjProxy); pMyObject->hSlapObjProxy = (ANSC_HANDLE)NULL; } AnscFreeLock (&pMyObject->OboTableLock); AnscLcoRemove((ANSC_HANDLE)pMyObject ); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS SlapOmoDelObjEntity ( ANSC_HANDLE hThisObject, char* path, BOOL bFreeObjEntity ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_MAPPER_OBJECT pMyObject = (PSLAP_OBJ_MAPPER_OBJECT )hThisObject; PSLAP_OBJ_MAPPER_PROPERTY pProperty = (PSLAP_OBJ_MAPPER_PROPERTY)&pMyObject->Property; PSLAP_OBJ_BROKER_OBJECT pRootObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pMyObject->hRootObjBroker; PSLAP_OBJ_ENTITY_OBJECT pObjEntity = NULL; PSLAP_OBJ_BROKER_OBJECT pThisObjBroker = NULL; PSLAP_OBJ_BROKER_OBJECT pNextObjBroker = NULL; PANSC_TOKEN_CHAIN pPathTokenChain = NULL; PANSC_STRING_TOKEN pPathToken = NULL; pPathTokenChain = (PANSC_TOKEN_CHAIN)AnscAllocateMemory(sizeof(ANSC_TOKEN_CHAIN)); if ( !pPathTokenChain ) { return ANSC_STATUS_RESOURCES; } else { returnStatus = AnscSetTokenChain ( (ANSC_HANDLE)pPathTokenChain, path, SLAP_OBJ_PATH_SEPARATORS ); } if ( returnStatus != ANSC_STATUS_SUCCESS ) { AnscDelTokenChain((ANSC_HANDLE)pPathTokenChain); AnscFreeMemory ((ANSC_HANDLE)pPathTokenChain); return returnStatus; } else { pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pMyObject->GetObjBroker ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pPathTokenChain ); AnscDelTokenChain((ANSC_HANDLE)pPathTokenChain); AnscFreeMemory ((ANSC_HANDLE)pPathTokenChain); } if ( pThisObjBroker ) { pObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)pThisObjBroker->hSlapObjEntity; if ( pObjEntity ) { pThisObjBroker->hSlapObjEntity = (ANSC_HANDLE)NULL; if ( bFreeObjEntity ) { pObjEntity->Remove((ANSC_HANDLE)pObjEntity); } } } else { return ANSC_STATUS_CANT_FIND; } /* * After removing the associated Obj Entity Object, the Obj Broker Object may have become * removeable if there's no more Broker Objects currently associated with it. We shall trim all * the unnecessary branches from the bottom to the top. */ while ( pThisObjBroker && (pThisObjBroker != pRootObjBroker) && pThisObjBroker->IsRemoveable((ANSC_HANDLE)pThisObjBroker) ) { pNextObjBroker = pThisObjBroker; pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pNextObjBroker->hOwnerContext; returnStatus = pThisObjBroker->DelObjBroker ( (ANSC_HANDLE)pThisObjBroker, pNextObjBroker->PathName ); } return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE SlapOmoGetObjProxy2 ( ANSC_HANDLE hThisObject, ANSC_HANDLE hTokenChain ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_MAPPER_OBJECT pMyObject = (PSLAP_OBJ_MAPPER_OBJECT )hThisObject; PSLAP_OBJ_MAPPER_PROPERTY pProperty = (PSLAP_OBJ_MAPPER_PROPERTY)&pMyObject->Property; PSLAP_OBJ_BROKER_OBJECT pRootObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pMyObject->hRootObjBroker; PSLAP_OBJ_BROKER_OBJECT pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pRootObjBroker; PSLAP_OBJ_BROKER_OBJECT pNextObjBroker = (PSLAP_OBJ_BROKER_OBJECT )NULL; PSLAP_OBJ_PROXY_OBJECT pObjProxy = (PSLAP_OBJ_PROXY_OBJECT )NULL; PANSC_TOKEN_CHAIN pPathTokenChain = (PANSC_TOKEN_CHAIN )hTokenChain; PANSC_STRING_TOKEN pPathToken = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; if(pThisObjBroker) /*RDKB-6244, CID-24128, null check before use*/ { pObjProxy = (PSLAP_OBJ_PROXY_OBJECT )pThisObjBroker->hSlapObjProxy; } if ( AnscQueueQueryDepth(&pPathTokenChain->TokensQueue) == 0 ) { pObjProxy = (PSLAP_OBJ_PROXY_OBJECT)NULL; } else { pSLinkEntry = AnscQueuePopEntry(&pPathTokenChain->TokensQueue); while ( pSLinkEntry && pThisObjBroker ) { pPathToken = ACCESS_ANSC_STRING_TOKEN(pSLinkEntry); pNextObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pThisObjBroker->GetObjBroker ( (ANSC_HANDLE)pThisObjBroker, pPathToken->Name ); if ( pNextObjBroker ) { if ( pNextObjBroker->hSlapObjProxy ) { pObjProxy = (PSLAP_OBJ_PROXY_OBJECT)pNextObjBroker->hSlapObjProxy; } AnscFreeMemory(pPathToken); } else { AnscQueuePushEntryAtFront(&pPathTokenChain->TokensQueue, &pPathToken->Linkage); break; } pThisObjBroker = pNextObjBroker; pSLinkEntry = AnscQueuePopEntry(&pPathTokenChain->TokensQueue); } if ( AnscQueueQueryDepth(&pPathTokenChain->TokensQueue) > 0 ) { pObjProxy = (PSLAP_OBJ_PROXY_OBJECT)NULL; } } return (ANSC_HANDLE)pObjProxy; }