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;
}
Пример #3
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
0
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;
}
Пример #10
0
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;
}
Пример #14
0
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;
}
Пример #15
0
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;
}
Пример #16
0
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;
}
Пример #17
0
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;
}
Пример #19
0
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;
}
Пример #20
0
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;
}
Пример #21
0
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;
}
Пример #22
0
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;
}