char*
HttpBmoGetHeaderValueByName2
    (
        ANSC_HANDLE                 hThisObject,
        char*                       name,
        ULONG                       ulIndex
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PHTTP_BASIC_MESSAGE_OBJECT      pMyObject    = (PHTTP_BASIC_MESSAGE_OBJECT   )hThisObject;
    PHTTP_HFP_INTERFACE             pHfpIf       = (PHTTP_HFP_INTERFACE          )pMyObject->hHfpIf;
#ifndef _CCSP_CWMP_TCP_CONNREQ_HANDLER
    PHTTP_HELPER_CONTAINER_OBJECT   pHttpHco     = (PHTTP_HELPER_CONTAINER_OBJECT)pMyObject->hContainerContext;
#endif
    PHTTP_HEADER_FIELD              pHttpHfo     = NULL;
    char*                           pHttpHfValue = NULL;
    char*                           pHttpHfColon = NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry  = NULL;
    ULONG                           ulHeaderId   = HTTP_HEADER_ID_RESERVED;
    ULONG                           i            = 0;
    ULONG                           ulCount      = 0;

    ulHeaderId =
#ifdef _CCSP_CWMP_TCP_CONNREQ_HANDLER
        AnscHttpGetHeaderCode(name);
#else
        pHttpHco->GetHeaderId
            (
                (ANSC_HANDLE)pHttpHco,
                name
            );
#endif

    if ( ulHeaderId != HTTP_HEADER_ID_RESERVED )
    {
        return  pMyObject->GetHeaderValueById2((ANSC_HANDLE)pMyObject, ulHeaderId, ulIndex);
    }

    AnscAcquireLock(&pMyObject->HfoTableLock);

    for ( i = 0; i < HTTP_BMO_HFO_TABLE_SIZE; i++ )
    {
        pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->HfoTable[i]);

        while ( pSLinkEntry )
        {
            pHttpHfo    = ACCESS_HTTP_HEADER_FIELD(pSLinkEntry);
            pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry);

            if ( !(pHttpHfo->Flags & HTTP_FIELD_FLAG_LINE_PRESENT) )
            {
                continue;
            }
            else if ( AnscSizeOfString(pHttpHfo->HeaderLine) < AnscSizeOfString(name) )
            {
                continue;
            }
            else
            {
                pHttpHfColon = _ansc_strchr(pHttpHfo->HeaderLine, ':');
            }

            if ( !pHttpHfColon )
            {
                continue;
            }
            else if ( ((ULONG)pHttpHfColon - (ULONG)pHttpHfo->HeaderLine) != AnscSizeOfString(name) )
            {
                continue;
            }
            else if ( AnscEqualString2
                        (
                            pHttpHfo->HeaderLine,
                            name,
                            AnscSizeOfString(name),
                            FALSE
                        ) )
            {
                if ( ulCount != ulIndex )
                {
                    ulCount ++;
                    continue;
                }

                AnscReleaseLock(&pMyObject->HfoTableLock);

                AnscHttpGetHfValue(pHttpHfo->HeaderLine, AnscSizeOfString(pHttpHfo->HeaderLine), pHttpHfValue);

                return  pHttpHfValue;
            }
        }
    }

    AnscReleaseLock(&pMyObject->HfoTableLock);

    return  NULL;
}