ANSC_HANDLE AnscOmoCreate ( ANSC_HANDLE hOwnerContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_OBJECT_MAPPER_OBJECT pObjectMapper = NULL; ULONG i = 0; pObjectMapper = (PANSC_OBJECT_MAPPER_OBJECT)AnscAllocateMemory(sizeof(ANSC_OBJECT_MAPPER_OBJECT)); if ( !pObjectMapper ) { return (ANSC_HANDLE)NULL; } pObjectMapper->hContainerContext = (ANSC_HANDLE)NULL; pObjectMapper->hOwnerContext = hOwnerContext; pObjectMapper->Create = AnscOmoCreate; pObjectMapper->Remove = AnscOmoRemove; pObjectMapper->Reset = AnscOmoReset; pObjectMapper->GetContainerContext = AnscOmoGetContainerContext; pObjectMapper->SetContainerContext = AnscOmoSetContainerContext; pObjectMapper->RegisterObject = AnscOmoRegisterObject; pObjectMapper->CreateObjectByName = AnscOmoCreateObjectByName; pObjectMapper->CreateObjectByOid = AnscOmoCreateObjectByOid; pObjectMapper->CreateObjectByType = AnscOmoCreateObjectByType; pObjectMapper->GetObjectByRid = AnscOmoGetObjectByRid; pObjectMapper->GetObjectsCount = AnscOmoGetObjectsCount; pObjectMapper->Serialize = AnscOmoSerialize; pObjectMapper->Interpret = AnscOmoInterpret; pObjectMapper->AddDescriptor = AnscOmoAddDescriptor; pObjectMapper->DelDescriptor = AnscOmoDelDescriptor; pObjectMapper->DelAllDescriptors = AnscOmoDelAllDescriptors; pObjectMapper->GetDescriptorByName = AnscOmoGetDescriptorByName; pObjectMapper->GetDescriptorByOid = AnscOmoGetDescriptorByOid; pObjectMapper->GetDescriptorByType = AnscOmoGetDescriptorByType; for ( i = 0; i < DEFAULT_OD_TABLE_SIZE; i++ ) { AnscSListInitializeHeader(&pObjectMapper->DescriptorTable[i]); } AnscInitializeLock(&pObjectMapper->DescriptorTableLock); return (ANSC_HANDLE)pObjectMapper; }
ANSC_HANDLE AnscAsn1EnumerateCreate ( ANSC_HANDLE hContainerContext ) { PANSC_ASN1_ENUMERATE pMyObject = NULL; /* * We create object by first allocating memory for holding the variables and member functions. */ if( hContainerContext != NULL) { pMyObject = (PANSC_ASN1_ENUMERATE)AnscAllocateMemory((ULONG)hContainerContext); } else { pMyObject = (PANSC_ASN1_ENUMERATE)AnscAllocateMemory(sizeof(ANSC_ASN1_ENUMERATE)); } if ( !pMyObject ) { return (ANSC_HANDLE)NULL; } /* * reset the SAttrList; */ AnscSListInitializeHeader(&pMyObject->sAttrList); pMyObject->hContainerContext = hContainerContext; pMyObject->hOwnerContext = NULL; pMyObject->Oid = ANSC_ASN1_ENUMERATE_ID; pMyObject->uType = ASN1_ENUMERATE_TYPE; pMyObject->bOptional = FALSE; pMyObject->bCanBeOptional = FALSE; pMyObject->bFirstZero = FALSE; pMyObject->Create = AnscAsn1EnumerateCreate; pMyObject->AsnFree = AnscAsn1EnumerateFree; AnscAsn1EnumerateInitialize(pMyObject); /* * Initialize the common variables and functions for a container object. */ pMyObject->SetName(pMyObject,ANSC_ASN1_ENUMERATE_NAME); pMyObject->SetClassName(pMyObject,ANSC_ASN1_ENUMERATE_CLASS_NAME); return (ANSC_HANDLE)pMyObject; }
ANSC_STATUS BreeSrmoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBREE_SRM_OBJECT pMyObject = (PBREE_SRM_OBJECT)hThisObject; ULONG i = 0; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = BREE_SRMO_COMPONENT_OID; pMyObject->Create = BreeSrmoCreate; pMyObject->Remove = BreeSrmoRemove; pMyObject->EnrollObjects = BreeSrmoEnrollObjects; pMyObject->Initialize = BreeSrmoInitialize; pMyObject->RegisterCookedResource = BreeSrmoRegisterCookedResource; pMyObject->UnregisterCookedResource = BreeSrmoUnregisterCookedResource; pMyObject->MapCookedResource = BreeSrmoMapCookedResource; pMyObject->LoadCookedResources = BreeSrmoLoadCookedResources; for (i = 0; i < BREE_SRM_RES_TABLE_SIZE; i ++) { AnscSListInitializeHeader(&pMyObject->ResList[i]); } pMyObject->LoadCookedResources((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE AnscAsn1Create ( ANSC_HANDLE hContainerContext ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_ASN1_OBJECT pBaseObject = NULL; /* * We create object by first allocating memory for holding the variables and member functions. */ pBaseObject = (PANSC_ASN1_OBJECT)AnscAllocateMemory(sizeof(ANSC_ASN1_OBJECT)); if ( !pBaseObject ) { return (ANSC_HANDLE)NULL; } /* * Initialize the common variables and functions for a container object. */ pBaseObject->Name = AnscCloneString(ANSC_ASN1_OBJECT_NAME); pBaseObject->ClassName = NULL; /* * reset the SAttrList; */ AnscSListInitializeHeader(&pBaseObject->sAttrList); pBaseObject->hContainerContext = hContainerContext; pBaseObject->hOwnerContext = NULL; pBaseObject->Oid = ANSC_ASN1_OBJECT_ID; pBaseObject->uType = ASN1_ANY_TYPE; pBaseObject->bOptional = FALSE; pBaseObject->uBasicSize = 0; pBaseObject->Create = AnscAsn1Create; pBaseObject->AsnFree = AnscAsn1Free; AnscAsn1Initialize(pBaseObject); return (ANSC_HANDLE)pBaseObject; }
ANSC_STATUS HttpMboChkInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_MBO_CHUNKED_OBJECT pMyObject = (PHTTP_MBO_CHUNKED_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ HttpMboInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = HTTP_MBO_CHUNKED_OID; pMyObject->Create = HttpMboChkCreate; pMyObject->Remove = HttpMboChkRemove; pMyObject->EnrollObjects = HttpMboChkEnrollObjects; pMyObject->Initialize = HttpMboChkInitialize; pMyObject->Reset = HttpMboChkReset; pMyObject->GetEntitySize = HttpMboChkGetEntitySize; pMyObject->GetArrivedSize = HttpMboChkGetArrivedSize; pMyObject->AppendBodyBdo = HttpMboChkAppendBodyBdo; pMyObject->CopyBodyFrom = HttpMboChkCopyBodyFrom; pMyObject->Examine = HttpMboChkExamine; pMyObject->Process = HttpMboChkProcess; pMyObject->CloseUp = HttpMboChkCloseUp; pMyObject->RemoveCoding = HttpMboChkRemoveCoding; pMyObject->ChunkTransferState = HTTP_MBOCHK_CTSTATE_EMPTY; pMyObject->SkipSize = 0; pMyObject->PadSize1 = HTTP_MBOCHK_SCRATCH_PAD1_SIZE; pMyObject->PadSize2 = HTTP_MBOCHK_SCRATCH_PAD2_SIZE; pMyObject->PadSize3 = HTTP_MBOCHK_SCRATCH_PAD3_SIZE; pMyObject->UseSize1 = 0; pMyObject->UseSize2 = 0; pMyObject->UseSize3 = 0; pMyObject->GetExpectedSize = HttpMboChkGetExpectedSize; pMyObject->AppendChunkData = HttpMboChkAppendChunkData; pMyObject->ClearChunkInfos = HttpMboChkClearChunkInfos; pMyObject->GetCurChunkInfo = HttpMboChkGetCurChunkInfo; pMyObject->AddChunkInfo = HttpMboChkAddChunkInfo; pMyObject->ProcessChunkData = HttpMboChkProcessChunkData; pMyObject->ProcessTrailer = HttpMboChkProcessTrailer; pMyObject->AppendTrailer = HttpMboChkAppendTrailer; pMyObject->ParseTrailer = HttpMboChkParseTrailer; AnscSListInitializeHeader(&pMyObject->ChunkInfoSList ); AnscInitializeLock (&pMyObject->ChunkInfoSListLock); return ANSC_STATUS_SUCCESS; }
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 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 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; }
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 BwrmPmoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWRM_PAGE_MANAGER_OBJECT pMyObject = (PBWRM_PAGE_MANAGER_OBJECT)hThisObject; ULONG i = 0; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = BWRM_PAGE_MANAGER_OID; pMyObject->Create = BwrmPmoCreate; pMyObject->Remove = BwrmPmoRemove; pMyObject->EnrollObjects = BwrmPmoEnrollObjects; pMyObject->Initialize = BwrmPmoInitialize; pMyObject->Timestamp = AnscGetTickInSeconds(); pMyObject->bActive = FALSE; pMyObject->GetCacheEnabled = BwrmPmoGetCacheEnabled; pMyObject->SetCacheEnabled = BwrmPmoSetCacheEnabled; pMyObject->GetCacheEntryCount = BwrmPmoGetCacheEntryCount; pMyObject->SetCacheEntryCount = BwrmPmoSetCacheEntryCount; pMyObject->GetCacheMemorySize = BwrmPmoGetCacheMemorySize; pMyObject->SetCacheMemorySize = BwrmPmoSetCacheMemorySize; pMyObject->GetCacheTimeout = BwrmPmoGetCacheTimeout; pMyObject->SetCacheTimeout = BwrmPmoSetCacheTimeout; pMyObject->GetProperty = BwrmPmoGetProperty; pMyObject->SetProperty = BwrmPmoSetProperty; pMyObject->ResetProperty = BwrmPmoResetProperty; pMyObject->Reset = BwrmPmoReset; pMyObject->Engage = BwrmPmoEngage; pMyObject->Cancel = BwrmPmoCancel; pMyObject->CacheTimerInvoke = BwrmPmoCacheTimerInvoke; pMyObject->GetPageCount = BwrmPmoGetPageCount; pMyObject->GetOldestPage = BwrmPmoGetOldestPage; pMyObject->GetPage = BwrmPmoGetPage; pMyObject->AddPage = BwrmPmoAddPage; pMyObject->DelPage = BwrmPmoDelPage; pMyObject->DelAllPages = BwrmPmoDelAllPages; for ( i = 0; i < BWRM_PMO_CPO_TABLE_SIZE; i++ ) { AnscSListInitializeHeader(&pMyObject->CpoTable[i]); } AnscInitializeLock(&pMyObject->CpoTableLock); /* * We shall initialize the configuration properties to the default values, which may be changed * later via the set_property() member function. Note that this call may not guarantee a valid * and legtimate configuration. */ pMyObject->ResetProperty((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS HttpPsoVer2Initialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_PSO_VER2_OBJECT pMyObject = (PHTTP_PSO_VER2_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = HTTP_PSO_VER2_OID; pMyObject->Create = HttpPsoVer2Create; pMyObject->Remove = HttpPsoVer2Remove; pMyObject->EnrollObjects = HttpPsoVer2EnrollObjects; pMyObject->Initialize = HttpPsoVer2Initialize; pMyObject->hWamIf = (ANSC_HANDLE)NULL; pMyObject->hSbcIf = (ANSC_HANDLE)NULL; pMyObject->hCbcIf = (ANSC_HANDLE)NULL; pMyObject->hPbcIf = (ANSC_HANDLE)NULL; pMyObject->hHfpIf = (ANSC_HANDLE)NULL; pMyObject->hClientSocket = (ANSC_HANDLE)NULL; pMyObject->hSbcContext = (ANSC_HANDLE)NULL; pMyObject->hCbcContext = (ANSC_HANDLE)NULL; pMyObject->HashIndex = 0; pMyObject->SbcPmode = HTTP_SBC_PMODE_RELAY1; pMyObject->CbcPmode = HTTP_CBC_PMODE_RELAY1; pMyObject->SessionState = HTTP_PSOVER2_STATE_INITIALIZED; pMyObject->GetWamIf = HttpPsoVer2GetWamIf; pMyObject->SetWamIf = HttpPsoVer2SetWamIf; pMyObject->GetSbcIf = HttpPsoVer2GetSbcIf; pMyObject->SetSbcIf = HttpPsoVer2SetSbcIf; pMyObject->GetCbcIf = HttpPsoVer2GetCbcIf; pMyObject->SetCbcIf = HttpPsoVer2SetCbcIf; pMyObject->GetPbcIf = HttpPsoVer2GetPbcIf; pMyObject->SetPbcIf = HttpPsoVer2SetPbcIf; pMyObject->GetHfpIf = HttpPsoVer2GetHfpIf; pMyObject->SetHfpIf = HttpPsoVer2SetHfpIf; pMyObject->GetClientSocket = HttpPsoVer2GetClientSocket; pMyObject->SetClientSocket = HttpPsoVer2SetClientSocket; pMyObject->GetSbcContext = HttpPsoVer2GetSbcContext; pMyObject->SetSbcContext = HttpPsoVer2SetSbcContext; pMyObject->GetCbcContext = HttpPsoVer2GetCbcContext; pMyObject->SetCbcContext = HttpPsoVer2SetCbcContext; pMyObject->GetSbcPmode = HttpPsoVer2GetSbcPmode; pMyObject->SetSbcPmode = HttpPsoVer2SetSbcPmode; pMyObject->GetCbcPmode = HttpPsoVer2GetCbcPmode; pMyObject->SetCbcPmode = HttpPsoVer2SetCbcPmode; pMyObject->GetSessionState = HttpPsoVer2GetSessionState; pMyObject->SetSessionState = HttpPsoVer2SetSessionState; pMyObject->Return = HttpPsoVer2Return; pMyObject->Reset = HttpPsoVer2Reset; pMyObject->Open = HttpPsoVer2Open; pMyObject->Close = HttpPsoVer2Close; pMyObject->AcquireAccess = HttpPsoVer2AcquireAccess; pMyObject->ReleaseAccess = HttpPsoVer2ReleaseAccess; pMyObject->AskTroBySocket = HttpPsoVer2AskTroBySocket; pMyObject->PopTroBySocket = HttpPsoVer2PopTroBySocket; pMyObject->GetLastTro = HttpPsoVer2GetLastTro; pMyObject->GetCurTro = HttpPsoVer2GetCurTro; pMyObject->AddNewTro = HttpPsoVer2AddNewTro; pMyObject->DelAllTros = HttpPsoVer2DelAllTros; pMyObject->QueryForClient = HttpPsoVer2QueryForClient; pMyObject->RecvFromClient = HttpPsoVer2RecvFromClient; pMyObject->FinishedByClient = HttpPsoVer2FinishedByClient; pMyObject->AcceptClient = HttpPsoVer2AcceptClient; pMyObject->Authenticate = HttpPsoVer2Authenticate; AnscInitializeLock (&pMyObject->AccessLock ); AnscSListInitializeHeader(&pMyObject->TroSList ); AnscInitializeLock (&pMyObject->TroSListLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS BbhmDiagnsInitialize ( ANSC_HANDLE hThisObject ) { PBBHM_DIAG_NS_LOOKUP_OBJECT pMyObject = (PBBHM_DIAG_NS_LOOKUP_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ BbhmDiageoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = BBHM_DIAG_NS_LOOKUP_OID; pMyObject->QueryId = 0; pMyObject->bActive = FALSE; pMyObject->Reset = BbhmDiagnsReset; pMyObject->CopyDiagParams = BbhmDiagnsCopyDiagParams; /* overwrite the virtual functions */ pMyObject->StartDiag = BbhmDiagnsStartDiag; pMyObject->StopDiag = BbhmDiagnsStopDiag; pMyObject->RetrieveResult = BbhmDiagnsRetrieveResult; pMyObject->ResetProperty = BbhmDiagnsResetProperty; pMyObject->ResetPropertyCounter = BbhmDiagnsResetPropertyCounter; pMyObject->Reset = BbhmDiagnsReset; pMyObject->Start = BbhmDiagnsStart; pMyObject->Stop = BbhmDiagnsStop; pMyObject->Open = BbhmDiagnsOpen; pMyObject->Close = BbhmDiagnsClose; pMyObject->Expire1 = BbhmDiagnsExpire1; pMyObject->Expire2 = BbhmDiagnsExpire2; pMyObject->SetStopTime = BbhmDiagnsSetStopTime; pMyObject->AddEchoEntry = BbhmDiagnsAddEchoEntry; pMyObject->PopEchoEntry = BbhmDiagnsPopEchoEntry; pMyObject->Recv = BbhmDiagnsRecv; pMyObject->Send = BbhmDiagnsSend; pMyObject->GetSrcIp = BbhmDiagnsGetSrcIp; pMyObject->SetSrcIp = BbhmDiagnsSetSrcIp; pMyObject->GetDstIp = BbhmDiagnsGetDstIp; pMyObject->SetDstIp = BbhmDiagnsSetDstIp; pMyObject->GetNumPkts = BbhmDiagnsGetNumPkts; pMyObject->SetNumPkts = BbhmDiagnsSetNumPkts; pMyObject->GetTimeOut = BbhmDiagnsGetTimeOut; pMyObject->SetTimeOut = BbhmDiagnsSetTimeOut; pMyObject->SetControl = BbhmDiagnsSetControl; pMyObject->SetStatus = BbhmDiagnsSetStatus; pMyObject->AddPquery = BbhmDiagnsAddPquery; pMyObject->GetPqueryById = BbhmDiagnsGetPqueryById; pMyObject->DelPquery = BbhmDiagnsDelPquery; pMyObject->DelAllPqueries = BbhmDiagnsDelAllPqueries; pMyObject->SetDiagParams = BbhmDiagnsSetDiagParams; pMyObject->CalculateResult = BbhmDiagnsCalculateResult; pMyObject->GetStatus = BbhmDiagnsGetStatus; /* * We shall initialize the session properties to the default values, which may be changed later * via the "configure" member function. If any of the future extensions needs to change the * session property, the following code also needs to be changed. */ pMyObject->ResetProperty((ANSC_HANDLE)pMyObject); AnscSListInitializeHeader(&pMyObject->EchoTable); AnscSListInitializeHeader(&pMyObject->PqueryTable); AnscInitializeLock (&pMyObject->EchoTableLock); AnscInitializeLock (&pMyObject->PqueryTableLock); return ANSC_STATUS_SUCCESS; }
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 AnscDsuoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_DAEMON_SERVER_UDP_OBJECT pMyObject = (PANSC_DAEMON_SERVER_UDP_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = ANSC_DAEMON_SERVER_UDP_OID; pMyObject->Create = AnscDsuoCreate; pMyObject->Remove = AnscDsuoRemove; pMyObject->EnrollObjects = AnscDsuoEnrollObjects; pMyObject->Initialize = AnscDsuoInitialize; pMyObject->Socket = ANSC_SOCKET_INVALID_SOCKET; pMyObject->hWorker = (ANSC_HANDLE)NULL; pMyObject->MaxMessageSize = ANSC_DSUO_MAX_MESSAGE_SIZE; pMyObject->EngineCount = ANSC_DSUO_DEF_ENGINE_COUNT; pMyObject->hNextEngineToUse = (ANSC_HANDLE)NULL; pMyObject->CurSocketCount = 0; pMyObject->MinSocketCount = ANSC_DSUO_MIN_SOCKET_COUNT; pMyObject->MaxSocketCount = ANSC_DSUO_MAX_SOCKET_COUNT; pMyObject->CurPacketCount = 0; pMyObject->MinPacketCount = ANSC_DSUO_MIN_PACKET_COUNT; pMyObject->MaxPacketCount = ANSC_DSUO_MAX_PACKET_COUNT; pMyObject->SocketTimeOut = ANSC_DSUO_SOCKET_TIMEOUT; pMyObject->PacketTimeOut = ANSC_DSUO_PACKET_TIMEOUT; pMyObject->Mode = 0; pMyObject->bActive = FALSE; pMyObject->GetHostAddress = AnscDsuoGetHostAddress; pMyObject->SetHostAddress = AnscDsuoSetHostAddress; pMyObject->GetHostPort = AnscDsuoGetHostPort; pMyObject->SetHostPort = AnscDsuoSetHostPort; pMyObject->GetWorker = AnscDsuoGetWorker; pMyObject->SetWorker = AnscDsuoSetWorker; pMyObject->GetMaxMessageSize = AnscDsuoGetMaxMessageSize; pMyObject->SetMaxMessageSize = AnscDsuoSetMaxMessageSize; pMyObject->GetEngineCount = AnscDsuoGetEngineCount; pMyObject->SetEngineCount = AnscDsuoSetEngineCount; pMyObject->GetMinSocketCount = AnscDsuoGetMinSocketCount; pMyObject->SetMinSocketCount = AnscDsuoSetMinSocketCount; pMyObject->GetMaxSocketCount = AnscDsuoGetMaxSocketCount; pMyObject->SetMaxSocketCount = AnscDsuoSetMaxSocketCount; pMyObject->GetMinPacketCount = AnscDsuoGetMinPacketCount; pMyObject->SetMinPacketCount = AnscDsuoSetMinPacketCount; pMyObject->GetMaxPacketCount = AnscDsuoGetMaxPacketCount; pMyObject->SetMaxPacketCount = AnscDsuoSetMaxPacketCount; pMyObject->GetSocketTimeOut = AnscDsuoGetSocketTimeOut; pMyObject->SetSocketTimeOut = AnscDsuoSetSocketTimeOut; pMyObject->GetPacketTimeOut = AnscDsuoGetPacketTimeOut; pMyObject->SetPacketTimeOut = AnscDsuoSetPacketTimeOut; pMyObject->GetMode = AnscDsuoGetMode; pMyObject->SetMode = AnscDsuoSetMode; pMyObject->Reset = AnscDsuoReset; pMyObject->AcceptTask = AnscDsuoAcceptTask; pMyObject->WorkerTask = AnscDsuoWorkerTask; pMyObject->Engage = AnscDsuoEngage; pMyObject->Cancel = AnscDsuoCancel; pMyObject->StartEngines = AnscDsuoStartEngines; pMyObject->StopEngines = AnscDsuoStopEngines; pMyObject->AcquireSocket = AnscDsuoAcquireSocket; pMyObject->ReleaseSocket = AnscDsuoReleaseSocket; pMyObject->ManufactureSocketPool = AnscDsuoManufactureSocketPool; pMyObject->DestroySocketPool = AnscDsuoDestroySocketPool; pMyObject->AcquirePacket = AnscDsuoAcquirePacket; pMyObject->ReleasePacket = AnscDsuoReleasePacket; pMyObject->ManufacturePacketPool = AnscDsuoManufacturePacketPool; pMyObject->DestroyPacketPool = AnscDsuoDestroyPacketPool; pMyObject->AssignEngine = AnscDsuoAssignEngine; pMyObject->ManufactureEnginePool = AnscDsuoManufactureEnginePool; pMyObject->DestroyEnginePool = AnscDsuoDestroyEnginePool; pMyObject->Query = AnscDsuoQuery; pMyObject->ProcessSync = AnscDsuoProcessSync; pMyObject->ProcessAsync = AnscDsuoProcessAsync; AnscInitializeLock (&pMyObject->OpLock ); AnscInitializeEvent (&pMyObject->AcceptEvent); AnscSetEvent (&pMyObject->AcceptEvent); AnscInitializeLock (&pMyObject->EngineArrayLock); AnscSListInitializeHeader(&pMyObject->SocketSList ); AnscInitializeLock (&pMyObject->SocketSListLock); AnscSListInitializeHeader(&pMyObject->PacketSList ); AnscInitializeLock (&pMyObject->PacketSListLock); return ANSC_STATUS_SUCCESS; }
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 HttpWssoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_WEBS_SESSION_OBJECT pMyObject = (PHTTP_WEBS_SESSION_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = HTTP_WEBS_SESSION_OID; pMyObject->Create = HttpWssoCreate; pMyObject->Remove = HttpWssoRemove; pMyObject->EnrollObjects = HttpWssoEnrollObjects; pMyObject->Initialize = HttpWssoInitialize; pMyObject->hWspIf = (ANSC_HANDLE)NULL; pMyObject->hHfpIf = (ANSC_HANDLE)NULL; pMyObject->hWebSocket = (ANSC_HANDLE)NULL; pMyObject->SessionState = HTTP_WSSO_STATE_INITIALIZED; pMyObject->ServeCount = 0; pMyObject->GetWspIf = HttpWssoGetWspIf; pMyObject->SetWspIf = HttpWssoSetWspIf; pMyObject->GetHfpIf = HttpWssoGetHfpIf; pMyObject->SetHfpIf = HttpWssoSetHfpIf; pMyObject->GetWebSocket = HttpWssoGetWebSocket; pMyObject->SetWebSocket = HttpWssoSetWebSocket; pMyObject->GetSessionState = HttpWssoGetSessionState; pMyObject->SetSessionState = HttpWssoSetSessionState; pMyObject->Return = HttpWssoReturn; pMyObject->Reset = HttpWssoReset; pMyObject->Open = HttpWssoOpen; pMyObject->Close = HttpWssoClose; pMyObject->AcquireAccess = HttpWssoAcquireAccess; pMyObject->ReleaseAccess = HttpWssoReleaseAccess; pMyObject->EnterWspServe = HttpWssoEnterWspServe; pMyObject->LeaveWspServe = HttpWssoLeaveWspServe; pMyObject->ClearWspServe = HttpWssoClearWspServe; pMyObject->CloseConnection = HttpWssoCloseConnection; pMyObject->GetEndWsto = HttpWssoGetEndWsto; pMyObject->GetCurWsto = HttpWssoGetCurWsto; pMyObject->AddNewWsto = HttpWssoAddNewWsto; pMyObject->DelAllWstos = HttpWssoDelAllWstos; pMyObject->Query = HttpWssoQuery; pMyObject->Recv = HttpWssoRecv; pMyObject->Finish = HttpWssoFinish; pMyObject->Accept = HttpWssoAccept; AnscInitializeEvent (&pMyObject->ServeEvent ); AnscResetEvent (&pMyObject->ServeEvent ); AnscInitializeLock (&pMyObject->AccessLock ); AnscSListInitializeHeader(&pMyObject->WstoSList ); AnscInitializeLock (&pMyObject->WstoSListLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS CosaUsersInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PCOSA_DATAMODEL_USERS pMyObject = (PCOSA_DATAMODEL_USERS)hThisObject; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoCOSA = NULL; PPOAM_IREP_FOLDER_OBJECT pPoamIrepFoUser = NULL; /* We need call the initiation function of backend firstly */ returnStatus = CosaDmlUserInit( NULL, NULL ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { return returnStatus; } /* Initiation all functions */ AnscSListInitializeHeader( &pMyObject->UserList ); pMyObject->maxInstanceOfUser = 0; pMyObject->hIrepFolderUser = NULL; AnscZeroMemory(pMyObject->AliasOfUser, sizeof(pMyObject->AliasOfUser)); /*We need to get Instance Info from cosa configuration*/ pPoamIrepFoCOSA = (PPOAM_IREP_FOLDER_OBJECT)g_GetRegistryRootFolder(g_pDslhDmlAgent); if ( !pPoamIrepFoCOSA ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } pPoamIrepFoUser = (PPOAM_IREP_FOLDER_OBJECT)pPoamIrepFoCOSA->GetFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_USER ); if ( !pPoamIrepFoUser ) { pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, FALSE); pPoamIrepFoUser = pPoamIrepFoCOSA->AddFolder ( (ANSC_HANDLE)pPoamIrepFoCOSA, COSA_IREP_FOLDER_NAME_USER, 0 ); pPoamIrepFoCOSA->EnableFileSync((ANSC_HANDLE)pPoamIrepFoCOSA, TRUE); } if ( !pPoamIrepFoUser ) { returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } else { pMyObject->hIrepFolderUser = (ANSC_HANDLE)pPoamIrepFoUser; } /* 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. */ CosaUsersRegGetUserInfo((ANSC_HANDLE)pMyObject); /* Firstly we create the whole system from backend */ CosaUsersBackendGetUserInfo((ANSC_HANDLE)pMyObject); EXIT: return returnStatus; }
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 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 Bmc2ComtoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBMC2_COM_TERMINAL_OBJECT pMyObject = (PBMC2_COM_TERMINAL_OBJECT)hThisObject; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = BMC2_COM_TERMINAL_OID; pMyObject->Create = Bmc2ComtoCreate; pMyObject->Remove = Bmc2ComtoRemove; pMyObject->EnrollObjects = Bmc2ComtoEnrollObjects; pMyObject->Initialize = Bmc2ComtoInitialize; pMyObject->hBmc2IceIf = (ANSC_HANDLE)NULL; pMyObject->hBmc2EnvController = (ANSC_HANDLE)NULL; pMyObject->bActive = FALSE; pMyObject->hSlapContainerTerminal = (ANSC_HANDLE)NULL; pMyObject->hSlapBmc2Terminal = (ANSC_HANDLE)NULL; pMyObject->GetBmc2IceIf = Bmc2ComtoGetBmc2IceIf; pMyObject->SetBmc2IceIf = Bmc2ComtoSetBmc2IceIf; pMyObject->GetBmc2EnvController = Bmc2ComtoGetBmc2EnvController; pMyObject->SetBmc2EnvController = Bmc2ComtoSetBmc2EnvController; pMyObject->GetUserIdentifier = Bmc2ComtoGetUserIdentifier; pMyObject->SetUserIdentifier = Bmc2ComtoSetUserIdentifier; pMyObject->GetUserPermission = Bmc2ComtoGetUserPermission; pMyObject->SetUserPermission = Bmc2ComtoSetUserPermission; pMyObject->GetMaxLineNumber = Bmc2ComtoGetMaxLineNumber; pMyObject->SetMaxLineNumber = Bmc2ComtoSetMaxLineNumber; pMyObject->GetMaxColumnNumber = Bmc2ComtoGetMaxColumnNumber; pMyObject->SetMaxColumnNumber = Bmc2ComtoSetMaxColumnNumber; pMyObject->GetReadOnly = Bmc2ComtoGetReadOnly; pMyObject->SetReadOnly = Bmc2ComtoSetReadOnly; pMyObject->SetPseudoTermDevName = Bmc2ComtoSetPseudoTermDevName; pMyObject->GetProperty = Bmc2ComtoGetProperty; pMyObject->SetProperty = Bmc2ComtoSetProperty; pMyObject->ResetProperty = Bmc2ComtoResetProperty; pMyObject->Reset = Bmc2ComtoReset; pMyObject->AcqAccess = Bmc2ComtoAcqAccess; pMyObject->RelAccess = Bmc2ComtoRelAccess; pMyObject->Engage = Bmc2ComtoEngage; pMyObject->Cancel = Bmc2ComtoCancel; pMyObject->SetupEnv = Bmc2ComtoSetupEnv; pMyObject->CloseEnv = Bmc2ComtoCloseEnv; pMyObject->GetDomainCount = Bmc2ComtoGetDomainCount; pMyObject->GetCurComDomain = Bmc2ComtoGetCurComDomain; pMyObject->AddComDomain = Bmc2ComtoAddComDomain; pMyObject->DelCurComDomain = Bmc2ComtoDelCurComDomain; pMyObject->DelComDomain = Bmc2ComtoDelComDomain; pMyObject->DelAllComDomains = Bmc2ComtoDelAllComDomains; AnscInitializeLock (&pMyObject->AccessLock ); AnscSListInitializeHeader(&pMyObject->ComdoSList ); AnscInitializeLock (&pMyObject->ComdoSListLock); /* * We shall initialize the configuration properties to the default values, which may be changed * later via the set_property() member function. Note that this call may not guarantee a valid * and legtimate configuration. */ pMyObject->ResetProperty((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS AnscDetoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_DAEMON_ENGINE_TCP_OBJECT pMyObject = (PANSC_DAEMON_ENGINE_TCP_OBJECT)hThisObject; ULONG i = 0; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = ANSC_DAEMON_ENGINE_TCP_OID; pMyObject->Create = AnscDetoCreate; pMyObject->Remove = AnscDetoRemove; pMyObject->EnrollObjects = AnscDetoEnrollObjects; pMyObject->Initialize = AnscDetoInitialize; pMyObject->hDaemonServer = (ANSC_HANDLE)NULL; pMyObject->CurSocketCount = 0; pMyObject->MaxSocketCount = ANSC_DETO_MAX_SOCKET_COUNT; pMyObject->ControlFlags = 0; pMyObject->StartTime = 0; pMyObject->AvgServingTime = 0; pMyObject->SocketTimeOut = ANSC_DETO_SOCKET_TIMEOUT; pMyObject->bStarted = FALSE; pMyObject->bCleaningDemanded = FALSE; pMyObject->bBusy = FALSE; pMyObject->TtcCount = 0; pMyObject->MtcCount = 0; pMyObject->TrcCount = 0; pMyObject->MrcCount = 0; pMyObject->TscCount = 0; pMyObject->MscCount = 0; pMyObject->GetDaemonServer = AnscDetoGetDaemonServer; pMyObject->SetDaemonServer = AnscDetoSetDaemonServer; pMyObject->GetMaxSocketCount = AnscDetoGetMaxSocketCount; pMyObject->SetMaxSocketCount = AnscDetoSetMaxSocketCount; pMyObject->GetControlFlags = AnscDetoGetControlFlags; pMyObject->SetControlFlags = AnscDetoSetControlFlags; pMyObject->Reset = AnscDetoReset; pMyObject->GetSocketByAddress = AnscDetoGetSocketByAddress; pMyObject->GetSocketByAddress2 = AnscDetoGetSocketByAddress2; pMyObject->GetSocketByOsocket = AnscDetoGetSocketByOsocket; pMyObject->GetSocketByOsocket2 = AnscDetoGetSocketByOsocket2; pMyObject->AddSocket = AnscDetoAddSocket; pMyObject->DelSocket = AnscDetoDelSocket; pMyObject->DelAllSockets = AnscDetoDelAllSockets; pMyObject->ExpAllSockets = AnscDetoExpAllSockets; pMyObject->EnableRecv = AnscDetoEnableRecv; pMyObject->EnableSend = AnscDetoEnableSend; pMyObject->RecvTask = AnscDetoRecvTask; pMyObject->SendTask = AnscDetoSendTask; pMyObject->Start = AnscDetoStart; pMyObject->Stop = AnscDetoStop; pMyObject->Cancel = AnscDetoCancel; pMyObject->Clean = AnscDetoClean; pMyObject->Snapshot = AnscDetoSnapshot; pMyObject->CloseUp = AnscDetoCloseUp; pMyObject->Recv = AnscDetoRecv; pMyObject->Recv2 = AnscDetoRecv2; pMyObject->Send = AnscDetoSend; pMyObject->Send2 = AnscDetoSend2; AnscInitializeEvent(&pMyObject->RecvEvent ); AnscSetEvent (&pMyObject->RecvEvent ); AnscInitializeEvent(&pMyObject->SendEvent ); AnscSetEvent (&pMyObject->SendEvent ); AnscInitializeEvent(&pMyObject->NewSocketEvent); AnscResetEvent (&pMyObject->NewSocketEvent); AnscInitializeLock(&pMyObject->RecvSocketSetLock); AnscInitializeLock(&pMyObject->SendSocketSetLock); for ( i = 0; i < ANSC_DETO_SOCKET_TABLE_SIZE; i++ ) { AnscSListInitializeHeader(&pMyObject->SocketTable[i]); } AnscInitializeLock(&pMyObject->SocketTableLock); AnscQueueInitializeHeader(&pMyObject->PacketQueue ); AnscInitializeLock (&pMyObject->PacketQueueLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS HttpScoInitialize ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_SIMPLE_CLIENT_OBJECT pMyObject = (PHTTP_SIMPLE_CLIENT_OBJECT)hThisObject; ULONG i = 0; /* * Until you have to simulate C++ object-oriented programming style with standard C, you don't * appreciate all the nice little things come with C++ language and all the dirty works that * have been done by the C++ compilers. Member initialization is one of these things. While in * C++ you don't have to initialize all the member fields inherited from the base class since * the compiler will do it for you, such is not the case with C. */ AnscCoInitialize((ANSC_HANDLE)pMyObject); /* * Although we have initialized some of the member fields in the "create" member function, we * repeat the work here for completeness. While this simulation approach is pretty stupid from * a C++/Java programmer perspective, it's the best we can get for universal embedded network * programming. Before we develop our own operating system (don't expect that to happen any * time soon), this is the way things gonna be. */ pMyObject->Oid = HTTP_SIMPLE_CLIENT_OID; pMyObject->Create = HttpScoCreate; pMyObject->Remove = HttpScoRemove; pMyObject->EnrollObjects = HttpScoEnrollObjects; pMyObject->Initialize = HttpScoInitialize; pMyObject->ClientMode = HTTP_SCO_MODE_COMPACT; pMyObject->bActive = FALSE; pMyObject->hWebClientSession = NULL; pMyObject->SessionIdleTimeout = 0; pMyObject->GetBspIf = HttpScoGetBspIf; pMyObject->SetBspIf = HttpScoSetBspIf; pMyObject->GetHfpIf = HttpScoGetHfpIf; pMyObject->SetHfpIf = HttpScoSetHfpIf; pMyObject->GetCasIf = HttpScoGetCasIf; pMyObject->GetClientAuthObj = HttpScoGetClientAuthObj; pMyObject->GetClientMode = HttpScoGetClientMode; pMyObject->SetClientMode = HttpScoSetClientMode; pMyObject->GetProductName = HttpScoGetProductName; pMyObject->SetProductName = HttpScoSetProductName; pMyObject->SetSessionIdleTimeout = HttpScoSetSessionIdleTimeout; pMyObject->GetProperty = HttpScoGetProperty; pMyObject->SetProperty = HttpScoSetProperty; pMyObject->ResetProperty = HttpScoResetProperty; pMyObject->Reset = HttpScoReset; pMyObject->GetCredential = HttpScoGetCredential; pMyObject->Engage = HttpScoEngage; pMyObject->Cancel = HttpScoCancel; pMyObject->SessionTdoInvoke = HttpScoSessionTdoInvoke; pMyObject->AcquireWcso = HttpScoAcquireWcso; pMyObject->ReleaseWcso = HttpScoReleaseWcso; pMyObject->ManufactureWcsoPool = HttpScoManufactureWcsoPool; pMyObject->DestroyWcsoPool = HttpScoDestroyWcsoPool; pMyObject->AcquireWcto = HttpScoAcquireWcto; pMyObject->ReleaseWcto = HttpScoReleaseWcto; pMyObject->ManufactureWctoPool = HttpScoManufactureWctoPool; pMyObject->DestroyWctoPool = HttpScoDestroyWctoPool; pMyObject->AcquireBmoReq = HttpScoAcquireBmoReq; pMyObject->ReleaseBmoReq = HttpScoReleaseBmoReq; pMyObject->ManufactureBmoReqPool = HttpScoManufactureBmoReqPool; pMyObject->DestroyBmoReqPool = HttpScoDestroyBmoReqPool; pMyObject->AcquireBmoRep = HttpScoAcquireBmoRep; pMyObject->ReleaseBmoRep = HttpScoReleaseBmoRep; pMyObject->ManufactureBmoRepPool = HttpScoManufactureBmoRepPool; pMyObject->DestroyBmoRepPool = HttpScoDestroyBmoRepPool; pMyObject->Request = HttpScoRequest; pMyObject->Request2 = HttpScoRequest2; pMyObject->Request3 = HttpScoRequest3; pMyObject->DoOptions = HttpScoDoOptions; pMyObject->DoGet = HttpScoDoGet; pMyObject->DoHead = HttpScoDoHead; pMyObject->DoPost = HttpScoDoPost; pMyObject->DoPut = HttpScoDoPut; pMyObject->DoDelete = HttpScoDoDelete; pMyObject->DoTrace = HttpScoDoTrace; pMyObject->DoConnect = HttpScoDoConnect; pMyObject->MapWcso = HttpScoMapWcso; pMyObject->GetWcso = HttpScoGetWcso; pMyObject->AddWcso = HttpScoAddWcso; pMyObject->DelAllWcsos = HttpScoDelAllWcsos; pMyObject->BspPolish = HttpScoBspPolish; pMyObject->BspBrowse = HttpScoBspBrowse; pMyObject->BspNotify = HttpScoBspNotify; pMyObject->SetPeerAddresses = HttpScoSetPeerAddresses; pMyObject->GetNextPeerAddr = HttpScoGetNextPeerAddr; pMyObject->GetCurPeerAddr = HttpScoGetCurPeerAddr; pMyObject->ResetPeerAddrPick = HttpScoResetPeerAddrPick; for ( i = 0; i < HTTP_SCO_WCSO_TABLE_SIZE; i++ ) { AnscSListInitializeHeader(&pMyObject->WcsoTable[i]); } AnscInitializeLock(&pMyObject->WcsoTableLock); AnscSListInitializeHeader(&pMyObject->WcsoSList ); AnscInitializeLock (&pMyObject->WcsoSListLock ); AnscSListInitializeHeader(&pMyObject->WctoSList ); AnscInitializeLock (&pMyObject->WctoSListLock ); AnscSListInitializeHeader(&pMyObject->BmoReqSList ); AnscInitializeLock (&pMyObject->BmoReqSListLock); AnscSListInitializeHeader(&pMyObject->BmoRepSList ); AnscInitializeLock (&pMyObject->BmoRepSListLock); /* * We shall initialize the configuration properties to the default values, which may be changed * later via the set_property() member function. Note that this call may not guarantee a valid * and legtimate configuration. */ pMyObject->ResetProperty((ANSC_HANDLE)pMyObject); return ANSC_STATUS_SUCCESS; }