ANSC_HANDLE DslhObjroGetObjRecord2 ( ANSC_HANDLE hThisObject, ANSC_HANDLE hTokenChain ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PDSLH_OBJ_RECORD_OBJECT pMyObject = (PDSLH_OBJ_RECORD_OBJECT )hThisObject; PANSC_TOKEN_CHAIN pObjNameTokens = (PANSC_TOKEN_CHAIN )hTokenChain; PANSC_STRING_TOKEN pObjNameToken = (PANSC_STRING_TOKEN )NULL; PDSLH_OBJ_RECORD_OBJECT pChildObjRecord = (PDSLH_OBJ_RECORD_OBJECT )NULL; PDSLH_OBJ_ENTITY_OBJECT pChildObjEntity = (PDSLH_OBJ_ENTITY_OBJECT )NULL; PDSLH_OBJ_CONTROLLER_OBJECT pChildObjController = (PDSLH_OBJ_CONTROLLER_OBJECT)NULL; PDSLH_OBJCO_TABLE_OBJECT pChildObjcoTable = (PDSLH_OBJCO_TABLE_OBJECT )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; BOOL bObjRecordFound = FALSE; if ( !pObjNameTokens ) { return (ANSC_HANDLE)NULL; } else { pObjNameToken = AnscTcUnlinkToken(pObjNameTokens); } if ( !pObjNameToken ) { return (ANSC_HANDLE)NULL; } pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->ObjroQueue); while ( pObjNameToken->Name && pSLinkEntry ) { pChildObjRecord = ACCESS_DSLH_OBJ_RECORD_OBJECT(pSLinkEntry); pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); if ( pChildObjRecord->LastName && AnscEqualString ( pChildObjRecord->LastName, pObjNameToken->Name, TRUE ) ) { bObjRecordFound = TRUE; break; } } AnscFreeMemory(pObjNameToken); if ( bObjRecordFound ) { pChildObjEntity = (PDSLH_OBJ_ENTITY_OBJECT )pChildObjRecord->hDslhObjEntity; pChildObjController = (PDSLH_OBJ_CONTROLLER_OBJECT)pChildObjRecord->hDslhObjController; pChildObjcoTable = (PDSLH_OBJCO_TABLE_OBJECT )pChildObjController; if ( AnscTcGetTokenCount(pObjNameTokens) == 0 ) { if ( pChildObjEntity->ObjDescr->bDynamic && pChildObjEntity->ObjDescr->Type == DSLH_CWMP_OBJECT_TYPE_table) { if ( pChildObjcoTable->IsUpdated((ANSC_HANDLE)pChildObjcoTable) ) { AnscTrace("Delete and Repopulate the record in '%s'\n", pChildObjEntity->LastName); pChildObjRecord->DelAllObjRecords ((ANSC_HANDLE)pChildObjRecord); pChildObjcoTable->Lock(pChildObjcoTable); pChildObjRecord->PopulateObjRecords((ANSC_HANDLE)pChildObjRecord); pChildObjRecord->PopulateVarRecords((ANSC_HANDLE)pChildObjRecord); pChildObjcoTable->Unlock(pChildObjcoTable); AnscTrace("End of the repopulation in '%s'\n", pChildObjEntity->LastName); } } return (ANSC_HANDLE)pChildObjRecord; } else { /* * If this obj record is a dynamic table object, we need to check whether the table * content has been updated. If it has, we need to remove all child objects and para- * meters under this object and re-populate them. */ if ( pChildObjEntity->ObjDescr->bDynamic && pChildObjEntity->ObjDescr->Type == DSLH_CWMP_OBJECT_TYPE_table) { if ( pChildObjcoTable->IsUpdated((ANSC_HANDLE)pChildObjcoTable) ) { AnscTrace("Delete and Repopulate the record in '%s'\n", pChildObjEntity->LastName); pChildObjRecord->DelAllObjRecords ((ANSC_HANDLE)pChildObjRecord); pChildObjcoTable->Lock(pChildObjcoTable); pChildObjRecord->PopulateObjRecords((ANSC_HANDLE)pChildObjRecord); pChildObjRecord->PopulateVarRecords((ANSC_HANDLE)pChildObjRecord); pChildObjcoTable->Unlock(pChildObjcoTable); AnscTrace("End of the repopulation in '%s'\n", pChildObjEntity->LastName); } } return pChildObjRecord->GetObjRecord2 ( (ANSC_HANDLE)pChildObjRecord, (ANSC_HANDLE)pObjNameTokens ); } } return (ANSC_HANDLE)NULL; }