ANSC_STATUS
Bmc2EnvcoAddCommandProperty
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hCommandProperty,
        ANSC_HANDLE                 hCommandInsertBefore
    )
{
    ANSC_STATUS                     returnStatus         = ANSC_STATUS_SUCCESS;
    PBMC2_ENV_CONTROLLER_OBJECT     pMyObject            = (PBMC2_ENV_CONTROLLER_OBJECT  )hThisObject;
    PBMC2_ENV_CONTROLLER_PROPERTY   pProperty            = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property;
    PBMC2_COMMAND_PROPERTY          pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY       )hCommandProperty;
    PBMC2_COMMAND_PROPERTY          pBmc2CommandPropRef  = (PBMC2_COMMAND_PROPERTY       )hCommandInsertBefore;
    ULONG                           ulHashIndex          = AnscHashString(pBmc2CommandProperty->CommandName, AnscSizeOfString(pBmc2CommandProperty->CommandName), BMC2_ENVCO_COMPO_TABLE_SIZE);

    AnscAcquireLock   (&pMyObject->CompoTableLock);
    if ( !pBmc2CommandPropRef )
    {
        AnscQueuePushEntry(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage);
    }
    else
    {
        /* This makes sure that the command property with more specific domain pattern name appears before those
         * with less specific name. So when the command is issued, framework always tries to match domain
         * with longer domain name, therefore there will be no mismatch.
         */
        AnscQueuePushEntryBefore(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage, &pBmc2CommandPropRef->Linkage);
    }
    AnscReleaseLock   (&pMyObject->CompoTableLock);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_HANDLE
HttpFcoGetFormElement
    (
        ANSC_HANDLE                 hThisObject,
        char*                       name
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PHTTP_FORM_CONTENT_OBJECT       pMyObject     = (PHTTP_FORM_CONTENT_OBJECT)hThisObject;
    PHTTP_HFP_INTERFACE             pHfpIf        = (PHTTP_HFP_INTERFACE      )pMyObject->hHfpIf;
    PHTTP_FORM_ELEMENT              pFormElement  = NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry   = NULL;
    ULONG                           ulHashIndex   = AnscHashString(name, AnscSizeOfString(name), HTTP_FCO_FEO_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->FeoTableLock);

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->FeoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pFormElement = ACCESS_HTTP_FORM_ELEMENT(pSLinkEntry);
        pSLinkEntry  = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString(pFormElement->Name, name, TRUE) )
        {
            AnscReleaseLock(&pMyObject->FeoTableLock);

            return  (ANSC_HANDLE)pFormElement;
        }
    }

    AnscReleaseLock(&pMyObject->FeoTableLock);

    return  (ANSC_HANDLE)NULL;
}
ANSC_STATUS
HttpFcoAddFormElement
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hFeo
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PHTTP_FORM_CONTENT_OBJECT       pMyObject     = (PHTTP_FORM_CONTENT_OBJECT)hThisObject;
    PHTTP_HFP_INTERFACE             pHfpIf        = (PHTTP_HFP_INTERFACE      )pMyObject->hHfpIf;
    PHTTP_FORM_ELEMENT              pFormElement  = (PHTTP_FORM_ELEMENT       )hFeo;
    ULONG                           ulHashIndex   = 0;

    ulHashIndex =
        AnscHashString
            (
                pFormElement->Name,
                AnscSizeOfString(pFormElement->Name),
                HTTP_FCO_FEO_TABLE_SIZE
            );

    pFormElement->FormIndex = pMyObject->FormIndex++;
    pFormElement->HashIndex = ulHashIndex;

    AnscAcquireLock   (&pMyObject->FeoTableLock);
    AnscQueuePushEntry(&pMyObject->FeoTable[ulHashIndex], &pFormElement->Linkage);
    AnscReleaseLock   (&pMyObject->FeoTableLock);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
