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