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;
}
예제 #3
0
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;
}