AnscLpccoAddPartyAddr
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 party_addr
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PANSC_LPC_CONNECTOR_OBJECT      pMyObject    = (PANSC_LPC_CONNECTOR_OBJECT)hThisObject;
    PANSC_LPC_PARTY_ADDR            pPartyAddr   = (PANSC_LPC_PARTY_ADDR      )party_addr;
    char*                           pPartyName   = (char*                     )pPartyAddr->PartyName;
    ULONG                           ulHashIndex  = AnscHashString(pPartyName, AnscSizeOfString(pPartyName), ANSC_LPCCO_PARTY_TABLE_SIZE);

    if ( pMyObject->GetPartyAddr
            (
                (ANSC_HANDLE)pMyObject,
                pPartyName
            ) != (ANSC_HANDLE)NULL )
    {
        AnscTrace
            (
                "[AnscLpccoAddPartyAddr] collison found, failed to add party <%s> from %d.%d.%d.%d (%d)\n",
                pPartyAddr->PartyName,
                pPartyAddr->PartyAddr.Dot[0],
                pPartyAddr->PartyAddr.Dot[1],
                pPartyAddr->PartyAddr.Dot[2],
                pPartyAddr->PartyAddr.Dot[3],
                pPartyAddr->PartyPort
            );

        return  ANSC_STATUS_COLLISION;
    }

    AnscAcquireLock   (&pMyObject->PartyTableLock);
    AnscQueuePushEntry(&pMyObject->PartyTable[ulHashIndex], &pPartyAddr->Linkage);
    AnscReleaseLock   (&pMyObject->PartyTableLock);

    AnscTrace
        (
            "[AnscLpccoAddPartyAddr] party <%s> from %d.%d.%d.%d (%d) has been added.\n",
            pPartyAddr->PartyName,
            pPartyAddr->PartyAddr.Dot[0],
            pPartyAddr->PartyAddr.Dot[1],
            pPartyAddr->PartyAddr.Dot[2],
            pPartyAddr->PartyAddr.Dot[3],
            pPartyAddr->PartyPort
        );

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
AnscLpccoDelPartyAddr
    (
        ANSC_HANDLE                 hThisObject,
        char*                       party_name
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PANSC_LPC_CONNECTOR_OBJECT      pMyObject    = (PANSC_LPC_CONNECTOR_OBJECT)hThisObject;
    PANSC_LPC_PARTY_ADDR            pPartyAddr   = (PANSC_LPC_PARTY_ADDR      )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry  = (PSINGLE_LINK_ENTRY        )NULL;
    ULONG                           ulHashIndex  = AnscHashString(party_name, AnscSizeOfString(party_name), ANSC_LPCCO_PARTY_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->PartyTableLock);

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->PartyTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pPartyAddr  = ACCESS_ANSC_LPC_PARTY_ADDR(pSLinkEntry);
        pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString
                (
                    pPartyAddr->PartyName,
                    party_name,
                    FALSE
                ) )
        {
            AnscQueuePopEntryByLink(&pMyObject->PartyTable[ulHashIndex], &pPartyAddr->Linkage);

            AnscFreeMemory(pPartyAddr);

            break;
        }
    }

    AnscReleaseLock(&pMyObject->PartyTableLock);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
