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;
}