ANSC_STATUS SlapScoGalDelAllVariables ( ANSC_HANDLE hThisObject ) { 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 pSlapVariable = (PSLAP_VARIABLE )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; ULONG i = 0; /*AnscAcquireSpinLock(&pAtoVariable->AdoStrTableSpinLock);*/ for ( i = 0; i < pAtoVariable->AdoStrTableSize; i++ ) { pSLinkEntry = AnscSListPopEntry(&pAtoVariable->AdoStrTable[i]); while ( pSLinkEntry ) { pAtomDescriptor = ACCESS_ANSC_ATOM_DESCRIPTOR(pSLinkEntry); pSLinkEntry = AnscSListPopEntry(&pAtoVariable->AdoStrTable[i]); pSlapVariable = pAtomDescriptor->hContext; returnStatus = pMyObject->QuitGallery ( (ANSC_HANDLE)pMyObject, pSlapVariable ); if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); } if ( pAtomDescriptor->AtomName ) { AnscFreeMemory(pAtomDescriptor->AtomName); } AnscFreeMemory(pAtomDescriptor); } } /*AnscReleaseSpinLock(&pAtoVariable->AdoStrTableSpinLock);*/ return ANSC_STATUS_SUCCESS; }
ANSC_STATUS Bmc2ComeoSoaWriteAString ( ANSC_HANDLE hThisObject, char *pAsciiStr ) { ANSC_STATUS status = ANSC_STATUS_SUCCESS; PBMC2_PEC_INTERFACE pBmc2PecIf = (PBMC2_PEC_INTERFACE)hThisObject; ANSC_HANDLE hOutput; SLAP_PARAMETER_LIST paramList; SLAP_PARAMETER_LIST *outList = NULL; PSLAP_VARIABLE pParam; PSLAP_VARIABLE pRetVal = NULL; ULONG ulPecStatus; if ( !pBmc2PecIf ) { return ANSC_STATUS_INTERNAL_ERROR; } hOutput = pBmc2PecIf->GetOutput(pBmc2PecIf->hOwnerContext); paramList.ParamCount = 1; pParam = ¶mList.ParamArray[0]; pParam->Syntax = SLAP_VAR_SYNTAX_TYPE_string; pParam->Variant.varString = (SLAP_CHAR *)pAsciiStr; /* invoke "Write" method of Response object to output the given string */ status = pBmc2PecIf->InvokeObject ( pBmc2PecIf->hOwnerContext, hOutput, (char *)"Write", ¶mList, &outList, &pRetVal, &ulPecStatus ); if (pRetVal) { if (pRetVal) { SlapFreeVariable(pRetVal); pRetVal = NULL; } } /* * since we don't duplicate the given string to SLAP variable, * we don't need to clean up the SLAP variable */ if (outList) { SlapFreeParamList(outList); } return status; }
ANSC_STATUS CosaBridgingRegGetInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_BRIDGING pMyObject = (PCOSA_DATAMODEL_BRIDGING )hThisObject; PSLIST_HEADER pBridgeHead = (PSLIST_HEADER )&pMyObject->BridgeList; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoBRGHA = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderBRGHA; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoBRGBrg = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext2 = (PCOSA_CONTEXT_LINK_OBJECT )NULL; PCOSA_DML_BRG_FULL_ALL pDmlBridge = (PCOSA_DML_BRG_FULL_ALL )NULL; PCOSA_DML_BRG_FULL_ALL pDmlBrgEntry = (PCOSA_DML_BRG_FULL_ALL )NULL; PCOSA_DML_BRG_PORT_FULL pPort = (PCOSA_DML_BRG_PORT_FULL )NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulInstanceNumber = 0; ULONG ulUpperInstanceNumber = 0; char* pFolderName = NULL; char* pBridgeName = NULL; char* pAlias = NULL; BOOLEAN found = FALSE; if ( !pPoamIrepFoBRGHA ) { return ANSC_STATUS_FAILURE; } /* Load the newly added but not yet commited entries */ ulEntryCount = pPoamIrepFoBRGHA->GetFolderCount((ANSC_HANDLE)pPoamIrepFoBRGHA); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pFolderName = pPoamIrepFoBRGHA->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoBRGHA, ulIndex ); if ( !pFolderName ) { continue; } pPoamIrepFoBRGBrg = pPoamIrepFoBRGHA->GetFolder((ANSC_HANDLE)pPoamIrepFoBRGHA, pFolderName); if ( !pPoamIrepFoBRGBrg ) { continue; } if ( _ansc_strstr(pFolderName, "Bridge") ) { if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoBRGBrg->GetRecord ( (ANSC_HANDLE)pPoamIrepFoBRGBrg, COSA_DML_RR_NAME_Bridge_InsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoBRGBrg->GetRecord ( (ANSC_HANDLE)pPoamIrepFoBRGBrg, COSA_DML_RR_NAME_Bridge_Alias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pDmlBridge = (PCOSA_DML_BRG_FULL_ALL)AnscAllocateMemory(sizeof(COSA_DML_BRG_FULL_ALL)); if ( !pDmlBridge ) { AnscFreeMemory(pCosaContext); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } AnscSListInitializeHeader(&pDmlBridge->PortList ); AnscSListInitializeHeader(&pDmlBridge->VLANList ); AnscSListInitializeHeader(&pDmlBridge->VLANPortList); pDmlBridge->ulNextPortInsNum = 1; pDmlBridge->ulNextVLANInsNum = 1; pDmlBridge->ulNextVLANPortInsNum = 1; pDmlBridge->Cfg.bAllowDelete = TRUE; pDmlBridge->Cfg.InstanceNumber = ulInstanceNumber; AnscCopyString(pDmlBridge->Cfg.Alias, pAlias); pCosaContext->InstanceNumber = ulInstanceNumber; pCosaContext->bNew = TRUE; pCosaContext->hContext = (ANSC_HANDLE)pDmlBridge; pCosaContext->hParentTable = NULL; pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoBRGHA; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoBRGBrg; CosaSListPushEntryByInsNum(pBridgeHead, pCosaContext); } else { found = FALSE; if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoBRGBrg->GetRecord ( (ANSC_HANDLE)pPoamIrepFoBRGBrg, COSA_DML_RR_NAME_Bridge_Upper_InsNum, NULL ); if ( pSlapVariable ) { ulUpperInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } if ( ulUpperInstanceNumber != 0 ) { pSLinkEntry = AnscSListGetFirstEntry(pBridgeHead); while ( pSLinkEntry ) { pCosaContext = ACCESS_COSA_CONTEXT_LINK_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); pDmlBrgEntry = (PCOSA_DML_BRG_FULL_ALL)pCosaContext->hContext; if ( pDmlBrgEntry && (pDmlBrgEntry->Cfg.InstanceNumber == ulUpperInstanceNumber) ) { found = TRUE; break; } } } else { return ANSC_STATUS_FAILURE; } } if (found==FALSE) { //$HL 4/29/2013 pPoamIrepFoBRGHA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoBRGHA, FALSE); pPoamIrepFoBRGBrg->Close((ANSC_HANDLE)pPoamIrepFoBRGBrg); pPoamIrepFoBRGHA->DelFolder ( (ANSC_HANDLE)pPoamIrepFoBRGHA, pPoamIrepFoBRGBrg->GetFolderName((ANSC_HANDLE)pPoamIrepFoBRGBrg) ); pPoamIrepFoBRGHA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoBRGHA, TRUE); AnscFreeMemory(pPoamIrepFoBRGBrg); continue; } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoBRGBrg->GetRecord ( (ANSC_HANDLE)pPoamIrepFoBRGBrg, COSA_DML_RR_NAME_Bridge_InsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoBRGBrg->GetRecord ( (ANSC_HANDLE)pPoamIrepFoBRGBrg, COSA_DML_RR_NAME_Bridge_Alias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } if ( _ansc_strstr(pFolderName, "Port") ) { pPort = (PCOSA_DML_BRG_PORT_FULL)AnscAllocateMemory(sizeof(COSA_DML_BRG_PORT_FULL)); if ( !pPort ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pCosaContext2 = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext2 ) { AnscFreeMemory(pPort); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pPort->Cfg.InstanceNumber = ulInstanceNumber; AnscCopyString(pPort->Cfg.Alias, pAlias); pPort->Cfg.bAllowDelete = TRUE; pCosaContext2->InstanceNumber = ulInstanceNumber; pCosaContext2->hContext = (ANSC_HANDLE)pPort; pCosaContext2->hParentTable = (ANSC_HANDLE)pDmlBrgEntry; pCosaContext2->bNew = TRUE; pCosaContext2->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoBRGHA; pCosaContext2->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoBRGBrg; //$HL 5/1/2013 pDmlBrgEntry->ulNextPortInsNum = ulInstanceNumber >=pDmlBrgEntry->ulNextPortInsNum ? ulInstanceNumber+1:pDmlBrgEntry->ulNextPortInsNum; CosaSListPushEntryByInsNum(&pDmlBrgEntry->PortList, pCosaContext2); } } } EXIT: AnscFreeMemory(pAlias); return returnStatus; }
ANSC_STATUS CosaNatRegSetNatInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_NAT pMyObject = (PCOSA_DATAMODEL_NAT )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNat = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderNat; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNatPt = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoEnumNat = (PPOAM_IREP_FOLDER_OBJECT)NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaNatContext = NULL; PCOSA_DML_NAT_PMAPPING pCosaNat = NULL; PCOSA_DML_NAT_PTRIGGER pCosaNatPt = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; PSLAP_VARIABLE pSlapVariable = NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG uInstanceNumber = 0; char* pAliasNat = NULL; char* pFolderName = NULL; char FolderName[16] = {0}; if ( !pPoamIrepFoNat ) { return ANSC_STATUS_FAILURE; } else { pPoamIrepFoNat->EnableFileSync((ANSC_HANDLE)pPoamIrepFoNat, FALSE); } if ( TRUE ) { pPoamIrepFoNat->Clear((ANSC_HANDLE)pPoamIrepFoNat); SlapAllocVariable(pSlapVariable); if ( !pSlapVariable ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } } /* This is saved structure for Nat ***************************************** <Nat> <PortMapping> <1> <alias>xxx</> <bNew>false</> </1> <2> <alias>xxx</> <bNew>false</> </2> </PortMapping> </Nat> ******************************************/ pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->NatPMappingList); while ( pSLinkEntry ) { /* create nat.{i} */ pCosaNatContext = ACCESS_COSA_CONTEXT_LINK_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); pCosaNat = (PCOSA_DML_NAT_PMAPPING)pCosaNatContext->hContext; if ( !pCosaNatContext->bNew ) { continue; } _ansc_sprintf(FolderName, "%d", pCosaNat->InstanceNumber); pPoamIrepFoEnumNat = pPoamIrepFoNat->AddFolder ( (ANSC_HANDLE)pPoamIrepFoNat, FolderName, 0 ); if ( !pPoamIrepFoEnumNat ) { continue; } /* add nat.{i}.Alias */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pCosaNat->Alias); returnStatus = pPoamIrepFoEnumNat->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATAlias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /* add nat.{i}.bNew */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_bool; pSlapVariable->Variant.varBool = pCosaNatContext->bNew; returnStatus = pPoamIrepFoEnumNat->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATbNew, SYS_REP_RECORD_TYPE_BOOL, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /*release some resource */ pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); pPoamIrepFoEnumNat = NULL; } /* For PortTrigger */ /* This is saved structure for Nat ***************************************** <Nat> <PortTrigger> <NextInsNumber>xxx</> <1> <alias>xxx</> <bNew>true</> </1> <2> <alias>xxx</> <bNew>true</> </2> </PortTrigger> </Nat> ******************************************/ pPoamIrepFoNatPt = pPoamIrepFoNat->AddFolder ( (ANSC_HANDLE)pPoamIrepFoNat, COSA_IREP_FOLDER_NAME_PORTTRIGGER, 0 ); if ( !pPoamIrepFoNatPt ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } /* Save next instance number for port trigger */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pMyObject->ulPtNextInstanceNumber; returnStatus = pPoamIrepFoNatPt->AddRecord ( (ANSC_HANDLE)pPoamIrepFoNatPt, COSA_DML_RR_NAME_NATNextInsNumber, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->NatPTriggerList); while ( pSLinkEntry ) { /* create nat.PortTrigger.{i} */ pCosaNatContext = ACCESS_COSA_CONTEXT_LINK_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); pCosaNatPt = (PCOSA_DML_NAT_PTRIGGER)pCosaNatContext->hContext; if ( !pCosaNatContext->bNew ) { continue; } _ansc_sprintf(FolderName, "%d", pCosaNatPt->InstanceNumber); pPoamIrepFoEnumNat = pPoamIrepFoNatPt->AddFolder ( (ANSC_HANDLE)pPoamIrepFoNatPt, FolderName, 0 ); if ( !pPoamIrepFoEnumNat ) { continue; } /* add PortTrigger.{i}.Alias */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pCosaNatPt->Alias); returnStatus = pPoamIrepFoEnumNat->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATAlias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /* add PortTrigger.{i}.bNew */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_bool; pSlapVariable->Variant.varBool = pCosaNatContext->bNew; returnStatus = pPoamIrepFoEnumNat->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATbNew, SYS_REP_RECORD_TYPE_BOOL, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /*release some resource */ pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); pPoamIrepFoEnumNat = NULL; } EXIT1: if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); pSlapVariable = NULL; } if ( pPoamIrepFoEnumNat ) pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); pPoamIrepFoNat->EnableFileSync((ANSC_HANDLE)pPoamIrepFoNat, TRUE); return returnStatus; }
ANSC_STATUS CosaNatInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_NAT pMyObject = (PCOSA_DATAMODEL_NAT)hThisObject; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNat = NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNatPt = NULL; /* Call Initiation */ returnStatus = CosaDmlNatInit(NULL, NULL, CosaNatGen); if ( returnStatus != ANSC_STATUS_SUCCESS ) { return returnStatus; } /* Initiation all functions */ AnscSListInitializeHeader( &pMyObject->NatPMappingList ); AnscSListInitializeHeader( &pMyObject->NatPTriggerList ); pMyObject->MaxInstanceNumber = 0; pMyObject->ulPtNextInstanceNumber = 1; pMyObject->PreviousVisitTime = 0; /*Create NAT folder in configuration */ pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)g_GetRegistryRootFolder(g_pDslhDmlAgent); if ( !pPoamIrepFoCOSA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } pPoamIrepFoNat = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_NAT ); if ( !pPoamIrepFoNat ) { pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, FALSE); pPoamIrepFoNat = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_NAT, 0 ); pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, TRUE); } if ( !pPoamIrepFoNat ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderNat = (ANSC_HANDLE)pPoamIrepFoNat; } pPoamIrepFoNatPt = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoNat->GetFolder ( (ANSC_HANDLE)pPoamIrepFoNat, COSA_IREP_FOLDER_NAME_PORTTRIGGER ); if ( !pPoamIrepFoNatPt ) { /* pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, FALSE); */ pPoamIrepFoNatPt = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoNat, COSA_IREP_FOLDER_NAME_PORTTRIGGER, 0 ); /* pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, TRUE); */ } if ( !pPoamIrepFoNatPt ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderNatPt = (ANSC_HANDLE)pPoamIrepFoNatPt; } /* Retrieve the next instance number for Port Trigger */ if ( TRUE ) { if ( pPoamIrepFoNatPt ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNatPt->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNatPt, COSA_DML_RR_NAME_NATNextInsNumber, NULL ); if ( pSlapVariable ) { pMyObject->ulPtNextInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } } CosaDmlNatGetLanIP(NULL); /* Sync with backend */ CosaDmlNatGetDmz(NULL, &pMyObject->Dmz); CosaNatSyncPortTrigger((ANSC_HANDLE)pMyObject); /* We need get NextInstanceNumber from backend. By the way, the whole tree was created. Moreover, we also need get delay-added entry and put them into our tree. */ CosaNatRegGetNatInfo((ANSC_HANDLE)pMyObject); EXIT: return returnStatus; }
ANSC_STATUS CosaDdnsRegGetDdnsInfo ( ANSC_HANDLE hThisObject ) { PCOSA_DATAMODEL_DDNS pMyObject = (PCOSA_DATAMODEL_DDNS )hThisObject; PSLIST_HEADER pListHead = (PSLIST_HEADER )&pMyObject->ContextHead; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoDdns = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderDdns; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoDdnsSp = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_DML_DDNS_SERVICE pDdnsService = (PCOSA_DML_DDNS_SERVICE )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulInstanceNumber = 0; char* pFolderName = NULL; char* pAlias = NULL; if ( !pPoamIrepFoDdns ) { return ANSC_STATUS_FAILURE; } /* Load the newly added but not yet commited entries */ ulEntryCount = pPoamIrepFoDdns->GetFolderCount((ANSC_HANDLE)pPoamIrepFoDdns); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pFolderName = pPoamIrepFoDdns->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoDdns, ulIndex ); if ( !pFolderName ) { continue; } pPoamIrepFoDdnsSp = pPoamIrepFoDdns->GetFolder((ANSC_HANDLE)pPoamIrepFoDdns, pFolderName); AnscFreeMemory(pFolderName); if ( !pPoamIrepFoDdnsSp ) { continue; } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoDdnsSp->GetRecord ( (ANSC_HANDLE)pPoamIrepFoDdnsSp, COSA_DML_RR_NAME_DdnsServiceInsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoDdnsSp->GetRecord ( (ANSC_HANDLE)pPoamIrepFoDdnsSp, COSA_DML_RR_NAME_DdnsServiceAlias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } if ( pAlias == NULL ) { continue; } } pPoamIrepFoDdnsSp->Remove((ANSC_HANDLE)pPoamIrepFoDdnsSp); pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pAlias); return ANSC_STATUS_RESOURCES; } pDdnsService = (PCOSA_DML_DDNS_SERVICE)AnscAllocateMemory(sizeof(COSA_DML_DDNS_SERVICE)); if ( !pDdnsService ) { AnscFreeMemory(pCosaContext); AnscFreeMemory(pAlias); return ANSC_STATUS_RESOURCES; } pDdnsService->InstanceNumber = ulInstanceNumber; AnscCopyString(pDdnsService->Alias, pAlias); AnscFreeMemory(pAlias); pCosaContext->InstanceNumber = ulInstanceNumber; pCosaContext->bNew = TRUE; pCosaContext->hContext = (ANSC_HANDLE)pDdnsService; pCosaContext->hParentTable = NULL; pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoDdns; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoDdnsSp; CosaSListPushEntryByInsNum(pListHead, pCosaContext); } return ANSC_STATUS_SUCCESS; }
ANSC_STATUS CosaUsersRegSetUserInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_USERS pMyObject = (PCOSA_DATAMODEL_USERS )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoUser = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderUser; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoEnumUser = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaUserContext = NULL; PCOSA_DML_USER pCosaUser = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; PSLAP_VARIABLE pSlapVariable = NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG uInstanceNumber = 0; char* pAliasUser = NULL; char* pFolderName = NULL; char FolderName[16] = {0}; if ( !pPoamIrepFoUser ) { return ANSC_STATUS_FAILURE; } else { pPoamIrepFoUser->EnableFileSync((ANSC_HANDLE)pPoamIrepFoUser, FALSE); } if ( TRUE ) { pPoamIrepFoUser->Clear((ANSC_HANDLE)pPoamIrepFoUser); SlapAllocVariable(pSlapVariable); if ( !pSlapVariable ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } } /* This is saved structure for user ***************************************** <User> <NextInstanceNumber> xxx </> <1> <alias>xxx</> <bNew>false</> </1> <2> <alias>xxx</> <bNew>false</> </2> </User> **************************************************** */ /* add client.{i}.maxInstanceNumber */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pMyObject->maxInstanceOfUser; returnStatus = pPoamIrepFoUser->AddRecord ( (ANSC_HANDLE)pPoamIrepFoUser, COSA_DML_RR_NAME_UserNextInsNunmber, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->UserList); while ( pSLinkEntry ) { /* create user.{i} */ pCosaUserContext = ACCESS_COSA_CONTEXT_LINK_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); pCosaUser = (PCOSA_DML_USER)pCosaUserContext->hContext; if ( !pCosaUserContext->bNew) { continue; } _ansc_sprintf(FolderName, "%d", pCosaUser->InstanceNumber); pPoamIrepFoEnumUser = pPoamIrepFoUser->AddFolder ( (ANSC_HANDLE)pPoamIrepFoUser, FolderName, 0 ); if ( !pPoamIrepFoEnumUser ) { continue; } /* add user.{i}.Username */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pCosaUser->Username); returnStatus = pPoamIrepFoEnumUser->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumUser, COSA_DML_RR_NAME_UserAlias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /* add user.{i}.bNew */ if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_bool; pSlapVariable->Variant.varBool = pCosaUserContext->bNew; returnStatus = pPoamIrepFoEnumUser->AddRecord ( (ANSC_HANDLE)pPoamIrepFoEnumUser, COSA_DML_RR_NAME_UserbNew, SYS_REP_RECORD_TYPE_BOOL, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } /*release some resource */ pPoamIrepFoEnumUser->Remove((ANSC_HANDLE)pPoamIrepFoEnumUser); pPoamIrepFoEnumUser = NULL; } EXIT1: if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); pSlapVariable = NULL; } if ( pPoamIrepFoEnumUser ) pPoamIrepFoEnumUser->Remove((ANSC_HANDLE)pPoamIrepFoEnumUser); pPoamIrepFoUser->EnableFileSync((ANSC_HANDLE)pPoamIrepFoUser, TRUE); return returnStatus; }
ANSC_STATUS DslhVarroNotifyValueChanged ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PDSLH_VAR_RECORD_OBJECT pMyObject = (PDSLH_VAR_RECORD_OBJECT )hThisObject; PDSLH_OBJ_RECORD_OBJECT pObjRecord = (PDSLH_OBJ_RECORD_OBJECT )pMyObject->hDslhObjRecord; PDSLH_CPE_CONTROLLER_OBJECT pDslhCpeController = (PDSLH_CPE_CONTROLLER_OBJECT )pObjRecord->hDslhCpeController; PCCC_MBI_INTERFACE pDslhMbiIf = (PCCC_MBI_INTERFACE )pDslhCpeController->GetInterfaceByName((ANSC_HANDLE)pDslhCpeController, CCC_MBI_INTERFACE_NAME); PDSLH_VAR_ENTITY_OBJECT pVarEntity = (PDSLH_VAR_ENTITY_OBJECT )pMyObject->hDslhVarEntity; PSLAP_VARIABLE pNewValue = (PSLAP_VARIABLE )NULL; char* pParamFullName = NULL; char* pAccessList = NULL; if ( !pDslhMbiIf ) { AnscTraceError(("DslhVarroNotifyValueChanged: pDslhMbiIf is NULL\n")); return ANSC_STATUS_FAILURE; } pParamFullName = pMyObject->GetFullName((ANSC_HANDLE)pMyObject); if ( pMyObject->TempParamValue ) { SlapAllocVariable(pNewValue); if ( !pNewValue ) { returnStatus = ANSC_STATUS_RESOURCES; return returnStatus; } SlapCloneVariable(pMyObject->TempParamValue, pNewValue); } else { /* New value has to be present all the time. Get current value */ pNewValue = pMyObject->GetValue((ANSC_HANDLE)pMyObject); } if(pNewValue != NULL) { pNewValue->ReqSenderID = pMyObject->ReqSenderID; } pAccessList = AnscCloneString(pMyObject->AccessList); returnStatus = pDslhMbiIf->SendParameterValueChangeSignal ( (void*)pDslhMbiIf->hOwnerContext, pParamFullName, pMyObject->OldParamValue, pNewValue, pAccessList ); if ( pNewValue ) { SlapFreeVariable(pNewValue); } if ( pParamFullName ) { AnscFreeMemory(pParamFullName); } if ( pAccessList ) { AnscFreeMemory(pAccessList); } return returnStatus; }
ANSC_STATUS CosaTSIPSubnetRegAddInfo ( ANSC_HANDLE hThisObject, ANSC_HANDLE hCosaContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_TSIP pMyObject = (PCOSA_DATAMODEL_TSIP )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoTSIPSubnet = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderTSIPSubnet; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoTSIPSubnetSp = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)hCosaContext; PCOSA_DML_TSIP_SUBNET_ENTRY pEntry = (PCOSA_DML_TSIP_SUBNET_ENTRY)pCosaContext->hContext; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; if ( !pPoamIrepFoTSIPSubnet ) { return ANSC_STATUS_FAILURE; } else { pPoamIrepFoTSIPSubnet->EnableFileSync((ANSC_HANDLE)pPoamIrepFoTSIPSubnet, FALSE); } if ( TRUE ) { SlapAllocVariable(pSlapVariable); if ( !pSlapVariable ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } } if ( TRUE ) { returnStatus = pPoamIrepFoTSIPSubnet->DelRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnet, COSA_DML_RR_NAME_TSIP_SUBNETNextInsNunmber ); pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pMyObject->ulSubnetNextInsNum; returnStatus = pPoamIrepFoTSIPSubnet->AddRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnet, COSA_DML_RR_NAME_TSIP_SUBNETNextInsNunmber, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pPoamIrepFoTSIPSubnetSp = pPoamIrepFoTSIPSubnet->AddFolder ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnet, pEntry->Alias, 0 ); if ( !pPoamIrepFoTSIPSubnetSp ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pEntry->InstanceNumber; returnStatus = pPoamIrepFoTSIPSubnetSp->AddRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp, COSA_DML_RR_NAME_TSIP_SUBNETInsNum, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pEntry->Alias); returnStatus = pPoamIrepFoTSIPSubnetSp->AddRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp, COSA_DML_RR_NAME_TSIP_SUBNETAlias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoTSIPSubnet; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp; } EXIT1: if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); } pPoamIrepFoTSIPSubnet->EnableFileSync((ANSC_HANDLE)pPoamIrepFoTSIPSubnet, TRUE); return returnStatus; }
ANSC_STATUS CosaTSIPSubnetRegGetInfo ( ANSC_HANDLE hThisObject ) { PCOSA_DATAMODEL_TSIP pMyObject = (PCOSA_DATAMODEL_TSIP )hThisObject; PSLIST_HEADER pListHead = (PSLIST_HEADER )&pMyObject->SubnetList; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoTSIPSubnet = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderTSIPSubnet; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoTSIPSubnetSp = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_DML_TSIP_SUBNET_ENTRY pEntry = (PCOSA_DML_TSIP_SUBNET_ENTRY)NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulInstanceNumber = 0; char* pFolderName = NULL; char* pAlias = NULL; if ( !pPoamIrepFoTSIPSubnet ) { return ANSC_STATUS_FAILURE; } /* Load the newly added but not yet commited entries */ ulEntryCount = pPoamIrepFoTSIPSubnet->GetFolderCount((ANSC_HANDLE)pPoamIrepFoTSIPSubnet); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pFolderName = pPoamIrepFoTSIPSubnet->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnet, ulIndex ); if ( !pFolderName ) { continue; } pPoamIrepFoTSIPSubnetSp = pPoamIrepFoTSIPSubnet->GetFolder((ANSC_HANDLE)pPoamIrepFoTSIPSubnet, pFolderName); AnscFreeMemory(pFolderName); if ( !pPoamIrepFoTSIPSubnetSp ) { continue; } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoTSIPSubnetSp->GetRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp, COSA_DML_RR_NAME_TSIP_SUBNETInsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoTSIPSubnetSp->GetRecord ( (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp, COSA_DML_RR_NAME_TSIP_SUBNETAlias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pAlias); return ANSC_STATUS_RESOURCES; } pEntry = (PCOSA_DML_TSIP_SUBNET_ENTRY)AnscAllocateMemory(sizeof(COSA_DML_TSIP_SUBNET_ENTRY)); if ( !pEntry ) { AnscFreeMemory(pAlias); AnscFreeMemory(pCosaContext); return ANSC_STATUS_RESOURCES; } AnscCopyString(pEntry->Alias, pAlias); pEntry->InstanceNumber = ulInstanceNumber; pCosaContext->InstanceNumber = ulInstanceNumber; pCosaContext->bNew = TRUE; pCosaContext->hContext = (ANSC_HANDLE)pEntry; pCosaContext->hParentTable = NULL; pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoTSIPSubnet; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoTSIPSubnetSp; CosaSListPushEntryByInsNum(pListHead, pCosaContext); if ( pAlias ) { AnscFreeMemory(pAlias); pAlias = NULL; } } return ANSC_STATUS_SUCCESS; }
ANSC_STATUS CosaTSIPInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_TSIP pMyObject = (PCOSA_DATAMODEL_TSIP)hThisObject; PCOSA_DATAMODEL_FILETRANSFER pFtObject = (PCOSA_DATAMODEL_FILETRANSFER)g_pCosaBEManager->hFileTransfer; PCOSA_DML_FILETRANSFER_CFG pCfg = (PCOSA_DML_FILETRANSFER_CFG )&pFtObject->Cfg; PANSC_ATOM_TABLE_OBJECT pAtomNamespace = NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT hIrepFolderTSIPSubnet = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT hIrepFolderTSIPRule = (PPOAM_IREP_FOLDER_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_DML_TSIP_SUBNET_ENTRY pEntry = (PCOSA_DML_TSIP_SUBNET_ENTRY)NULL; PCOSA_DML_TSIP_RULE_ENTRY pEntry2 = (PCOSA_DML_TSIP_RULE_ENTRY)NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulNextInsNum = 0; /* Initiation all functions */ CosaDmlTSIPInit(NULL, NULL); pMyObject->hFtCfg = (ANSC_HANDLE)pCfg; pMyObject->ulSubnetNextInsNum = 1; pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent); /* Load Mapping file */ pAtomNamespace = AnscCreateAtomTable ( (ANSC_HANDLE)NULL, (ANSC_HANDLE)NULL, NULL ); if ( pAtomNamespace != NULL ) { pMyObject->hAtomNamespace = pAtomNamespace; } CosaDmlTSIPLoadMappingFile((ANSC_HANDLE)pMyObject); /* Initialize Device.X_CISCO_COM_TrueStaticIP. */ CosaDmlTSIPGetCfg(NULL, &pMyObject->TSIPCfg); /* Initiation Device.X_CISCO_COM_TrueStaticIP.Subnet.{i} */ AnscSListInitializeHeader(&pMyObject->SubnetList); CosaDmlAdditionalSubnetLoadPsm((ANSC_HANDLE)pMyObject); pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { return ANSC_STATUS_FAILURE; } #if 0 hIrepFolderTSIPSubnet = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_TSIP_SUBNET ); if ( !hIrepFolderTSIPSubnet ) { hIrepFolderTSIPSubnet = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_TSIP_SUBNET, 0 ); } if ( !hIrepFolderTSIPSubnet ) { return ANSC_STATUS_FAILURE; } else { pMyObject->hIrepFolderTSIPSubnet = (ANSC_HANDLE)hIrepFolderTSIPSubnet; } /* Retrieve Next Instance Number */ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)hIrepFolderTSIPSubnet->GetRecord ( (ANSC_HANDLE)hIrepFolderTSIPSubnet, COSA_DML_RR_NAME_TSIP_SUBNETNextInsNunmber, NULL ); if ( pSlapVariable ) { pMyObject->ulSubnetNextInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } #endif /* Initiation Device.X_CISCO_COM_TrueStaticIP.PortManagement.Rule.{i}. */ AnscSListInitializeHeader(&pMyObject->RuleList); pMyObject->ulRuleNextInsNum = 1; pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { return ANSC_STATUS_FAILURE; } hIrepFolderTSIPRule = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_TSIP_RULE ); if ( !hIrepFolderTSIPRule ) { hIrepFolderTSIPRule = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_TSIP_RULE, 0 ); } if ( !hIrepFolderTSIPRule ) { return ANSC_STATUS_FAILURE; } else { pMyObject->hIrepFolderTSIPRule = (ANSC_HANDLE)hIrepFolderTSIPRule; } /* Retrieve Next Instance Number */ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)hIrepFolderTSIPRule->GetRecord ( (ANSC_HANDLE)hIrepFolderTSIPRule, COSA_DML_RR_NAME_TSIP_RULENextInsNunmber, NULL ); if ( pSlapVariable ) { pMyObject->ulRuleNextInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } /* Initialize middle layer */ /* CosaDmlTSIPGetCfg(NULL, &pMyObject->TSIPCfg); */ CosaDmlTSIPPortManagementGetCfg(NULL, &pMyObject->PortManagementCfg); #if 0 ulEntryCount = CosaDmlTSIPSubnetGetNumberOfEntries(NULL); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pEntry = (PCOSA_DML_TSIP_SUBNET_ENTRY)AnscAllocateMemory(sizeof(COSA_DML_TSIP_SUBNET_ENTRY)); if ( !pEntry ) { return ANSC_STATUS_RESOURCES; } CosaDmlTSIPSubnetGetEntry(NULL, ulIndex, pEntry); if ( TRUE ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pEntry); return ANSC_STATUS_RESOURCES; } if ( pEntry->InstanceNumber != 0 ) { pCosaContext->InstanceNumber = pEntry->InstanceNumber; if ( pMyObject->ulSubnetNextInsNum <= pEntry->InstanceNumber ) { pMyObject->ulSubnetNextInsNum = pEntry->InstanceNumber + 1; if ( pMyObject->ulSubnetNextInsNum == 0 ) { pMyObject->ulSubnetNextInsNum = 1; } } } else { pEntry->InstanceNumber = pCosaContext->InstanceNumber = pMyObject->ulSubnetNextInsNum; pMyObject->ulSubnetNextInsNum++; if ( pMyObject->ulSubnetNextInsNum == 0 ) { pMyObject->ulSubnetNextInsNum = 1; } /* Generate Alias */ _ansc_sprintf(pEntry->Alias, "Subnet%d", pCosaContext->InstanceNumber); CosaDmlTSIPSubnetSetValues ( NULL, ulIndex, pCosaContext->InstanceNumber, pEntry->Alias ); } pCosaContext->hContext = (ANSC_HANDLE)pEntry; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; pCosaContext->hPoamIrepUpperFo = NULL; pCosaContext->hPoamIrepFo = NULL; CosaSListPushEntryByInsNum(&pMyObject->SubnetList, pCosaContext); } } #endif ulEntryCount = CosaDmlTSIPRuleGetNumberOfEntries(NULL); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pEntry2 = (PCOSA_DML_TSIP_RULE_ENTRY)AnscAllocateMemory(sizeof(COSA_DML_TSIP_RULE_ENTRY)); if ( !pEntry2 ) { return ANSC_STATUS_RESOURCES; } CosaDmlTSIPRuleGetEntry(NULL, ulIndex, pEntry2); if ( TRUE ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pEntry2); return ANSC_STATUS_RESOURCES; } if ( pEntry2->InstanceNumber != 0 ) { pCosaContext->InstanceNumber = pEntry2->InstanceNumber; if ( pMyObject->ulRuleNextInsNum <= pEntry2->InstanceNumber ) { pMyObject->ulRuleNextInsNum = pEntry2->InstanceNumber + 1; if ( pMyObject->ulRuleNextInsNum == 0 ) { pMyObject->ulRuleNextInsNum = 1; } } } else { pEntry2->InstanceNumber = pCosaContext->InstanceNumber = pMyObject->ulRuleNextInsNum; pMyObject->ulRuleNextInsNum++; if ( pMyObject->ulRuleNextInsNum == 0 ) { pMyObject->ulRuleNextInsNum = 1; } /* Generate Alias */ _ansc_sprintf(pEntry2->Alias, "Rule%d", pCosaContext->InstanceNumber); CosaDmlTSIPRuleSetValues ( NULL, ulIndex, pCosaContext->InstanceNumber, pEntry2->Alias ); } pCosaContext->hContext = (ANSC_HANDLE)pEntry2; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; pCosaContext->hPoamIrepUpperFo = NULL; pCosaContext->hPoamIrepFo = NULL; CosaSListPushEntryByInsNum(&pMyObject->RuleList, pCosaContext); } } /* Load the newly added but not yet commited entries, if exist */ #if 0 CosaTSIPSubnetRegGetInfo((ANSC_HANDLE)pMyObject); #endif CosaTSIPRuleRegGetInfo((ANSC_HANDLE)pMyObject); return returnStatus; }
ANSC_STATUS SlapScoStdInvokeDispatch ( ANSC_HANDLE hThisObject, char* method_name, SLAP_PARAMETER_LIST* params_in, SLAP_PARAMETER_LIST** params_out, SLAP_VARIABLE** return_var ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SCO_STANDARD_OBJECT pMyObject = (PSLAP_SCO_STANDARD_OBJECT)hThisObject; PSLAP_OLA_INTERFACE pSlapOlaIf = (PSLAP_OLA_INTERFACE )pMyObject->hSlapOlaIf; PSLAP_METHOD_DESCRIPTOR pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR )NULL; PSLAP_PARAMETER_LIST pOutputParamList = (PSLAP_PARAMETER_LIST )NULL; PSLAP_VARIABLE pReturnedVar = (PSLAP_VARIABLE )NULL; void* pfnTargetMethod = (void* )NULL; /* * First of all, we need to verify the input parameters are valid of course. We do expect the * caller to allocate the memory for params_in even if there's no input parameters. We will be * responsible for allocating params_out and return_var. */ if ( !method_name || !params_in || !params_out || !return_var ) { return ANSC_STATUS_BAD_PARAMETER; } else { *params_out = NULL; *return_var = NULL; pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR)pSlapOlaIf->GetMethodDescriptor ( pSlapOlaIf->hOwnerContext, method_name, params_in ); } /* * Ooops! There're no method has been associated with the specified method name or no matched * parameter list has been identified. Note that above we always match the number of the input * parameters with the existing method descriptors. The caller must make sure the number of * input parameters is accurate. */ if ( !pMethodDescriptor ) { return ANSC_STATUS_CANT_FIND; } else { pfnTargetMethod = *(void**)((ULONG)pMyObject + pMethodDescriptor->MethodOffset); } /* * We shall always perform data type conversion on all input parameters unless the method * descriptor indicates that the input parameters should be passed in without any translation. * However only internal basic SLAP functions may specify that. Derived service objects MUST * NEVER attempt it. */ if ( !(pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI) ) { returnStatus = pMyObject->ConvertParams ( (ANSC_HANDLE)pMyObject, pMethodDescriptor->ParamListI, params_in ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { goto EXIT1; } } /* * Now it comes the hardest and most time-consuming part: making sensible calls into the target * object methods. Apparently, we have two choices: * * (1) We can require all the derived service objects MUST override this member * function. Within the overrided function, the drived object shall map the * method name to the desired function call and arrange the function parameters. * * (2) We can invoke the target method calls directly since we're supposed to have * everything we need to arrange the function parameters. However this means we * MUST enumerate all possible calling scenarios, which can be extremely boring * and weird (that's how I feel somehow). * * Guess which option we're going to choose... */ if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passReturnVar ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, params_out ); pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListO->ParamCount ) { case 0 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in ); break; case 1 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool ); break; case 2 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool ); break; case 3 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool ); break; case 4 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool ); break; case 5 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool ); break; case 6 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool ); break; case 7 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool ); break; case 8 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool, &pOutputParamList->ParamArray[7].Variant.varBool ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } else { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_out ); break; case 1 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), params_out ); break; case 2 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), params_out ); break; case 3 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), params_out ); break; case 4 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), params_out ); break; case 5 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), params_out ); break; case 6 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), params_out ); break; case 7 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), params_out ); break; case 8 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), SlapResolveInvokeParam(pMethodDescriptor, params_in, 7), params_out ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT1; break; } pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput0 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 1 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput1 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 2 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput2 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 3 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput3 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 4 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput4 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 5 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput5 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 6 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput6 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 7 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput7 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 8 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput8 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } *params_out = pOutputParamList; *return_var = pReturnedVar; } else { pReturnedVar = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pReturnedVar ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneVariable(pMethodDescriptor->ReturnVar, pReturnedVar); } if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, params_out ); pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListO->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in ); break; case 1 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool ); break; case 2 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool ); break; case 3 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool ); break; case 4 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool ); break; case 5 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool ); break; case 6 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool ); break; case 7 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool ); break; case 8 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool, &pOutputParamList->ParamArray[7].Variant.varBool ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } else { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_out ); break; case 1 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), params_out ); break; case 2 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), params_out ); break; case 3 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), params_out ); break; case 4 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), params_out ); break; case 5 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), params_out ); break; case 6 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), params_out ); break; case 7 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), params_out ); break; case 8 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), SlapResolveInvokeParam(pMethodDescriptor, params_in, 7), params_out ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT1; break; } pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput0 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 1 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput1 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 2 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput2 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 3 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput3 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 4 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput4 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 5 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput5 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 6 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput6 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 7 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput7 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 8 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput8 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } *params_out = pOutputParamList; *return_var = pReturnedVar; } returnStatus = ANSC_STATUS_SUCCESS; goto EXIT1; /****************************************************************** GRACEFUL ROLLBACK PROCEDURES AND EXIT DOORS ******************************************************************/ EXIT2: if ( pOutputParamList ) { SlapFreeParamList(pOutputParamList); } if ( pReturnedVar ) { SlapFreeVariable(pReturnedVar); } EXIT1: return returnStatus; }
ANSC_STATUS CosaUserinterfaceInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_USERINTERFACE pMyObject = (PCOSA_DATAMODEL_USERINTERFACE)hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT hIrepFolderUIIPRange = (PPOAM_IREP_FOLDER_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_DML_UI_IPRANGE_ENTRY pEntry = (PCOSA_DML_UI_IPRANGE_ENTRY)NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulNextInsNum = 0; /* Initiation all functions */ _ansc_memset(&pMyObject->RaCfg, 0, sizeof(COSA_DML_RA_CFG)); CosaDmlRaInit(NULL, NULL); CosaDmlRaGetCfg(NULL, &pMyObject->RaCfg); pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent); /* Initiation Device.UserInterface.X_CISCO_COM_RemoteAccess.iprange.{i}. */ AnscSListInitializeHeader(&pMyObject->iprangeList); pMyObject->uliprangeNextInsNum = 1; pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { return ANSC_STATUS_FAILURE; } hIrepFolderUIIPRange = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_UserInterface_IPRange ); if ( !hIrepFolderUIIPRange ) { hIrepFolderUIIPRange = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_UserInterface_IPRange, 0 ); } if ( !hIrepFolderUIIPRange ) { return ANSC_STATUS_FAILURE; } else { pMyObject->hIrepFolderUIIPRange = (ANSC_HANDLE)hIrepFolderUIIPRange; } /* Retrieve Next Instance Number */ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)hIrepFolderUIIPRange->GetRecord ( (ANSC_HANDLE)hIrepFolderUIIPRange, COSA_DML_RR_NAME_UserInterface_IPRangeNextInsNunmber, NULL ); if ( pSlapVariable ) { pMyObject->uliprangeNextInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } /* Initialize middle layer */ ulEntryCount = CosaDmlUIIPRangeGetNumberOfEntries(NULL); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pEntry = (PCOSA_DML_UI_IPRANGE_ENTRY)AnscAllocateMemory(sizeof(COSA_DML_UI_IPRANGE_ENTRY)); if ( !pEntry ) { return ANSC_STATUS_RESOURCES; } CosaDmlUIIPRangeGetEntry(NULL, ulIndex, pEntry); if ( TRUE ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pEntry); return ANSC_STATUS_RESOURCES; } if ( pEntry->InstanceNumber != 0 ) { pCosaContext->InstanceNumber = pEntry->InstanceNumber; if ( pMyObject->uliprangeNextInsNum <= pEntry->InstanceNumber ) { pMyObject->uliprangeNextInsNum = pEntry->InstanceNumber + 1; if ( pMyObject->uliprangeNextInsNum == 0 ) { pMyObject->uliprangeNextInsNum = 1; } } } else { pEntry->InstanceNumber = pCosaContext->InstanceNumber = pMyObject->uliprangeNextInsNum; pMyObject->uliprangeNextInsNum++; if ( pMyObject->uliprangeNextInsNum == 0 ) { pMyObject->uliprangeNextInsNum = 1; } /* Generate Alias */ _ansc_sprintf(pEntry->Alias, "iprange%d", pCosaContext->InstanceNumber); CosaDmlUIIPRangeSetValues ( NULL, ulIndex, pCosaContext->InstanceNumber, pEntry->Alias ); } pCosaContext->hContext = (ANSC_HANDLE)pEntry; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; pCosaContext->hPoamIrepUpperFo = NULL; pCosaContext->hPoamIrepFo = NULL; CosaSListPushEntryByInsNum(&pMyObject->iprangeList, pCosaContext); } } return returnStatus; }
ANSC_STATUS BreeSpoSoaWriteBString ( ANSC_HANDLE hThisObject, PUCHAR pBinaryStr, ULONG ulStrLen ) { ANSC_STATUS status = ANSC_STATUS_SUCCESS; PBEEP_PEC_INTERFACE pBeepPecIf = (PBEEP_PEC_INTERFACE)hThisObject; ANSC_HANDLE hResponse; SLAP_PARAMETER_LIST paramList; SLAP_PARAMETER_LIST *outList = NULL; PSLAP_VARIABLE pParam; PSLAP_VARIABLE pRetVal = NULL; ULONG ulPecStatus; if ( !pBeepPecIf ) { return ANSC_STATUS_INTERNAL_ERROR; } /* call "Response.BinaryWrite1" to output the stream content */ hResponse = pBeepPecIf->GetResponse(pBeepPecIf->hOwnerContext); paramList.ParamCount = 2; pParam = ¶mList.ParamArray[0]; AnscZeroMemory(pParam, sizeof(SLAP_VARIABLE)); pParam->Syntax = SLAP_VAR_SYNTAX_TYPE_ptr; pParam->Variant.varPtr = (SLAP_HANDLE)pBinaryStr; pParam = ¶mList.ParamArray[1]; AnscZeroMemory(pParam, sizeof(SLAP_VARIABLE)); pParam->Syntax = SLAP_VAR_SYNTAX_TYPE_uint32; pParam->Variant.varUint32 = ulStrLen; /* invoke "Write" method of Response object to output the given string */ status = pBeepPecIf->InvokeObject ( pBeepPecIf->hOwnerContext, hResponse, (char *)"BinaryWrite1", ¶mList, &outList, &pRetVal, &ulPecStatus ); if (pRetVal) { if (pRetVal) { SlapFreeVariable(pRetVal); pRetVal = NULL; } } SlapCleanParamList((¶mList)); if (outList) { SlapFreeParamList(outList); } return status; }
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 DslhVarroReset ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PDSLH_VAR_RECORD_OBJECT pMyObject = (PDSLH_VAR_RECORD_OBJECT )hThisObject; PDSLH_OBJ_RECORD_OBJECT pObjRecord = (PDSLH_OBJ_RECORD_OBJECT )pMyObject->hDslhObjRecord; PDSLH_CPE_CONTROLLER_OBJECT pDslhCpeController = (PDSLH_CPE_CONTROLLER_OBJECT)pObjRecord->hDslhCpeController; PDSLH_MPR_INTERFACE pDslhMprIf = (PDSLH_MPR_INTERFACE )pDslhCpeController->GetDslhMprIf((ANSC_HANDLE)pDslhCpeController); /*PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoParameter = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFoParameter;*/ if ( (pMyObject->Notification == DSLH_CWMP_NOTIFICATION_passive) || (pMyObject->Notification == DSLH_CWMP_NOTIFICATION_active ) ) { returnStatus = pDslhMprIf->DelNotifyParam ( pDslhMprIf->hOwnerContext, (ANSC_HANDLE)pMyObject ); } if ( pMyObject->AccessList ) { AnscFreeMemory(pMyObject->AccessList); pMyObject->AccessList = NULL; } /* if ( pPoamIrepFoParameter ) { pPoamIrepFoParameter->Remove((ANSC_HANDLE)pPoamIrepFoParameter); } pMyObject->hIrepFoParameter = (ANSC_HANDLE)NULL; */ if ( pMyObject->TempParamValue ) { SlapFreeVariable(pMyObject->TempParamValue); pMyObject->TempParamValue = NULL; } if ( pMyObject->TempParamValueTrans ) { if ( (pMyObject->TempParamValueTrans->Syntax == SLAP_VAR_SYNTAX_handle) && pMyObject->TempParamValueTrans->Variant.varHandle ) { AnscFreeMemory(pMyObject->TempParamValueTrans->Variant.varHandle); } SlapFreeVariable(pMyObject->TempParamValueTrans); pMyObject->TempParamValueTrans = NULL; } if ( pMyObject->OldParamValue ) { SlapFreeVariable(pMyObject->OldParamValue); pMyObject->OldParamValue = NULL; } pMyObject->bAlreadySet = FALSE; return ANSC_STATUS_SUCCESS; }
ANSC_STATUS CosaNeighdiscRegGetInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_NEIGHDISC pMyObject = (PCOSA_DATAMODEL_NEIGHDISC)hThisObject; PSLIST_HEADER pNeighdiscIFHead = (PSLIST_HEADER)&pMyObject->InterfaceList; PCOSA_DML_NEIGHDISC_IF_FULL pNeighdiscInterface = (PCOSA_DML_NEIGHDISC_IF_FULL)NULL; PCOSA_DML_NEIGHDISC_IF_FULL pNeighdiscEntry = (PCOSA_DML_NEIGHDISC_IF_FULL)NULL; PSINGLE_LINK_ENTRY pLink = (PSINGLE_LINK_ENTRY )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_CONTEXT_LINK_OBJECT pSubCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNeighdiscHA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderNeighdiscInterfaceHA; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNeighdiscIF = (PPOAM_IREP_FOLDER_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulInstanceNumber = 0; ULONG ulUpperInstanceNumber = 0; char* pFolderName = NULL; char* pAlias = NULL; if ( !pPoamIrepFoNeighdiscHA ) { return ANSC_STATUS_FAILURE; } /* Load the newly added but not yet commited entries */ ulEntryCount = pPoamIrepFoNeighdiscHA->GetFolderCount((ANSC_HANDLE)pPoamIrepFoNeighdiscHA); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pFolderName = pPoamIrepFoNeighdiscHA->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoNeighdiscHA, ulIndex ); if ( !pFolderName ) { continue; } pPoamIrepFoNeighdiscIF = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoNeighdiscHA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoNeighdiscHA, pFolderName ); if ( !pPoamIrepFoNeighdiscIF ) { continue; } if ( _ansc_strstr(pFolderName, COSA_DML_RR_NAME_NeighdiscIF_Prefix) ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNeighdiscIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNeighdiscIF, COSA_DML_RR_NAME_NeighdiscIF_InsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNeighdiscIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNeighdiscIF, COSA_DML_RR_NAME_NeighdiscIF_Alias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pNeighdiscInterface = (PCOSA_DML_NEIGHDISC_IF_FULL)AnscAllocateMemory(sizeof(COSA_DML_NEIGHDISC_IF_FULL)); if ( !pNeighdiscInterface ) { AnscFreeMemory(pCosaContext); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pNeighdiscInterface->Cfg.InstanceNumber = ulInstanceNumber; AnscCopyString(pNeighdiscInterface->Cfg.Alias, pAlias); pCosaContext->InstanceNumber = ulInstanceNumber; pCosaContext->bNew = TRUE; pCosaContext->hContext = (ANSC_HANDLE)pNeighdiscInterface; pCosaContext->hParentTable = NULL; pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoNeighdiscHA; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoNeighdiscIF; CosaSListPushEntryByInsNum(pNeighdiscIFHead, pCosaContext); } if ( pAlias ) { AnscFreeMemory(pAlias); pAlias = NULL; } if ( pFolderName ) { AnscFreeMemory(pFolderName); pFolderName = NULL; } } EXIT: if ( pAlias ) { AnscFreeMemory(pAlias); } return returnStatus; }
ANSC_STATUS CosaUsersRegGetUserInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_USERS pMyObject = ( PCOSA_DATAMODEL_USERS )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoUser = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderUser; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoEnumUser = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaUserContext = NULL; PCOSA_DML_USER pCosaUser = NULL; PSLAP_VARIABLE pSlapVariable = NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG uInstanceNumber = 0; BOOL bNew = FALSE; char* pAliasUser = NULL; char* pFolderName = NULL; if ( !pPoamIrepFoUser ) { return ANSC_STATUS_FAILURE; } /* This is saved structure for user ***************************************** <User> <NextInstanceNumber> xxx </> <1> <alias>xxx</> <bNew>false</> </1> <2> <alias>xxx</> <bNew>false</> </2> </User> **************************************************** */ /* Get Maximum number */ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoUser->GetRecord ( (ANSC_HANDLE)pPoamIrepFoUser, COSA_DML_RR_NAME_UserNextInsNunmber, NULL ); if ( pSlapVariable ) { pMyObject->maxInstanceOfUser = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } /* enumerate user.{i} */ ulEntryCount = pPoamIrepFoUser->GetFolderCount((ANSC_HANDLE)pPoamIrepFoUser); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { /* Get i in user.{i} */ pFolderName = pPoamIrepFoUser->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoUser, ulIndex ); if ( !pFolderName ) { continue; } uInstanceNumber = _ansc_atol(pFolderName); if ( uInstanceNumber == 0 ) { AnscFreeMemory(pFolderName); continue; } pPoamIrepFoEnumUser = pPoamIrepFoUser->GetFolder((ANSC_HANDLE)pPoamIrepFoUser, pFolderName); AnscFreeMemory(pFolderName); if ( !pPoamIrepFoEnumUser ) { continue; } /* Get user.{i}.Username value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumUser->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumUser, COSA_DML_RR_NAME_UserAlias, NULL ); if ( pSlapVariable ) { pAliasUser = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } /* Get user.{i}.bNew value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumUser->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumUser, COSA_DML_RR_NAME_UserbNew, NULL ); if ( pSlapVariable ) { bNew = pSlapVariable->Variant.varBool; SlapFreeVariable(pSlapVariable); } else { bNew = TRUE; } } /* Create one entry and keep this delay_added entry */ pCosaUser = (PCOSA_DML_USER)AnscAllocateMemory(sizeof(COSA_DML_USER)); if ( !pCosaUser ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } /* set some default value firstly */ USERS_USER_SET_DEFAULTVALUE(pCosaUser); /* save alias and instanceNumber */ pCosaUser->InstanceNumber = uInstanceNumber; AnscCopyString( pCosaUser->Username, pAliasUser ); /* Create one link point */ pCosaUserContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaUserContext ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT2; } COSA_CONTEXT_LINK_INITIATION_CONTENT(pCosaUserContext) pCosaUserContext->InstanceNumber = uInstanceNumber; pCosaUserContext->hContext = (ANSC_HANDLE)pCosaUser; pCosaUser = 0; pCosaUserContext->bNew = bNew; CosaSListPushEntryByInsNum(&pMyObject->UserList, (PCOSA_CONTEXT_LINK_OBJECT)pCosaUserContext); /* release some memory */ if (pAliasUser) { AnscFreeMemory(pAliasUser); pAliasUser = NULL; } pPoamIrepFoEnumUser->Remove((ANSC_HANDLE)pPoamIrepFoEnumUser); pPoamIrepFoEnumUser = NULL; } EXIT2: if(pCosaUser) AnscFreeMemory(pCosaUser); EXIT1: if(pAliasUser) AnscFreeMemory(pAliasUser); if ( pPoamIrepFoEnumUser ) pPoamIrepFoEnumUser->Remove((ANSC_HANDLE)pPoamIrepFoEnumUser); return returnStatus; }
ANSC_STATUS CosaRAInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_RA pMyObject = (PCOSA_DATAMODEL_RA)hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoRAIF = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoRAHA = (PPOAM_IREP_FOLDER_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PCOSA_DML_RA_IF_FULL2 pRAInterface = (PCOSA_DML_RA_IF_FULL2 )NULL; PCOSA_DML_RA_OPTION pRAOption = (PCOSA_DML_RA_OPTION )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_CONTEXT_LINK_OBJECT pSubCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; char FolderName[32] = {0}; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulSubEntryCount = 0; ULONG ulSubIndex = 0; CosaDmlRAInit(NULL, NULL); /* Initiation all functions */ pMyObject->ulInterfaceCount = 0; pMyObject->ulNextInterfaceInsNum = 1; AnscSListInitializeHeader(&pMyObject->InterfaceList); pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent); pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } pPoamIrepFoRAIF = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_RAIF ); if ( !pPoamIrepFoRAIF ) { pPoamIrepFoRAIF = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_RAIF, 0 ); } if ( !pPoamIrepFoRAIF ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderRAInterface = (ANSC_HANDLE)pPoamIrepFoRAIF; } pPoamIrepFoRAHA = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoRAIF->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_RAIF_HA ); if ( !pPoamIrepFoRAHA ) { pPoamIrepFoRAHA = pPoamIrepFoRAIF->AddFolder ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_IREP_FOLDER_NAME_RAIF_HA, 0 ); } if ( !pPoamIrepFoRAHA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderRAInterfaceHA = (ANSC_HANDLE)pPoamIrepFoRAHA; } /* Retrieve the next Instance Number for RA interface */ if ( TRUE ) { _ansc_sprintf ( FolderName, "%s%d", COSA_DML_RR_NAME_RAIF_NextInsNum, 0 ); pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoRAIF->GetFolder ( (ANSC_HANDLE)pPoamIrepFoRAIF, FolderName ); AnscZeroMemory(FolderName, 32); if ( pPoamIrepFoNextIns ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNextIns, COSA_DML_RR_NAME_RAIF_NextInsNum, NULL ); if ( pSlapVariable ) { pMyObject->ulNextInterfaceInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns); pPoamIrepFoNextIns = NULL; } } /* Initialize middle layer for Device.RouterAdvertisement.InterfaceSetting.{i}. */ ulEntryCount = CosaDmlRaIfGetNumberOfEntries(NULL); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pRAInterface = (PCOSA_DML_RA_IF_FULL2)AnscAllocateMemory(sizeof(COSA_DML_RA_IF_FULL2)); if ( !pRAInterface ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } AnscSListInitializeHeader(&pRAInterface->OptionList); pRAInterface->ulNextOptionInsNum = 1; CosaDmlRaIfGetEntry(NULL, ulIndex,(PCOSA_DML_RA_IF_FULL)pRAInterface); if ( TRUE ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pRAInterface); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } if ( 0 != pRAInterface->Cfg.InstanceNumber ) { pCosaContext->InstanceNumber = pRAInterface->Cfg.InstanceNumber; if ( pMyObject->ulNextInterfaceInsNum <= pRAInterface->Cfg.InstanceNumber ) { pMyObject->ulNextInterfaceInsNum = pRAInterface->Cfg.InstanceNumber + 1; if ( 0 == pMyObject->ulNextInterfaceInsNum ) { pMyObject->ulNextInterfaceInsNum = 1; } } } else { pCosaContext->InstanceNumber = pMyObject->ulNextInterfaceInsNum; pRAInterface->Cfg.InstanceNumber = pCosaContext->InstanceNumber ; pMyObject->ulNextInterfaceInsNum++; if ( 0 == pMyObject->ulNextInterfaceInsNum ) { pMyObject->ulNextInterfaceInsNum = 1; } /* Generate Alias */ _ansc_sprintf(pRAInterface->Cfg.Alias, "Interface%d", (int)pMyObject->ulNextInterfaceInsNum); CosaDmlRaIfSetValues ( NULL, ulIndex, pRAInterface->Cfg.InstanceNumber, pRAInterface->Cfg.Alias ); } pCosaContext->hContext = (ANSC_HANDLE)pRAInterface; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; CosaSListPushEntryByInsNum(&pMyObject->InterfaceList, pCosaContext); } /* Initialize middle layer for Device.RouterAdvertisement.InterfaceSetting.{i}.Option.{i}. */ if ( TRUE ) { _ansc_sprintf ( FolderName, "%s%d", COSA_DML_RR_NAME_RAIF_OPTION_NextInsNum, (int)pRAInterface->Cfg.InstanceNumber ); pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoRAIF->GetFolder ( (ANSC_HANDLE)pPoamIrepFoRAIF, FolderName ); if ( pPoamIrepFoNextIns ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNextIns, COSA_DML_RR_NAME_RAIF_OPTION_NextInsNum, NULL ); if ( pSlapVariable ) { pRAInterface->ulNextOptionInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns); pPoamIrepFoNextIns = NULL; } } ulSubEntryCount = CosaDmlRaIfGetNumberOfOptions(NULL, pRAInterface->Cfg.InstanceNumber); for ( ulSubIndex = 0; ulSubIndex < ulSubEntryCount; ulSubIndex++ ) { pRAOption = (PCOSA_DML_RA_OPTION)AnscAllocateMemory(sizeof(COSA_DML_RA_OPTION)); if ( !pRAOption ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } CosaDmlRaIfGetOption(NULL, pRAInterface->Cfg.InstanceNumber, ulSubIndex, pRAOption); if ( TRUE ) { pSubCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pSubCosaContext ) { AnscFreeMemory(pRAOption); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } if ( 0 != pRAOption->InstanceNumber ) { pSubCosaContext->InstanceNumber = pRAOption->InstanceNumber; if ( pRAInterface->ulNextOptionInsNum <= pRAOption->InstanceNumber ) { pRAInterface->ulNextOptionInsNum = pRAOption->InstanceNumber + 1; if ( pRAInterface->ulNextOptionInsNum == 0 ) { pRAInterface->ulNextOptionInsNum = 1; } } } else { pSubCosaContext->InstanceNumber = pRAOption->InstanceNumber = pRAInterface->ulNextOptionInsNum; pRAInterface->ulNextOptionInsNum++; if ( pRAInterface->ulNextOptionInsNum == 0 ) { pRAInterface->ulNextOptionInsNum = 1; } /* Generate Alias */ _ansc_sprintf(pRAOption->Alias, "Option%d", (int)pSubCosaContext->InstanceNumber); /* TODO: Set InstanceNumber Alias back */ CosaDmlRaIfSetOptionValues ( NULL, pRAInterface->Cfg.InstanceNumber, ulSubIndex, pRAOption->InstanceNumber, pRAOption->Alias ); } pSubCosaContext->hContext = (ANSC_HANDLE)pRAOption; pSubCosaContext->hParentTable = (ANSC_HANDLE)pRAInterface; pSubCosaContext->bNew = FALSE; CosaSListPushEntryByInsNum(&pRAInterface->OptionList, pSubCosaContext); } } } CosaRaRegGetInfo((ANSC_HANDLE)pMyObject); EXIT: return returnStatus; }
ANSC_STATUS CosaDdnsInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_DDNS pMyObject = (PCOSA_DATAMODEL_DDNS )hThisObject; PSLIST_HEADER pListHead = (PSLIST_HEADER )&pMyObject->ContextHead; PCOSA_DML_DDNS_CFG pDdnsCfg = (PCOSA_DML_DDNS_CFG )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_DML_DDNS_SERVICE pDdnsService = (PCOSA_DML_DDNS_SERVICE )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoDdns = (PPOAM_IREP_FOLDER_OBJECT )NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; ULONG ulServiceCount = 0; ULONG ulIndex = 0; returnStatus = CosaDmlDdnsInit(NULL, NULL); if ( returnStatus != ANSC_STATUS_SUCCESS ) { return returnStatus; } /* Initiation all functions */ pMyObject->ulNextInstance = 1; AnscSListInitializeHeader(&pMyObject->ContextHead); pDdnsCfg = AnscAllocateMemory(sizeof(COSA_DML_DDNS_CFG)); if ( !pDdnsCfg ) { CcspTraceWarning(("X_CISCO_COM_DDNS Resource allocation error\n")); return ANSC_STATUS_RESOURCES; } returnStatus = CosaDmlDdnsGetConfig(NULL, pDdnsCfg); if ( returnStatus != ANSC_STATUS_SUCCESS ) { goto EXIT1; } pMyObject->DdnsConfig.bEnabled = pDdnsCfg->bEnabled; pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent); pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } pPoamIrepFoDdns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_DDNS ); if ( !pPoamIrepFoDdns ) { pPoamIrepFoDdns = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_DDNS, 0 ); } if ( !pPoamIrepFoDdns ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } else { pMyObject->hIrepFolderDdns = (ANSC_HANDLE)pPoamIrepFoDdns; } /* Retrieve Next Instance Number */ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoDdns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoDdns, COSA_DML_RR_NAME_DdnsServiceNextInsNumber, NULL ); if ( pSlapVariable ) { pMyObject->ulNextInstance = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } } /* Initialize middle layer */ ulServiceCount = CosaDmlDdnsGetNumberOfServices(NULL); for ( ulIndex = 0; ulIndex < ulServiceCount; ulIndex++ ) { pDdnsService = (PCOSA_DML_DDNS_SERVICE)AnscAllocateMemory(sizeof(COSA_DML_DDNS_SERVICE)); if ( !pDdnsService ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } returnStatus = CosaDmlDdnsGetService(NULL, ulIndex, pDdnsService); if ( returnStatus == ANSC_STATUS_SUCCESS ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT2; } if ( pDdnsService->InstanceNumber != 0 ) { pCosaContext->InstanceNumber = pDdnsService->InstanceNumber; if ( pMyObject->ulNextInstance <= pDdnsService->InstanceNumber ) { pMyObject->ulNextInstance = pDdnsService->InstanceNumber + 1; if ( pMyObject->ulNextInstance == 0 ) { pMyObject->ulNextInstance = 1; } } } else { pDdnsService->InstanceNumber = pCosaContext->InstanceNumber = pMyObject->ulNextInstance; pMyObject->ulNextInstance++; if ( pMyObject->ulNextInstance == 0 ) { pMyObject->ulNextInstance = 1; } /* Generate Alias */ _ansc_sprintf(pDdnsService->Alias, "DdnsService%d", pCosaContext->InstanceNumber); returnStatus = CosaDmlDdnsServiceSetValues ( NULL, ulIndex, pCosaContext->InstanceNumber, pDdnsService->Alias ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { CcspTraceWarning(("!!! CosaDmlDdnsServiceSetValues index: %d-- fail !!!\n", ulIndex)); AnscFreeMemory(pDdnsService); AnscFreeMemory(pCosaContext); continue; } } pCosaContext->hContext = (ANSC_HANDLE)pDdnsService; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; CosaSListPushEntryByInsNum(pListHead, pCosaContext); } } /* Load the newly added but not yet committed entries, if exist */ CosaDdnsRegGetDdnsInfo((ANSC_HANDLE)pMyObject); goto EXIT1; EXIT2: AnscFreeMemory(pDdnsService); EXIT1: AnscFreeMemory(pDdnsCfg); return returnStatus; }
ANSC_STATUS CosaRaRegGetInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_RA pMyObject = (PCOSA_DATAMODEL_RA)hThisObject; PSLIST_HEADER pRAIFHead = (PSLIST_HEADER)&pMyObject->InterfaceList; PCOSA_DML_RA_IF_FULL2 pRAInterface = (PCOSA_DML_RA_IF_FULL2)NULL; PCOSA_DML_RA_IF_FULL2 pRAEntry = (PCOSA_DML_RA_IF_FULL2)NULL; PCOSA_DML_RA_OPTION pRAOption = (PCOSA_DML_RA_OPTION)NULL; PSINGLE_LINK_ENTRY pLink = (PSINGLE_LINK_ENTRY )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PCOSA_CONTEXT_LINK_OBJECT pSubCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoRAHA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderRAInterfaceHA; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoRAIF = (PPOAM_IREP_FOLDER_OBJECT)NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG ulInstanceNumber = 0; ULONG ulUpperInstanceNumber = 0; char* pFolderName = NULL; char* pAlias = NULL; if ( !pPoamIrepFoRAHA ) { return ANSC_STATUS_FAILURE; } /* Load the newly added but not yet commited entries */ ulEntryCount = pPoamIrepFoRAHA->GetFolderCount((ANSC_HANDLE)pPoamIrepFoRAHA); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { pFolderName = pPoamIrepFoRAHA->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoRAHA, ulIndex ); if ( !pFolderName ) { continue; } pPoamIrepFoRAIF = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoRAHA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoRAHA, pFolderName ); if ( !pPoamIrepFoRAIF ) { continue; } if ( _ansc_strstr(pFolderName, COSA_DML_RR_NAME_RAIF_Prefix) ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoRAIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_DML_RR_NAME_RAIF_InsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoRAIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_DML_RR_NAME_RAIF_Alias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pRAInterface = (PCOSA_DML_RA_IF_FULL2)AnscAllocateMemory(sizeof(COSA_DML_RA_IF_FULL2)); if ( !pRAInterface ) { AnscFreeMemory(pCosaContext); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } AnscSListInitializeHeader(&pRAInterface->OptionList); pRAInterface->ulNextOptionInsNum = 1; pRAInterface->Cfg.InstanceNumber = ulInstanceNumber; AnscCopyString(pRAInterface->Cfg.Alias, pAlias); pCosaContext->InstanceNumber = ulInstanceNumber; pCosaContext->bNew = TRUE; pCosaContext->hContext = (ANSC_HANDLE)pRAInterface; pCosaContext->hParentTable = NULL; pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoRAHA; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoRAIF; CosaSListPushEntryByInsNum(pRAIFHead, pCosaContext); } else { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoRAIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_DML_RR_NAME_RAIF_Upper_InsNum, NULL ); if ( pSlapVariable ) { ulUpperInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } if ( ulUpperInstanceNumber != 0 ) { pLink = AnscSListGetFirstEntry(pRAIFHead); while ( pLink ) { pCosaContext = ACCESS_COSA_CONTEXT_LINK_OBJECT(pLink); pLink = AnscSListGetNextEntry(pLink); pRAEntry = (PCOSA_DML_RA_IF_FULL2)pCosaContext->hContext; if ( pRAEntry && (pRAEntry->Cfg.InstanceNumber == ulUpperInstanceNumber) ) { break; } } if ( !pRAEntry ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } } else { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoRAIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_DML_RR_NAME_RAIF_InsNum, NULL ); if ( pSlapVariable ) { ulInstanceNumber = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoRAIF->GetRecord ( (ANSC_HANDLE)pPoamIrepFoRAIF, COSA_DML_RR_NAME_RAIF_Alias, NULL ); if ( pSlapVariable ) { pAlias = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } if ( _ansc_strstr(pFolderName, COSA_DML_RR_NAME_RAIF_OPTION_Prefix) ) { pRAOption = (PCOSA_DML_RA_OPTION)AnscAllocateMemory(sizeof(COSA_DML_RA_OPTION)); if ( !pRAOption ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pSubCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pSubCosaContext ) { AnscFreeMemory(pRAOption); returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } pRAOption->InstanceNumber = ulInstanceNumber; AnscCopyString(pRAOption->Alias, pAlias); pSubCosaContext->InstanceNumber = ulInstanceNumber; pSubCosaContext->hContext = (ANSC_HANDLE)pRAOption; pSubCosaContext->hParentTable = (ANSC_HANDLE)pRAEntry; pSubCosaContext->bNew = TRUE; pSubCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoRAHA; pSubCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoRAIF; CosaSListPushEntryByInsNum(&pRAEntry->OptionList, pSubCosaContext); } } if ( pAlias ) { AnscFreeMemory(pAlias); pAlias = NULL; } if ( pFolderName ) { AnscFreeMemory(pFolderName); pFolderName = NULL; } } EXIT: if ( pAlias ) { AnscFreeMemory(pAlias); } return returnStatus; }
ANSC_STATUS CosaDdnsRegAddDdnsInfo ( ANSC_HANDLE hThisObject, ANSC_HANDLE hCosaContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_DDNS pMyObject = (PCOSA_DATAMODEL_DDNS )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoDdns = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderDdns; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoDdnsSp = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)hCosaContext; PCOSA_DML_DDNS_SERVICE pDdnsService = (PCOSA_DML_DDNS_SERVICE )pCosaContext->hContext; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; if ( !pPoamIrepFoDdns ) { return ANSC_STATUS_FAILURE; } else { pPoamIrepFoDdns->EnableFileSync((ANSC_HANDLE)pPoamIrepFoDdns, FALSE); } if ( TRUE ) { SlapAllocVariable(pSlapVariable); if ( !pSlapVariable ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } } if ( TRUE ) { returnStatus = pPoamIrepFoDdns->DelRecord ( (ANSC_HANDLE)pPoamIrepFoDdns, COSA_DML_RR_NAME_DdnsServiceNextInsNumber ); pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pMyObject->ulNextInstance; returnStatus = pPoamIrepFoDdns->AddRecord ( (ANSC_HANDLE)pPoamIrepFoDdns, COSA_DML_RR_NAME_DdnsServiceNextInsNumber, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pPoamIrepFoDdnsSp = pPoamIrepFoDdns->AddFolder ( (ANSC_HANDLE)pPoamIrepFoDdns, pDdnsService->Alias, 0 ); if ( !pPoamIrepFoDdnsSp ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pDdnsService->InstanceNumber; returnStatus = pPoamIrepFoDdnsSp->AddRecord ( (ANSC_HANDLE)pPoamIrepFoDdnsSp, COSA_DML_RR_NAME_DdnsServiceInsNum, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pDdnsService->Alias); returnStatus = pPoamIrepFoDdnsSp->AddRecord ( (ANSC_HANDLE)pPoamIrepFoDdnsSp, COSA_DML_RR_NAME_DdnsServiceAlias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pCosaContext->hPoamIrepUpperFo = (ANSC_HANDLE)pPoamIrepFoDdns; pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFoDdnsSp; } EXIT1: if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); } pPoamIrepFoDdns->EnableFileSync((ANSC_HANDLE)pPoamIrepFoDdns, TRUE); return returnStatus; }
ANSC_STATUS CosaRARegAddInfo ( ANSC_HANDLE hThisObject, char* pNextInsNumName, ULONG ulNextInsNum, char* pPreffix, ULONG ulUpperInsNum, char* pAlias, ANSC_HANDLE hCosaContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_RA pMyObject = (PCOSA_DATAMODEL_RA )hThisObject; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)hCosaContext; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoRAIF = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderRAInterface; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoUpper = (PPOAM_IREP_FOLDER_OBJECT )pCosaContext->hPoamIrepUpperFo; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFo = (PPOAM_IREP_FOLDER_OBJECT )NULL; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; char FolderName[32] = {0}; if ( !pPoamIrepFoRAIF || !pPoamIrepFoUpper ) { return ANSC_STATUS_FAILURE; } else { pPoamIrepFoRAIF->EnableFileSync((ANSC_HANDLE)pPoamIrepFoRAIF, FALSE); } if ( TRUE ) { SlapAllocVariable(pSlapVariable); if ( !pSlapVariable ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } } _ansc_sprintf(FolderName, "%s%d", pNextInsNumName, (int)ulUpperInsNum); if ( TRUE ) { pPoamIrepFo = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoRAIF->GetFolder ( (ANSC_HANDLE)pPoamIrepFoRAIF, FolderName ); if ( !pPoamIrepFo ) { pPoamIrepFo = pPoamIrepFoRAIF->AddFolder ( (ANSC_HANDLE)pPoamIrepFoRAIF, FolderName, 0 ); } } if ( TRUE ) { returnStatus = pPoamIrepFo->DelRecord ( (ANSC_HANDLE)pPoamIrepFo, pNextInsNumName ); pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = ulNextInsNum; returnStatus = pPoamIrepFo->AddRecord ( (ANSC_HANDLE)pPoamIrepFo, pNextInsNumName, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pPoamIrepFo->Remove((ANSC_HANDLE)pPoamIrepFo); pPoamIrepFo = NULL; if ( TRUE ) { _ansc_sprintf(FolderName, "%s%d%d", pPreffix, (int)ulUpperInsNum, (int)pCosaContext->InstanceNumber); pPoamIrepFo = pPoamIrepFoUpper->AddFolder ( (ANSC_HANDLE)pPoamIrepFoUpper, FolderName, 0 ); if ( !pPoamIrepFo ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } if ( 0 != ulUpperInsNum ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = ulUpperInsNum; returnStatus = pPoamIrepFo->AddRecord ( (ANSC_HANDLE)pPoamIrepFo, COSA_DML_RR_NAME_RAIF_Upper_InsNum, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_uint32; pSlapVariable->Variant.varUint32 = pCosaContext->InstanceNumber; returnStatus = pPoamIrepFo->AddRecord ( (ANSC_HANDLE)pPoamIrepFo, COSA_DML_RR_NAME_RAIF_InsNum, SYS_REP_RECORD_TYPE_UINT, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } if ( TRUE ) { pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = AnscCloneString(pAlias); returnStatus = pPoamIrepFo->AddRecord ( (ANSC_HANDLE)pPoamIrepFo, COSA_DML_RR_NAME_RAIF_Alias, SYS_REP_RECORD_TYPE_ASTR, SYS_RECORD_CONTENT_DEFAULT, pSlapVariable, 0 ); SlapCleanVariable(pSlapVariable); SlapInitVariable (pSlapVariable); } pCosaContext->hPoamIrepFo = (ANSC_HANDLE)pPoamIrepFo; } EXIT1: if ( pSlapVariable ) { SlapFreeVariable(pSlapVariable); } pPoamIrepFoRAIF->EnableFileSync((ANSC_HANDLE)pPoamIrepFoRAIF, TRUE); return returnStatus; }
ANSC_STATUS CosaNatRegGetNatInfo ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_NAT pMyObject = ( PCOSA_DATAMODEL_NAT )hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNat = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderNat; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNatPt = (PPOAM_IREP_FOLDER_OBJECT )pMyObject->hIrepFolderNatPt; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoEnumNat = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_PMAPPING_LINK_OBJECT pCosaNatContext = NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaNatPtContext = NULL; PCOSA_DML_NAT_PMAPPING pCosaNat = NULL; PCOSA_DML_NAT_PTRIGGER pCosaNatPt = NULL; PSLAP_VARIABLE pSlapVariable = NULL; ULONG ulEntryCount = 0; ULONG ulIndex = 0; ULONG uInstanceNumber = 0; BOOL bNew = FALSE; char* pAliasNat = NULL; char* pFolderName = NULL; CcspTraceWarning(("!!!!!! In CosaNatRegGetNatInfo !!!!!!\n")); if ( !pPoamIrepFoNat || !pPoamIrepFoNatPt ) { CcspTraceWarning(("!!!!!! pPoamIrepFoNat: %p, pPoamIrepFoNatPt: %p !!!!!!\n", pPoamIrepFoNat, pPoamIrepFoNatPt)); return ANSC_STATUS_FAILURE; } /* This is saved structure for nat ***************************************** <Nat> <1> <alias>xxx</> <bNew>false</> </1> <2> <alias>xxx</> <bNew>false</> </2> </Nat> **************************************************** */ /* enumerate Portmapping.{i} */ ulEntryCount = pPoamIrepFoNat->GetFolderCount((ANSC_HANDLE)pPoamIrepFoNat); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { /* Get i in Portmapping.{i} */ pFolderName = pPoamIrepFoNat->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoNat, ulIndex ); if ( !pFolderName ) { continue; } uInstanceNumber = _ansc_atol(pFolderName); if ( uInstanceNumber == 0 ) { AnscFreeMemory(pFolderName); continue; } pPoamIrepFoEnumNat = pPoamIrepFoNat->GetFolder((ANSC_HANDLE)pPoamIrepFoNat, pFolderName); AnscFreeMemory(pFolderName); if ( !pPoamIrepFoEnumNat ) { continue; } /* Get PortMapping.{i}.Alias value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumNat->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATAlias, NULL ); if ( pSlapVariable ) { pAliasNat = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } /* Get PortMapping.{i}.bNew value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumNat->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATbNew, NULL ); if ( pSlapVariable ) { bNew = pSlapVariable->Variant.varBool; SlapFreeVariable(pSlapVariable); } else { bNew = TRUE; } } /* Create one entry and keep this delay_added entry */ pCosaNat = (PCOSA_DML_NAT_PMAPPING)AnscAllocateMemory(sizeof(COSA_DML_NAT_PMAPPING)); if ( !pCosaNat ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT1; } /* set some default value firstly */ NAT_PORTMAPPING_SET_DEFAULTVALUE(pCosaNat); /* save alias and instanceNumber */ pCosaNat->InstanceNumber = uInstanceNumber; AnscCopyString( pCosaNat->Alias, pAliasNat ); /* Create one link point */ pCosaNatContext = (PCOSA_CONTEXT_PMAPPING_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_PMAPPING_LINK_OBJECT)); if ( !pCosaNatContext ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT2; } NAT_PMAPPING_INITIATION_CONTEXT(pCosaNatContext) pCosaNatContext->InstanceNumber = pCosaNat->InstanceNumber; pCosaNatContext->hContext = (ANSC_HANDLE)pCosaNat; pCosaNat = 0; pCosaNatContext->bNew = bNew; CosaSListPushEntryByInsNum(&pMyObject->NatPMappingList, (PCOSA_CONTEXT_LINK_OBJECT)pCosaNatContext); /* release some memory */ if (pAliasNat) { AnscFreeMemory(pAliasNat); pAliasNat = NULL; } pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); pPoamIrepFoEnumNat = NULL; } /* This is saved structure for nat port trigger ***************************************** <Nat> <PortTrigger> <Record>NextInsNumber</Record> <1> <alias>xxx</> <bNew>true</> </1> <2> <alias>xxx</> <bNew>true</> </2> </PortTrigger> </Nat> **************************************************** */ /* enumerate PortTrigger.{i} */ ulEntryCount = pPoamIrepFoNatPt->GetFolderCount((ANSC_HANDLE)pPoamIrepFoNatPt); CcspTraceWarning(("!!!!!! ulEntryCount for PortTrigger: %d !!!!!!\n", ulEntryCount)); for ( ulIndex = 0; ulIndex < ulEntryCount; ulIndex++ ) { /* Get i in PortTrigger.{i} */ pFolderName = pPoamIrepFoNatPt->EnumFolder ( (ANSC_HANDLE)pPoamIrepFoNatPt, ulIndex ); CcspTraceWarning(("!!!!!! pFolderName: %s !!!!!!\n", pFolderName)); if ( !pFolderName ) { continue; } uInstanceNumber = _ansc_atol(pFolderName); if ( uInstanceNumber == 0 ) { AnscFreeMemory(pFolderName); continue; } pPoamIrepFoEnumNat = pPoamIrepFoNatPt->GetFolder((ANSC_HANDLE)pPoamIrepFoNatPt, pFolderName); AnscFreeMemory(pFolderName); if ( !pPoamIrepFoEnumNat ) { continue; } /* Get PortTrigger.{i}.Alias value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumNat->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATAlias, NULL ); if ( pSlapVariable ) { pAliasNat = AnscCloneString(pSlapVariable->Variant.varString); SlapFreeVariable(pSlapVariable); } } /* Get PortTrigger.{i}.bNew value*/ if ( TRUE ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoEnumNat->GetRecord ( (ANSC_HANDLE)pPoamIrepFoEnumNat, COSA_DML_RR_NAME_NATbNew, NULL ); if ( pSlapVariable ) { bNew = pSlapVariable->Variant.varBool; SlapFreeVariable(pSlapVariable); } else { bNew = TRUE; } } /* Create one entry and keep this delay_added entry */ pCosaNatPt = (PCOSA_DML_NAT_PTRIGGER)AnscAllocateMemory(sizeof(COSA_DML_NAT_PTRIGGER)); if ( !pCosaNatPt ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } /* set some default value firstly */ COSA_DML_NAT_PTRIGGER_INIT(pCosaNatPt); /* save alias and instanceNumber */ pCosaNatPt->InstanceNumber = uInstanceNumber; AnscCopyString( pCosaNatPt->Alias, pAliasNat ); CcspTraceWarning(("!!!!!! pCosaNatPt->InstanceNumber: %d, pCosaNatPt->Alias: %s !!!!!!\n", pCosaNatPt->InstanceNumber, pCosaNatPt->Alias)); /* Create one link point */ pCosaNatPtContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaNatPtContext ) { AnscFreeMemory(pCosaNatPt); /*RDKB-6742, CID-33206, Free unused resources after use*/ pCosaNatPt = NULL; returnStatus = ANSC_STATUS_FAILURE; goto EXIT2; } COSA_CONTEXT_LINK_INITIATION_CONTENT(pCosaNatPtContext) pCosaNatPtContext->InstanceNumber = pCosaNatPt->InstanceNumber; pCosaNatPtContext->hContext = (ANSC_HANDLE)pCosaNatPt; pCosaNatPtContext->bNew = bNew; CosaSListPushEntryByInsNum(&pMyObject->NatPTriggerList, (PCOSA_CONTEXT_LINK_OBJECT)pCosaNatPtContext); /* release some memory */ if (pAliasNat) { AnscFreeMemory(pAliasNat); pAliasNat = NULL; } pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); pPoamIrepFoEnumNat = NULL; } EXIT2: if(pCosaNat) AnscFreeMemory(pCosaNat); EXIT1: if(pAliasNat) AnscFreeMemory(pAliasNat); if ( pPoamIrepFoEnumNat ) pPoamIrepFoEnumNat->Remove((ANSC_HANDLE)pPoamIrepFoEnumNat); return returnStatus; }
ANSC_STATUS SlapScoGalDelVariable ( 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; if ( !param_list || (param_list->ParamCount < 1) ) { 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; } pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName ( (ANSC_HANDLE)pAtoVariable, param_list->ParamArray[0].Variant.varString ); if ( !pAtomDescriptor ) { return ANSC_STATUS_CANT_FIND; } else { pGalVariable = (PSLAP_VARIABLE)pAtomDescriptor->hContext; returnStatus = pMyObject->QuitGallery ( (ANSC_HANDLE)pMyObject, pGalVariable ); if ( pGalVariable ) { SlapFreeVariable(pGalVariable); } } returnStatus = pAtoVariable->DelAtomByName ( pAtoVariable, param_list->ParamArray[0].Variant.varString ); return returnStatus; }
ANSC_STATUS SlapSpoGoaToPoaVariable ( ANSC_HANDLE hThisObject, SLAP_VARIABLE* slap_var ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SRV_PROXY_OBJECT pMyObject = (PSLAP_SRV_PROXY_OBJECT)hThisObject; PSLAP_GOA_INTERFACE pSlapGoaIf = (PSLAP_GOA_INTERFACE )pMyObject->hSlapGoaIf; PSLAP_POA_INTERFACE pSlapPoaIf = (PSLAP_POA_INTERFACE )pMyObject->hSlapPoaIf; PSLAP_SRV_PROXY_OBJECT pSlapSrvProxy = (PSLAP_SRV_PROXY_OBJECT)NULL; char* pSlapObjName = (char* )NULL; PSLAP_PARAMETER_LIST pOutputParamList = (PSLAP_PARAMETER_LIST )NULL; PSLAP_VARIABLE pReturnedVar = (PSLAP_VARIABLE )NULL; ULONG i = 0; SLAP_PARAMETER_LIST inputParamList; if ( !slap_var ) { return ANSC_STATUS_FAILURE; } switch ( slap_var->Syntax ) { case SLAP_VAR_SYNTAX_object : if ( slap_var->Variant.varObject ) { if ( slap_var->Name ) { pSlapObjName = slap_var->Name; } else { if ( TRUE ) { inputParamList.ParamCount = 0; returnStatus = pSlapGoaIf->InvokeObject ( pSlapGoaIf->hOwnerContext, slap_var->Variant.varObject, (ANSC_HANDLE)NULL, "GetObjName", &inputParamList, &pOutputParamList, &pReturnedVar ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { return returnStatus; } else if ( !pReturnedVar || (pReturnedVar->Syntax != SLAP_VAR_SYNTAX_string) || (pReturnedVar->Variant.varString == NULL ) ) { return ANSC_STATUS_FAILURE; } else { pSlapObjName = pReturnedVar->Variant.varString; } } } pSlapSrvProxy = (PSLAP_SRV_PROXY_OBJECT)pSlapPoaIf->CreateProxyObject ( pSlapPoaIf->hOwnerContext, pSlapObjName, slap_var->Variant.varObject ); if ( !pSlapSrvProxy ) { return ANSC_STATUS_FAILURE; } else { slap_var->Variant.varObject = (ANSC_HANDLE)pSlapSrvProxy; } if ( TRUE ) { if ( pOutputParamList ) { SlapFreeParamList(pOutputParamList); pOutputParamList = NULL; } if ( pReturnedVar ) { SlapFreeVariable(pReturnedVar); pReturnedVar = NULL; } } } break; case SLAP_VAR_SYNTAX_objectArray : if ( slap_var->Variant.varObjectArray ) { for ( i = 0; i < slap_var->Variant.varObjectArray->VarCount; i++ ) { if ( slap_var->Variant.varObjectArray->Array.arrayObject[i] ) { if ( slap_var->Name ) { pSlapObjName = slap_var->Name; } else { if ( TRUE ) { inputParamList.ParamCount = 0; returnStatus = pSlapGoaIf->InvokeObject ( pSlapGoaIf->hOwnerContext, slap_var->Variant.varObjectArray->Array.arrayObject[i], (ANSC_HANDLE)NULL, "GetObjName", &inputParamList, &pOutputParamList, &pReturnedVar ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { return returnStatus; } else if ( !pReturnedVar || (pReturnedVar->Syntax != SLAP_VAR_SYNTAX_string) || (pReturnedVar->Variant.varString == NULL ) ) { return ANSC_STATUS_FAILURE; } else { pSlapObjName = pReturnedVar->Variant.varString; } } } pSlapSrvProxy = (PSLAP_SRV_PROXY_OBJECT)pSlapPoaIf->CreateProxyObject ( pSlapPoaIf->hOwnerContext, pSlapObjName, slap_var->Variant.varObjectArray->Array.arrayObject[i] ); if ( !pSlapSrvProxy ) { return ANSC_STATUS_FAILURE; } else { slap_var->Variant.varObjectArray->Array.arrayObject[i] = (ANSC_HANDLE)pSlapSrvProxy; } if ( TRUE ) { if ( pOutputParamList ) { SlapFreeParamList(pOutputParamList); pOutputParamList = NULL; } if ( pReturnedVar ) { SlapFreeVariable(pReturnedVar); pReturnedVar = NULL; } } } } } break; default : break; } return ANSC_STATUS_SUCCESS; }
ANSC_STATUS CosaBridgingInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_BRIDGING pMyObject = (PCOSA_DATAMODEL_BRIDGING)hThisObject; PSLAP_VARIABLE pSlapVariable = (PSLAP_VARIABLE )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoBRG = (PPOAM_IREP_FOLDER_OBJECT )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoBRGHA = (PPOAM_IREP_FOLDER_OBJECT )NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext2 = (PCOSA_CONTEXT_LINK_OBJECT )NULL; PCOSA_CONTEXT_LINK_OBJECT pCosaContext3 = (PCOSA_CONTEXT_LINK_OBJECT )NULL; PCOSA_DML_BRG_FULL_ALL pDmlBridge = (PCOSA_DML_BRG_FULL_ALL )NULL; PCOSA_DML_BRG_PORT_FULL pPort = (PCOSA_DML_BRG_PORT_FULL )NULL; ULONG ulBridgeCount = 0; ULONG ulSubCount = 0; ULONG ulIndex = 0; ULONG ulSubIndex = 0; char FolderName[32] = {0}; PCOSA_DML_BRG_VLAN_FULL pVLAN = (PCOSA_DML_BRG_VLAN_FULL )NULL; /* Initiation all functions */ //$HL 4/24/2013 pMyObject->ulNextBridgeInstance = 1; AnscSListInitializeHeader(&pMyObject->BridgeList); //$HL 4/25/2013 pMyObject->BridgeList.Depth = 0; pMyObject->hIrepFolderCOSA = g_GetRegistryRootFolder(g_pDslhDmlAgent); pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)pMyObject->hIrepFolderCOSA; if ( !pPoamIrepFoCOSA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } pPoamIrepFoBRG = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_BRIDGING ); if ( !pPoamIrepFoBRG ) { pPoamIrepFoBRG = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_BRIDGING, 0 ); } if ( !pPoamIrepFoBRG ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderBRG = (ANSC_HANDLE)pPoamIrepFoBRG; } pPoamIrepFoBRGHA = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_BRIDGINGHA ); if ( !pPoamIrepFoBRGHA ) { pPoamIrepFoBRGHA = pPoamIrepFoBRG->AddFolder ( (ANSC_HANDLE)pPoamIrepFoBRG, COSA_IREP_FOLDER_NAME_BRIDGINGHA, 0 ); } if ( !pPoamIrepFoBRGHA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderBRGHA = (ANSC_HANDLE)pPoamIrepFoBRGHA; } if ( TRUE ) { _ansc_sprintf ( FolderName, "%s%d", COSA_DML_RR_NAME_Bridge_NextInsNunmber, 0 ); pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder ( (ANSC_HANDLE)pPoamIrepFoBRG, FolderName ); AnscZeroMemory(FolderName, 32); if ( pPoamIrepFoNextIns ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNextIns, COSA_DML_RR_NAME_Bridge_NextInsNunmber, NULL ); if ( pSlapVariable ) { pMyObject->ulNextBridgeInstance = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns); pPoamIrepFoNextIns = NULL; } } ulBridgeCount = CosaDmlBrgGetNumberOfEntries(NULL); for ( ulIndex = 0; ulIndex < ulBridgeCount; ulIndex++ ) { pDmlBridge = (PCOSA_DML_BRG_FULL_ALL)AnscAllocateMemory(sizeof(COSA_DML_BRG_FULL_ALL)); _ansc_memset(pDmlBridge, 0, sizeof(COSA_DML_BRG_FULL_ALL)); if ( !pDmlBridge ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } AnscSListInitializeHeader(&pDmlBridge->PortList); AnscSListInitializeHeader(&pDmlBridge->VLANList); AnscSListInitializeHeader(&pDmlBridge->VLANPortList); pDmlBridge->ulNextPortInsNum = 1; pDmlBridge->ulNextVLANInsNum = 1; pDmlBridge->ulNextVLANPortInsNum = 1; //$HL 4/25/2013 if (CosaDmlBrgGetEntry(NULL, ulIndex, (PCOSA_DML_BRG_FULL)pDmlBridge)!= ANSC_STATUS_SUCCESS) { AnscFreeMemory(pDmlBridge); break; } else //if ( TRUE ) { pCosaContext = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); _ansc_memset(pCosaContext, 0, sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext ) { AnscFreeMemory(pDmlBridge); returnStatus = ANSC_STATUS_RESOURCES; AnscTraceFlow(("<HL>%s cannot allocate pCosaContext\n", __FUNCTION__)); goto EXIT; } if ( pDmlBridge->Cfg.InstanceNumber !=0 ) { pCosaContext->InstanceNumber = pDmlBridge->Cfg.InstanceNumber; if ( pMyObject->ulNextBridgeInstance <= pDmlBridge->Cfg.InstanceNumber ) { pMyObject->ulNextBridgeInstance = pDmlBridge->Cfg.InstanceNumber + 1; if ( pMyObject->ulNextBridgeInstance == 0 ) { pMyObject->ulNextBridgeInstance = 1; } } } else { pDmlBridge->Cfg.InstanceNumber = pCosaContext->InstanceNumber = pMyObject->ulNextBridgeInstance; pMyObject->ulNextBridgeInstance++; if ( pMyObject->ulNextBridgeInstance == 0) { pMyObject->ulNextBridgeInstance = 1; } _ansc_sprintf(pDmlBridge->Cfg.Alias, "DmlBridge%d", pMyObject->ulNextBridgeInstance); CosaDmlBrgSetValues(NULL, ulIndex, pDmlBridge->Cfg.InstanceNumber, pDmlBridge->Cfg.Alias); } pCosaContext->hContext = (ANSC_HANDLE)pDmlBridge; pCosaContext->hParentTable = NULL; pCosaContext->bNew = FALSE; //$HL 4/29/2013 //pCosaContext->hPoamIrepUpperFo = NULL; CosaSListPushEntryByInsNum(&pMyObject->BridgeList, pCosaContext); } /* Port */ if ( TRUE ) { _ansc_sprintf ( FolderName, "%s%d", COSA_DML_RR_NAME_Bridge_Port_NextInsNumber, pDmlBridge->Cfg.InstanceNumber ); pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder ( (ANSC_HANDLE)pPoamIrepFoBRG, FolderName ); if ( pPoamIrepFoNextIns ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNextIns, COSA_DML_RR_NAME_Bridge_Port_NextInsNumber, NULL ); if ( pSlapVariable ) { pDmlBridge->ulNextPortInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } else { AnscTraceFlow(("<HL>%s pSlapVariable == NULL\n", __FUNCTION__)); } pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns); pPoamIrepFoNextIns = NULL; } else { AnscTraceFlow(("<HL>%s pPoamIrepFoNextIns == NULL\n", __FUNCTION__)); } } ulSubCount = CosaDmlBrgPortGetNumberOfEntries(NULL, pDmlBridge->Cfg.InstanceNumber); for ( ulSubIndex = 0; ulSubIndex < ulSubCount; ulSubIndex++ ) { pPort = (PCOSA_DML_BRG_PORT_FULL)AnscAllocateMemory(sizeof(COSA_DML_BRG_PORT_FULL)); if ( !pPort ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } _ansc_memset(pPort, 0, sizeof(COSA_DML_BRG_PORT_FULL)); if(CosaDmlBrgPortGetEntry(NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pPort) != ANSC_STATUS_SUCCESS) { AnscFreeMemory(pPort); break; } else { pCosaContext2 = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext2 ) { AnscFreeMemory(pPort); returnStatus = ANSC_STATUS_RESOURCES; AnscTraceFlow(("<$HL> %s bridge instance:%d cannot allocate any memory for pCosaContext2\n",__FUNCTION__, pDmlBridge->Cfg.InstanceNumber)); AnscFreeMemory(pPort); goto EXIT; } _ansc_memset(pCosaContext2, 0, sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( pPort->Cfg.InstanceNumber != 0 ) { pCosaContext2->InstanceNumber = pPort->Cfg.InstanceNumber; if ( pDmlBridge->ulNextPortInsNum <= pPort->Cfg.InstanceNumber ) { pDmlBridge->ulNextPortInsNum = pPort->Cfg.InstanceNumber + 1; if ( pDmlBridge->ulNextPortInsNum == 0 ) { pDmlBridge->ulNextPortInsNum = 1; } } } else { pCosaContext2->InstanceNumber = pPort->Cfg.InstanceNumber = pDmlBridge->ulNextPortInsNum; pDmlBridge->ulNextPortInsNum++; if ( pDmlBridge->ulNextPortInsNum == 0 ) { pDmlBridge->ulNextPortInsNum = 1; } _ansc_sprintf(pPort->Cfg.Alias, "Port%d", pCosaContext2->InstanceNumber); CosaDmlBrgPortSetValues ( NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pPort->Cfg.InstanceNumber, pPort->Cfg.Alias ); } pCosaContext2->hContext = (ANSC_HANDLE)pPort; pCosaContext2->hParentTable = (ANSC_HANDLE)pDmlBridge; pCosaContext2->bNew = FALSE; CosaSListPushEntryByInsNum(&pDmlBridge->PortList, pCosaContext2); } } //$HL 7/3/2013 /* VLAN */ if ( TRUE ) { _ansc_sprintf ( FolderName, "%s%d", COSA_DML_RR_NAME_Bridge_VLAN_NextInsNumber, pDmlBridge->Cfg.InstanceNumber ); pPoamIrepFoNextIns = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoBRG->GetFolder ( (ANSC_HANDLE)pPoamIrepFoBRG, FolderName ); if ( pPoamIrepFoNextIns ) { pSlapVariable = (PSLAP_VARIABLE)pPoamIrepFoNextIns->GetRecord ( (ANSC_HANDLE)pPoamIrepFoNextIns, COSA_DML_RR_NAME_Bridge_VLAN_NextInsNumber, NULL ); if ( pSlapVariable ) { pDmlBridge->ulNextVLANInsNum = pSlapVariable->Variant.varUint32; SlapFreeVariable(pSlapVariable); } else { AnscTraceFlow(("<HL>%s pSlapVariable == NULL\n", __FUNCTION__)); } pPoamIrepFoNextIns->Remove((ANSC_HANDLE)pPoamIrepFoNextIns); pPoamIrepFoNextIns = NULL; } else { AnscTraceFlow(("<HL>%s pPoamIrepFoNextIns == NULL\n", __FUNCTION__)); } } ulSubCount = CosaDmlBrgVlanGetNumberOfEntries(NULL, pDmlBridge->Cfg.InstanceNumber); for ( ulSubIndex = 0; ulSubIndex < ulSubCount; ulSubIndex++ ) { pVLAN = (PCOSA_DML_BRG_VLAN_FULL)AnscAllocateMemory(sizeof(COSA_DML_BRG_VLAN_FULL)); if ( !pVLAN ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } _ansc_memset(pVLAN, 0, sizeof(COSA_DML_BRG_VLAN_FULL)); if(CosaDmlBrgVlanGetEntry(NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pVLAN) != ANSC_STATUS_SUCCESS) { AnscFreeMemory(pVLAN); break; } else { pCosaContext3 = (PCOSA_CONTEXT_LINK_OBJECT)AnscAllocateMemory(sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( !pCosaContext3 ) { returnStatus = ANSC_STATUS_RESOURCES; AnscTraceFlow(("<$HL> %s bridge instance:%d cannot allocate any memory for pCosaContext3\n",__FUNCTION__, pDmlBridge->Cfg.InstanceNumber)); AnscFreeMemory(pVLAN); goto EXIT; } _ansc_memset(pCosaContext3, 0, sizeof(COSA_CONTEXT_LINK_OBJECT)); if ( pVLAN->Cfg.InstanceNumber != 0 ) { pCosaContext3->InstanceNumber = pVLAN->Cfg.InstanceNumber; if ( pDmlBridge->ulNextVLANInsNum <= pVLAN->Cfg.InstanceNumber ) { pDmlBridge->ulNextVLANInsNum = pVLAN->Cfg.InstanceNumber + 1; if ( pDmlBridge->ulNextVLANInsNum == 0 ) { pDmlBridge->ulNextVLANInsNum = 1; } } } else { pCosaContext2->InstanceNumber = pVLAN->Cfg.InstanceNumber = pDmlBridge->ulNextPortInsNum; pDmlBridge->ulNextVLANInsNum++; if ( pDmlBridge->ulNextVLANInsNum == 0 ) { pDmlBridge->ulNextVLANInsNum = 1; } _ansc_sprintf(pVLAN->Cfg.Alias, "VLAN%d", pCosaContext2->InstanceNumber); CosaDmlBrgVlanSetValues //new sbAPI ( NULL, pDmlBridge->Cfg.InstanceNumber, ulSubIndex, pVLAN->Cfg.InstanceNumber, pVLAN->Cfg.Alias ); } pCosaContext3->hContext = (ANSC_HANDLE)pVLAN; pCosaContext3->hParentTable = (ANSC_HANDLE)pDmlBridge; pCosaContext3->bNew = FALSE; CosaSListPushEntryByInsNum(&pDmlBridge->VLANList, pCosaContext3); } } } //$HL 4/29/2013 CosaBridgingRegGetInfo((ANSC_HANDLE)pMyObject); EXIT: return returnStatus; }