BOOL SlapVhoEqualParamLists ( ANSC_HANDLE hThisObject, ANSC_HANDLE list1, ANSC_HANDLE list2, BOOL b_syntax_only ) { PSLAP_PARAMETER_LIST param_list1 = (PSLAP_PARAMETER_LIST)list1; PSLAP_PARAMETER_LIST param_list2 = (PSLAP_PARAMETER_LIST)list2; BOOL b_equal_pl = TRUE; ULONG ii = 0; BOOL b_same_var = FALSE; SLAP_VARIABLE* slap_var1 = NULL; SLAP_VARIABLE* slap_var2 = NULL; do { if ( param_list1->ParamCount != param_list2->ParamCount ) { b_equal_pl = FALSE; break; } for ( ii = 0; ii < param_list1->ParamCount; ii++ ) { slap_var1 = ¶m_list1->ParamArray[ii]; slap_var2 = ¶m_list2->ParamArray[ii]; if ( b_syntax_only ) { b_same_var = (slap_var1->Syntax == slap_var2->Syntax); } else { SlapEqualVariables(slap_var1, slap_var2, b_same_var); } if ( !b_same_var ) { b_equal_pl = FALSE; break; } } break; } while ( FALSE ); return b_equal_pl; }
ANSC_STATUS DslhWmpdoMonitorTimerInvoke ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PDSLH_WMP_DATABASE_OBJECT pMyObject = (PDSLH_WMP_DATABASE_OBJECT )hThisObject; PDSLH_WMP_DATABASE_PROPERTY pProperty = (PDSLH_WMP_DATABASE_PROPERTY)&pMyObject->Property; PDSLH_CPE_CONTROLLER_OBJECT pDslhCpeController = (PDSLH_CPE_CONTROLLER_OBJECT)pMyObject->hDslhCpeController; PDSLH_WMPDO_MONITOR_PARAM pMonitorParam = (PDSLH_WMPDO_MONITOR_PARAM )NULL; PDSLH_VAR_RECORD_OBJECT pDslhVarRecord = (PDSLH_VAR_RECORD_OBJECT )NULL; PDSLH_VAR_ENTITY_OBJECT pDslhVarEntity = (PDSLH_VAR_ENTITY_OBJECT )NULL; PDSLH_CWMP_PARAM_DESCR pParamDesp = (PDSLH_CWMP_PARAM_DESCR )NULL; PSLAP_VARIABLE pNewParamValue = (PSLAP_VARIABLE )NULL; BOOL bValueNotUpdated = (BOOL )TRUE; char* pParamFullName = (char* )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; BOOL bActiveNotify = FALSE; int oldValue = 0; /* Only for notification with threshold */ int newValue = 0; /* Only for notification with threshold */ AnscAcquireLock(&pMyObject->MpoQueueLock); pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->MpoQueue); while ( pSLinkEntry ) { pMonitorParam = ACCESS_DSLH_WMPDO_MONITOR_PARAM(pSLinkEntry); pDslhVarRecord = (PDSLH_VAR_RECORD_OBJECT)pMonitorParam->hVarRecord; pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); /* * DO NOT synchronize the value if value-changing is in progress... */ if ( pDslhVarRecord->TempParamValue ) { continue; } /* * DO NOT synchronize the value if the active notification parameter is rate-regulated and * the last update was notified less than "NotificationLimit" seconds ago. */ if ( (pDslhVarRecord->Notification == DSLH_CWMP_NOTIFICATION_active) && (pMonitorParam ->NotificationLimit > 0 ) ) { if ( (AnscGetTickInSeconds() - pMonitorParam->Timestamp) < pMonitorParam->NotificationLimit ) { continue; } } if ( pMonitorParam->PreviousValue ) { pNewParamValue = pDslhVarRecord->GetValue((ANSC_HANDLE)pDslhVarRecord); bValueNotUpdated = TRUE; if ( !pNewParamValue ) { continue; } else { SlapEqualVariables(pMonitorParam->PreviousValue, pNewParamValue, bValueNotUpdated); } if ( !bValueNotUpdated ) { /* Notificatoin with threshold check */ pDslhVarEntity = (PDSLH_VAR_ENTITY_OBJECT)pDslhVarRecord->hDslhVarEntity; pParamDesp = (PDSLH_CWMP_PARAM_DESCR )pDslhVarEntity->ParamDescr; if ( pParamDesp && pParamDesp->bThresholdEnabled == TRUE ) { oldValue = pMonitorParam ->PreviousValue->Variant.varInt; newValue = pNewParamValue->Variant.varInt; if ( (oldValue < pParamDesp->NotifyThresholdMin && newValue < pParamDesp->NotifyThresholdMin) || (oldValue > pParamDesp->NotifyThresholdMax && newValue > pParamDesp->NotifyThresholdMax) || (oldValue >= pParamDesp->NotifyThresholdMin && oldValue <= pParamDesp->NotifyThresholdMax && newValue >= pParamDesp->NotifyThresholdMin && newValue <= pParamDesp->NotifyThresholdMax) ) { if ( pMonitorParam->PreviousValue ) { SlapFreeVariable(pMonitorParam->PreviousValue); } pMonitorParam->PreviousValue = pNewParamValue; continue; } } /* save the previous value as old */ if( pDslhVarRecord->OldParamValue != NULL) { SlapFreeVariable(pDslhVarRecord->OldParamValue); } pDslhVarRecord->OldParamValue = pMonitorParam->PreviousValue; /* SlapFreeVariable(pMonitorParam->PreviousValue); */ pMonitorParam->PreviousValue = pNewParamValue; pParamFullName = pDslhVarRecord->GetFullName((ANSC_HANDLE)pDslhVarRecord); if ( pParamFullName ) { bActiveNotify |= (pDslhVarRecord->Notification == DSLH_CWMP_NOTIFICATION_active); pMonitorParam->Timestamp = AnscGetTickInSeconds(); pDslhVarRecord->NotifyValueChanged(pDslhVarRecord); AnscTraceWarning(("DslhWmpdoMonitorTimerInvoke - value change detected on parameter <%s>.\n", pParamFullName)); pDslhVarRecord->ReqSenderID = 0; pMonitorParam->PreviousValue->ReqSenderID = 0; AnscFreeMemory(pParamFullName); } } else { SlapFreeVariable(pNewParamValue); } } else { pMonitorParam->PreviousValue = pDslhVarRecord->GetValue((ANSC_HANDLE)pDslhVarRecord); } } AnscReleaseLock(&pMyObject->MpoQueueLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS SlapScoGalSetVariable ( ANSC_HANDLE hThisObject, SLAP_PARAMETER_LIST* param_list ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SCO_GALLERY_OBJECT pMyObject = (PSLAP_SCO_GALLERY_OBJECT)hThisObject; PANSC_ATOM_TABLE_OBJECT pAtoVariable = (PANSC_ATOM_TABLE_OBJECT )pMyObject->hAtoVariable; PANSC_ATOM_DESCRIPTOR pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR )NULL; PSLAP_VARIABLE pGalVariable = (PSLAP_VARIABLE )NULL; PSLAP_VARIABLE pTbsVariable = (PSLAP_VARIABLE )NULL; BOOL bSameVar = FALSE; if ( !param_list || (param_list->ParamCount < 2) ) { return ANSC_STATUS_BAD_PARAMETER; } else if ( param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string ) { return ANSC_STATUS_BAD_PARAMETER; } else if ( !param_list->ParamArray[0].Variant.varString ) { return ANSC_STATUS_BAD_PARAMETER; } else { pTbsVariable = ¶m_list->ParamArray[1]; } pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName ( (ANSC_HANDLE)pAtoVariable, param_list->ParamArray[0].Variant.varString ); if ( !pAtomDescriptor ) { returnStatus = pMyObject->AddVariable ( (ANSC_HANDLE)pMyObject, param_list ); return returnStatus; } else { pGalVariable = (PSLAP_VARIABLE)pAtomDescriptor->hContext; } if ( !pGalVariable ) { pGalVariable = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pGalVariable ) { return ANSC_STATUS_RESOURCES; } else { SlapInitVariable(pGalVariable); pAtomDescriptor->hContext = (ANSC_HANDLE)pGalVariable; } bSameVar = FALSE; } else { SlapEqualVariables(pGalVariable, pTbsVariable, bSameVar); } if ( bSameVar ) { return ANSC_STATUS_SUCCESS; } else { returnStatus = pMyObject->QuitGallery ( (ANSC_HANDLE)pMyObject, pGalVariable ); SlapCleanVariable(pGalVariable); SlapInitVariable (pGalVariable); } SlapCloneVariable(pTbsVariable, pGalVariable); returnStatus = pMyObject->JoinGallery ( (ANSC_HANDLE)pMyObject, pGalVariable ); return returnStatus; }