ANSC_STATUS SlapEcoUoaEnrollProxyObject ( ANSC_HANDLE hThisObject, ANSC_HANDLE hObjDescr ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_ENV_CONTROLLER_OBJECT pMyObject = (PSLAP_ENV_CONTROLLER_OBJECT)hThisObject; PSLAP_OBJ_MAPPER_OBJECT pSlapObjMapper = (PSLAP_OBJ_MAPPER_OBJECT )pMyObject->hSlapObjMapper; PSLAP_OBJECT_DESCRIPTOR pObjDescriptor = (PSLAP_OBJECT_DESCRIPTOR )hObjDescr; PSLAP_OBJ_PROXY_OBJECT pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT )NULL; pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT)SlapCreateObjProxy ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pSlapObjProxy ) { return ANSC_STATUS_RESOURCES; } else { pSlapObjProxy->hSlapUoaIf = pMyObject->hSlapUoaIf; pSlapObjProxy->SetObjDescriptor((ANSC_HANDLE)pSlapObjProxy, (ANSC_HANDLE)pObjDescriptor); } returnStatus = pSlapObjMapper->AddObjProxy ( (ANSC_HANDLE)pSlapObjMapper, pObjDescriptor->ObjName, (ANSC_HANDLE)pSlapObjProxy ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { pSlapObjProxy->Remove((ANSC_HANDLE)pSlapObjProxy); } return returnStatus; }
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 SlapOmoDelObjProxy ( ANSC_HANDLE hThisObject, char* path, BOOL bFreeObjProxy ) { 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_PROXY_OBJECT pObjProxy = 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 ) { pObjProxy = (PSLAP_OBJ_PROXY_OBJECT)pThisObjBroker->hSlapObjProxy; if ( pObjProxy ) { pThisObjBroker->hSlapObjProxy = (ANSC_HANDLE)NULL; if ( bFreeObjProxy ) { pObjProxy->Remove((ANSC_HANDLE)pObjProxy); } } } else { return ANSC_STATUS_CANT_FIND; } /* * After removing the associated Obj Proxy 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; }