ANSC_HANDLE SlapEcoUoaCreateProxyObject ( ANSC_HANDLE hThisObject, ANSC_HANDLE hSlapContainer, char* obj_name, ANSC_HANDLE hSlapGoaObj ) { 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_OBJ_CONTAINER_OBJECT pSlapObjContainer = (PSLAP_OBJ_CONTAINER_OBJECT )hSlapContainer; PSLAP_OBJ_PROXY_OBJECT pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT )NULL; PSLAP_SRV_PROXY_OBJECT pSlapSrvProxy = (PSLAP_SRV_PROXY_OBJECT )NULL; if ( !obj_name || (AnscSizeOfString(obj_name) == 0) ) { return (ANSC_HANDLE)NULL; } pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT)pSlapObjMapper->GetObjProxy1 ( (ANSC_HANDLE)pSlapObjMapper, obj_name ); if ( !pSlapObjProxy ) { return (ANSC_HANDLE)NULL; } else { pSlapSrvProxy = (PSLAP_SRV_PROXY_OBJECT)pSlapObjProxy->NewSrvProxy ( (ANSC_HANDLE)pSlapObjProxy, hSlapGoaObj ); } if ( !pSlapSrvProxy ) { return (ANSC_HANDLE)NULL; } return (ANSC_HANDLE)pSlapSrvProxy; }
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; }