BwrmPmoDelPage
    (
        ANSC_HANDLE                 hThisObject,
        char*                       root_path,
        char*                       file_path
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PBWRM_PAGE_MANAGER_OBJECT       pMyObject         = (PBWRM_PAGE_MANAGER_OBJECT    )hThisObject;
    PBWRM_PAGE_MANAGER_PROPERTY     pProperty         = (PBWRM_PAGE_MANAGER_PROPERTY  )&pMyObject->Property;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject;
    PBWRM_COOKED_PAGE_OBJECT        pCookedPage       = (PBWRM_COOKED_PAGE_OBJECT     )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry       = (PSINGLE_LINK_ENTRY           )NULL;
    ULONG                           ulHashIndex       = (ULONG                        )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->CpoTableLock);

    pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->CpoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pCookedPage = ACCESS_BWRM_COOKED_PAGE_OBJECT(pSLinkEntry);
        pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry);

        if ( pCookedPage->MatchPath
                (
                    (ANSC_HANDLE)pCookedPage,
                    root_path,
                    file_path
                ) )
        {
            AnscSListPopEntryByLink(&pMyObject->CpoTable[ulHashIndex], &pCookedPage->Linkage);

            pCookedPage->Remove((ANSC_HANDLE)pCookedPage);

            break;
        }
    }

    AnscReleaseLock(&pMyObject->CpoTableLock);

    if ( pMyObject->GetPageCount((ANSC_HANDLE)pMyObject) == 0 )
    {
        pCacheTimerObject->Stop((ANSC_HANDLE)pCacheTimerObject);
    }

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
BwrmPmoAddPage
    (
        ANSC_HANDLE                 hThisObject,
        char*                       root_path,
        char*                       file_path,
        ANSC_HANDLE                 hCookedPage
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PBWRM_PAGE_MANAGER_OBJECT       pMyObject         = (PBWRM_PAGE_MANAGER_OBJECT    )hThisObject;
    PBWRM_PAGE_MANAGER_PROPERTY     pProperty         = (PBWRM_PAGE_MANAGER_PROPERTY  )&pMyObject->Property;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject;
    PBWRM_COOKED_PAGE_OBJECT        pCookedPage       = (PBWRM_COOKED_PAGE_OBJECT     )hCookedPage;
    ULONG                           ulHashIndex       = (ULONG                        )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE);
    ULONG                           ulPageCount       = 0;
    ULONG                           ulCurTime         = AnscGetTickInSeconds();

    pMyObject->Timestamp = ulCurTime;

    pCookedPage->SetRootPath ((ANSC_HANDLE)pCookedPage, root_path);
    pCookedPage->SetPagePath ((ANSC_HANDLE)pCookedPage, file_path);
    pCookedPage->SetTimestamp((ANSC_HANDLE)pCookedPage, ulCurTime);
    pCookedPage->IncRefCount ((ANSC_HANDLE)pCookedPage           );

    AnscAcquireLock   (&pMyObject->CpoTableLock);
    AnscSListPushEntry(&pMyObject->CpoTable[ulHashIndex], &pCookedPage->Linkage);
    AnscReleaseLock   (&pMyObject->CpoTableLock);

    if ( TRUE )
    {
        ulPageCount = pMyObject->GetPageCount((ANSC_HANDLE)pMyObject);

        if ( ulPageCount == 1 )
        {
            pCacheTimerObject->Start((ANSC_HANDLE)pCacheTimerObject);
        }
        else if ( ulPageCount > pProperty->CacheEntryCount )
        {
            pCookedPage = (PBWRM_COOKED_PAGE_OBJECT)pMyObject->GetOldestPage((ANSC_HANDLE)pMyObject);

            if ( pCookedPage && 0 == pCookedPage->GetRefCount((ANSC_HANDLE)pCookedPage) )
            {
                returnStatus =
                    pMyObject->DelPage
                        (
                            (ANSC_HANDLE)pMyObject,
                            pCookedPage->GetRootPath((ANSC_HANDLE)pCookedPage),
                            pCookedPage->GetPagePath((ANSC_HANDLE)pCookedPage)
                        );
            }
        }
    }

    return  ANSC_STATUS_SUCCESS;
}
ANSC_HANDLE
BwrmPmoGetPage
    (
        ANSC_HANDLE                 hThisObject,
        char*                       root_path,
        char*                       file_path
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PBWRM_PAGE_MANAGER_OBJECT       pMyObject         = (PBWRM_PAGE_MANAGER_OBJECT    )hThisObject;
    PBWRM_PAGE_MANAGER_PROPERTY     pProperty         = (PBWRM_PAGE_MANAGER_PROPERTY  )&pMyObject->Property;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject;
    PBWRM_COOKED_PAGE_OBJECT        pCookedPage       = (PBWRM_COOKED_PAGE_OBJECT     )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry       = (PSINGLE_LINK_ENTRY           )NULL;
    ULONG                           ulHashIndex       = (ULONG                        )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE);
    ULONG                           ulCurTime         = AnscGetTickInSeconds();

    pMyObject->Timestamp = ulCurTime;

    AnscAcquireLock(&pMyObject->CpoTableLock);

    pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->CpoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pCookedPage = ACCESS_BWRM_COOKED_PAGE_OBJECT(pSLinkEntry);
        pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry);

        if ( pCookedPage->MatchPath
                (
                    (ANSC_HANDLE)pCookedPage,
                    root_path,
                    file_path
                ) )
        {
            pCookedPage->SetTimestamp((ANSC_HANDLE)pCookedPage, ulCurTime);
            pCookedPage->IncRefCount ((ANSC_HANDLE)pCookedPage);

            AnscReleaseLock(&pMyObject->CpoTableLock);

            return  (ANSC_HANDLE)pCookedPage;
        }
    }

    AnscReleaseLock(&pMyObject->CpoTableLock);

    return  (ANSC_HANDLE)NULL;
}
ANSC_HANDLE
Bmc2EnvcoDelCommandProperty
    (
        ANSC_HANDLE                 hThisObject,
        char*                       pCommandName,
        char*                       pDomainNamePattern
    )
{
    ANSC_STATUS                     returnStatus         = ANSC_STATUS_SUCCESS;
    PBMC2_ENV_CONTROLLER_OBJECT     pMyObject            = (PBMC2_ENV_CONTROLLER_OBJECT  )hThisObject;
    PBMC2_ENV_CONTROLLER_PROPERTY   pProperty            = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property;
    PBMC2_COMMAND_PROPERTY          pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY       )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry          = (PSINGLE_LINK_ENTRY           )NULL;
    ULONG                           ulHashIndex          = AnscHashString(pCommandName, AnscSizeOfString(pCommandName), BMC2_ENVCO_COMPO_TABLE_SIZE);
    PBMC2_COMMAND_PROPERTY          pBmc2CommandRef      = (PBMC2_COMMAND_PROPERTY       )NULL;

    AnscAcquireLock(&pMyObject->CompoTableLock);

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->CompoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pBmc2CommandProperty = ACCESS_BMC2_COMMAND_PROPERTY(pSLinkEntry);
        pSLinkEntry          = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString
                (
                    pBmc2CommandProperty->CommandName,
                    pCommandName,
                    FALSE
                ) )
        {
            BOOL                    bDomainMatched = FALSE;

            /* check if the specified domain matches pattern defined in command property */
            if ( !pDomainNamePattern && !pBmc2CommandProperty->DomainNamePattern )
            {
                bDomainMatched = TRUE;
            }
            else if ( !pDomainNamePattern && pBmc2CommandProperty->DomainNamePattern )
            {
                if ( AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) )
                {
                    bDomainMatched = TRUE;
                }
            }
            else if ( !pBmc2CommandProperty->DomainNamePattern || 
                 AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) )
            {
                if ( !pDomainNamePattern || AnscEqualString(pDomainNamePattern, "*", TRUE) )
                {
                    bDomainMatched = TRUE;
                }
            }
            else
            {
                ULONG               ulDNLen      = AnscSizeOfString(pBmc2CommandProperty->DomainNamePattern);
                ULONG               ulCmdDNLen   = AnscSizeOfString(pDomainNamePattern);
                ULONG               ulCmpLen     = (ulDNLen > ulCmdDNLen) ? ulCmdDNLen : ulDNLen;

                if ( !pBmc2CommandRef && AnscEqualString2(pDomainNamePattern, pBmc2CommandProperty->DomainNamePattern, ulCmpLen, FALSE) )
                {
                    pBmc2CommandRef = pBmc2CommandProperty;
                }
                else if ( !pBmc2CommandRef && 
                          (!pBmc2CommandProperty->DomainNamePattern || 
                            AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE)) )
                {
                    pBmc2CommandRef = pBmc2CommandProperty;
                }
                else
                {
                    BOOL                bEndWithStar = (pBmc2CommandProperty->DomainNamePattern[ulDNLen - 1] == '*');

                    if ( bEndWithStar &&
                         AnscEqualString2(pDomainNamePattern, pBmc2CommandProperty->DomainNamePattern, ulDNLen - 1, FALSE) )
                    {
                        pBmc2CommandRef = pBmc2CommandProperty;
                    }
                }

                bDomainMatched = 
                    AnscEqualString
                        (
                            pBmc2CommandProperty->DomainNamePattern, 
                            pDomainNamePattern, 
                            FALSE
                        );
            }

            if ( !bDomainMatched )
            {
                continue;
            }

            AnscQueuePopEntryByLink(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage);

            AnscReleaseLock(&pMyObject->CompoTableLock);

            Bmc2FreeCommandProperty(pBmc2CommandProperty);

            return  (ANSC_HANDLE)NULL;
        }
    }

    AnscReleaseLock(&pMyObject->CompoTableLock);

    return  (ANSC_HANDLE)pBmc2CommandRef;
}
ANSC_HANDLE
Bmc2EnvcoGetCommandProperty
    (
        ANSC_HANDLE                 hThisObject,
        char*                       pCommandName,
        char*                       pDomainName
    )
{
    ANSC_STATUS                     returnStatus         = ANSC_STATUS_SUCCESS;
    PBMC2_ENV_CONTROLLER_OBJECT     pMyObject            = (PBMC2_ENV_CONTROLLER_OBJECT  )hThisObject;
    PBMC2_ENV_CONTROLLER_PROPERTY   pProperty            = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property;
    PBMC2_COMMAND_PROPERTY          pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY       )NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry          = (PSINGLE_LINK_ENTRY           )NULL;
    ULONG                           ulHashIndex          = AnscHashString(pCommandName, AnscSizeOfString(pCommandName), BMC2_ENVCO_COMPO_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->CompoTableLock);

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->CompoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pBmc2CommandProperty = ACCESS_BMC2_COMMAND_PROPERTY(pSLinkEntry);
        pSLinkEntry          = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString
                (
                    pBmc2CommandProperty->CommandName,
                    pCommandName,
                    FALSE
                ) )
        {
            BOOL                    bDomainMatched = FALSE;

            /* check if the specified domain matches pattern defined in command property */
            if ( !pBmc2CommandProperty->DomainNamePattern || 
                 AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) )
            {
                bDomainMatched = TRUE;
            }
            else
            {
                char*               pStar = _ansc_strstr(pBmc2CommandProperty->DomainNamePattern, "*");

                if ( !pStar )
                {
                    bDomainMatched = 
                        AnscEqualString
                            (
                                pBmc2CommandProperty->DomainNamePattern, 
                                pDomainName, 
                                FALSE
                            );
                }
                else
                {
                    PANSC_TOKEN_CHAIN   pTokenChain  = (PANSC_TOKEN_CHAIN)NULL;
                    PANSC_STRING_TOKEN  pStringToken = (PANSC_STRING_TOKEN)NULL;
                    ULONG               ulCurPos     = 0;
                    char*               pCurDomain   = pDomainName;
                    char*               pSubStr      = NULL;
                    
                    bDomainMatched = TRUE;

                    pTokenChain =
                        AnscTcAllocate3
                            (
                                pBmc2CommandProperty->DomainNamePattern,
                                "*"
                            );

                    if(pTokenChain) /*RDKB-5887 , CID-24415, null check before use*/
                    {

                        while ( pStringToken = AnscTcUnlinkToken(pTokenChain) )
                        {
                            pSubStr = Bmc2EnvcoFindSubStrNoCase(pCurDomain, pStringToken->Name);

                            if ( !pSubStr )
                            {
                                bDomainMatched = FALSE;
                            }
                            else if ( pCurDomain == pDomainName && *pBmc2CommandProperty->DomainNamePattern != '*' )
                            {
                                if ( pSubStr != pCurDomain )
                                {
                                    bDomainMatched = FALSE;
                                }
                            }

                            if ( pSubStr )
                            {
                                pCurDomain = pSubStr + AnscSizeOfString(pStringToken->Name);    /* move to next part */
                            }

                            AnscFreeMemory(pStringToken);

                            if ( !bDomainMatched )
                            {
                                break;
                            }
                        }

                        AnscTcFree((ANSC_HANDLE)pTokenChain);

                    }

                }
            }

            if ( !bDomainMatched )
            {
                continue;
            }

            AnscReleaseLock(&pMyObject->CompoTableLock);

            return  (ANSC_HANDLE)pBmc2CommandProperty;
        }
    }

    AnscReleaseLock(&pMyObject->CompoTableLock);

    return  (ANSC_HANDLE)NULL;
}