ANSC_STATUS
BwrmPmoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PBWRM_PAGE_MANAGER_OBJECT       pMyObject         = (PBWRM_PAGE_MANAGER_OBJECT    )hThisObject;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject;
    PANSC_TDO_CLIENT_OBJECT         pCacheTimerClient = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hCacheTimerClient;

    if ( !pCacheTimerObject )
    {
        pCacheTimerObject =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pCacheTimerObject )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hCacheTimerObject = (ANSC_HANDLE)pCacheTimerObject;
        }

        pCacheTimerObject->SetTimerType((ANSC_HANDLE)pCacheTimerObject, ANSC_TIMER_TYPE_PERIODIC     );
        pCacheTimerObject->SetInterval ((ANSC_HANDLE)pCacheTimerObject, BWRM_PMO_CACHE_TIMER_INTERVAL);
    }

    if ( !pCacheTimerClient )
    {
        pCacheTimerClient = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pCacheTimerClient )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hCacheTimerClient = (ANSC_HANDLE)pCacheTimerClient;
        }

        pCacheTimerClient->hClientContext = (ANSC_HANDLE)pMyObject;
        pCacheTimerClient->Invoke         = BwrmPmoCacheTimerInvoke;

        pCacheTimerObject->SetClient((ANSC_HANDLE)pCacheTimerObject, (ANSC_HANDLE)pCacheTimerClient);
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
TlsHsoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    PTLS_HAND_SHAKER_OBJECT         pMyObject      = (PTLS_HAND_SHAKER_OBJECT      )hThisObject;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pStateTimerObj = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hStateTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pStateTimerIf  = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hStateTimerIf;

    if ( !pStateTimerObj )
    {
        pStateTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pStateTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hStateTimerObj = (ANSC_HANDLE)pStateTimerObj;
        }

        pStateTimerObj->SetTimerType((ANSC_HANDLE)pStateTimerObj, ANSC_TIMER_TYPE_SPORADIC );
        pStateTimerObj->SetInterval ((ANSC_HANDLE)pStateTimerObj, TLS_HSO_DEF_STATE_TIMEOUT);
    }

    if ( !pStateTimerIf )
    {
        pStateTimerIf = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pStateTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hStateTimerIf = (ANSC_HANDLE)pStateTimerIf;
        }

        pStateTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pStateTimerIf->Invoke         = TlsHsoStateTimerInvoke;

        pStateTimerObj->SetClient((ANSC_HANDLE)pStateTimerObj, (ANSC_HANDLE)pStateTimerIf);
    }

    TlsRcoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
StunScoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PSTUN_SIMPLE_CLIENT_OBJECT      pMyObject         = (PSTUN_SIMPLE_CLIENT_OBJECT    )hThisObject;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pStageTimerObj    = (PANSC_TIMER_DESCRIPTOR_OBJECT )pMyObject->hStageTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pStageTimerIf     = (PANSC_TDO_CLIENT_OBJECT       )pMyObject->hStageTimerIf;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pRetryTimerObj    = (PANSC_TIMER_DESCRIPTOR_OBJECT )pMyObject->hRetryTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pRetryTimerIf     = (PANSC_TDO_CLIENT_OBJECT       )pMyObject->hRetryTimerIf;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pProbeTimerObj    = (PANSC_TIMER_DESCRIPTOR_OBJECT )pMyObject->hProbeTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pProbeTimerIf     = (PANSC_TDO_CLIENT_OBJECT       )pMyObject->hProbeTimerIf;
    PANSC_SIMPLE_CLIENT_UDP_OBJECT  pSimpleClientUdp1 = (PANSC_SIMPLE_CLIENT_UDP_OBJECT)pMyObject->hSimpleClientUdp1;
    PANSC_SCUO_WORKER_OBJECT        pClientUdpWorker1 = (PANSC_SCUO_WORKER_OBJECT      )pMyObject->hClientUdpWorker1;
    PANSC_SIMPLE_CLIENT_UDP_OBJECT  pSimpleClientUdpA = (PANSC_SIMPLE_CLIENT_UDP_OBJECT)pMyObject->hSimpleClientUdpA;
    PANSC_SCUO_WORKER_OBJECT        pClientUdpWorkerA = (PANSC_SCUO_WORKER_OBJECT      )pMyObject->hClientUdpWorkerA;
    PANSC_SIMPLE_CLIENT_UDP_OBJECT  pSimpleClientUdpB = (PANSC_SIMPLE_CLIENT_UDP_OBJECT)pMyObject->hSimpleClientUdpB;
    PANSC_SCUO_WORKER_OBJECT        pClientUdpWorkerB = (PANSC_SCUO_WORKER_OBJECT      )pMyObject->hClientUdpWorkerB;

    if ( !pStageTimerObj )
    {
        pStageTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pStageTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hStageTimerObj = (ANSC_HANDLE)pStageTimerObj;
        }

        pStageTimerObj->SetTimerType((ANSC_HANDLE)pStageTimerObj, ANSC_TIMER_TYPE_SPORADIC     );
        pStageTimerObj->SetInterval ((ANSC_HANDLE)pStageTimerObj, STUN_SCO_STAGE_TIMER_INTERVAL);
    }

    if ( !pStageTimerIf )
    {
        pStageTimerIf = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pStageTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hStageTimerIf = (ANSC_HANDLE)pStageTimerIf;
        }

        pStageTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pStageTimerIf->Invoke         = StunScoStageTimerInvoke;

        pStageTimerObj->SetClient((ANSC_HANDLE)pStageTimerObj, (ANSC_HANDLE)pStageTimerIf);
    }

    if ( !pRetryTimerObj )
    {
        pRetryTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pRetryTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hRetryTimerObj = (ANSC_HANDLE)pRetryTimerObj;
        }

        pRetryTimerObj->SetTimerType((ANSC_HANDLE)pRetryTimerObj, ANSC_TIMER_TYPE_SPORADIC        );
        pRetryTimerObj->SetInterval ((ANSC_HANDLE)pRetryTimerObj, STUN_MIN_RETRANSMISSION_INTERVAL);
    }

    if ( !pRetryTimerIf )
    {
        pRetryTimerIf = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pRetryTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hRetryTimerIf = (ANSC_HANDLE)pRetryTimerIf;
        }

        pRetryTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pRetryTimerIf->Invoke         = StunScoRetryTimerInvoke;

        pRetryTimerObj->SetClient((ANSC_HANDLE)pRetryTimerObj, (ANSC_HANDLE)pRetryTimerIf);
    }

    if ( !pProbeTimerObj )
    {
        pProbeTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pProbeTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hProbeTimerObj = (ANSC_HANDLE)pProbeTimerObj;
        }

        pProbeTimerObj->SetTimerType((ANSC_HANDLE)pProbeTimerObj, ANSC_TIMER_TYPE_PERIODIC           );
        pProbeTimerObj->SetInterval ((ANSC_HANDLE)pProbeTimerObj, STUN_MIN_KEEP_ALIVE_INTERVAL * 1000);
    }

    if ( !pProbeTimerIf )
    {
        pProbeTimerIf = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pProbeTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hProbeTimerIf = (ANSC_HANDLE)pProbeTimerIf;
        }

        pProbeTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pProbeTimerIf->Invoke         = StunScoProbeTimerInvoke;

        pProbeTimerObj->SetClient((ANSC_HANDLE)pProbeTimerObj, (ANSC_HANDLE)pProbeTimerIf);
    }

    if ( !pSimpleClientUdp1 )
    {
        pSimpleClientUdp1 =
            (PANSC_SIMPLE_CLIENT_UDP_OBJECT)AnscCreateSimpleClientUdp
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pSimpleClientUdp1 )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSimpleClientUdp1 = (ANSC_HANDLE)pSimpleClientUdp1;
        }
    }

    if ( !pClientUdpWorker1 )
    {
        pClientUdpWorker1 = (PANSC_SCUO_WORKER_OBJECT)AnscAllocateMemory(sizeof(ANSC_SCUO_WORKER_OBJECT));

        if ( !pClientUdpWorker1 )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hClientUdpWorker1 = (ANSC_HANDLE)pClientUdpWorker1;
        }

        pClientUdpWorker1->hWorkerContext = (ANSC_HANDLE)pMyObject;
        pClientUdpWorker1->Query          = StunScoScuowo1Query;
        pClientUdpWorker1->Process        = StunScoScuowo1Process;
        pClientUdpWorker1->Notify         = StunScoScuowo1Notify;

        pSimpleClientUdp1->SetWorker
            (
                (ANSC_HANDLE)pSimpleClientUdp1,
                (ANSC_HANDLE)pClientUdpWorker1,
                sizeof(ANSC_SCUO_WORKER_OBJECT)
            );
    }

    if ( !pSimpleClientUdpA )
    {
        pSimpleClientUdpA =
            (PANSC_SIMPLE_CLIENT_UDP_OBJECT)AnscCreateSimpleClientUdp
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pSimpleClientUdpA )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSimpleClientUdpA = (ANSC_HANDLE)pSimpleClientUdpA;
        }
    }

    if ( !pClientUdpWorkerA )
    {
        pClientUdpWorkerA = (PANSC_SCUO_WORKER_OBJECT)AnscAllocateMemory(sizeof(ANSC_SCUO_WORKER_OBJECT));

        if ( !pClientUdpWorkerA )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hClientUdpWorkerA = (ANSC_HANDLE)pClientUdpWorkerA;
        }

        pClientUdpWorkerA->hWorkerContext = (ANSC_HANDLE)pMyObject;
        pClientUdpWorkerA->Query          = StunScoScuowoAQuery;
        pClientUdpWorkerA->Process        = StunScoScuowoAProcess;
        pClientUdpWorkerA->Notify         = StunScoScuowoANotify;

        pSimpleClientUdpA->SetWorker
            (
                (ANSC_HANDLE)pSimpleClientUdpA,
                (ANSC_HANDLE)pClientUdpWorkerA,
                sizeof(ANSC_SCUO_WORKER_OBJECT)
            );
    }

    if ( !pSimpleClientUdpB )
    {
        pSimpleClientUdpB =
            (PANSC_SIMPLE_CLIENT_UDP_OBJECT)AnscCreateSimpleClientUdp
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pSimpleClientUdpB )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSimpleClientUdpB = (ANSC_HANDLE)pSimpleClientUdpB;
        }
    }

    if ( !pClientUdpWorkerB )
    {
        pClientUdpWorkerB = (PANSC_SCUO_WORKER_OBJECT)AnscAllocateMemory(sizeof(ANSC_SCUO_WORKER_OBJECT));

        if ( !pClientUdpWorkerB )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hClientUdpWorkerB = (ANSC_HANDLE)pClientUdpWorkerB;
        }

        pClientUdpWorkerB->hWorkerContext = (ANSC_HANDLE)pMyObject;
        pClientUdpWorkerB->Query          = StunScoScuowoBQuery;
        pClientUdpWorkerB->Process        = StunScoScuowoBProcess;
        pClientUdpWorkerB->Notify         = StunScoScuowoBNotify;

        pSimpleClientUdpB->SetWorker
            (
                (ANSC_HANDLE)pSimpleClientUdpB,
                (ANSC_HANDLE)pClientUdpWorkerB,
                sizeof(ANSC_SCUO_WORKER_OBJECT)
            );
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
CcspCwmpsoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus       = ANSC_STATUS_SUCCESS;
    PCCSP_CWMP_SESSION_OBJECT       pMyObject          = (PCCSP_CWMP_SESSION_OBJECT    )hThisObject;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pSessionTimerObj   = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hSessionTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pSessionTimerIf    = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hSessionTimerIf;
    PCCSP_CWMP_ACS_CONNECTION_OBJECT pCcspCwmpAcsConnection 
													   = (PCCSP_CWMP_ACS_CONNECTION_OBJECT)pMyObject->hCcspCwmpAcsConnection;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pRetryTimerObj     = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hRetryTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pRetryTimerIf      = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hRetryTimerIf;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pDelayedActiveNotifTimerObj     
													   = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hDelayedActiveNotifTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pDelayedActiveNotifTimerIf      
													   = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hDelayedActiveNotifTimerIf;
    PCCSP_CWMP_MCO_INTERFACE        pCcspCwmpMcoIf     = (PCCSP_CWMP_MCO_INTERFACE     )pMyObject->hCcspCwmpMcoIf;

    if ( !pSessionTimerObj )
    {
        pSessionTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pSessionTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSessionTimerObj = (ANSC_HANDLE)pSessionTimerObj;
        }

        pSessionTimerObj->SetTimerType((ANSC_HANDLE)pSessionTimerObj, ANSC_TIMER_TYPE_SPORADIC         );
        pSessionTimerObj->SetInterval ((ANSC_HANDLE)pSessionTimerObj, CCSP_CWMPSO_SESSION_TIMEOUT * 1000);
        /* _ansc_strcpy(pSessionTimerObj->Name, "CcspCwmpsoSessionTimer"); */

    }

    if ( !pSessionTimerIf )
    {
        pSessionTimerIf = (PANSC_TDO_CLIENT_OBJECT)CcspTr069PaAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pSessionTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSessionTimerIf = (ANSC_HANDLE)pSessionTimerIf;
        }

        pSessionTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pSessionTimerIf->Invoke         = CcspCwmpsoSessionTimerInvoke;

        pSessionTimerObj->SetClient((ANSC_HANDLE)pSessionTimerObj, (ANSC_HANDLE)pSessionTimerIf);
    }

    if ( !pRetryTimerObj )
    {
        /* use separate timer scehduler to run retry alg, otherwise, we will observe delays of timer expiration */
        pRetryTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    (ANSC_HANDLE)NULL, /* pMyObject->hContainerContext,*/ 
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pRetryTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hRetryTimerObj = (ANSC_HANDLE)pRetryTimerObj;
        }

        pRetryTimerObj->SetTimerType((ANSC_HANDLE)pRetryTimerObj, ANSC_TIMER_TYPE_SPORADIC         );
        pRetryTimerObj->SetInterval ((ANSC_HANDLE)pRetryTimerObj, 1000 * 1000);
        /* _ansc_strcpy(pSessionTimerObj->Name, "CcspCwmpsoSessionRetryTimer"); */

    }

    if ( !pRetryTimerIf )
    {
        pRetryTimerIf = (PANSC_TDO_CLIENT_OBJECT)CcspTr069PaAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pRetryTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hRetryTimerIf = (ANSC_HANDLE)pRetryTimerIf;
        }

        pRetryTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pRetryTimerIf->Invoke         = CcspCwmpsoSessionRetryTimerInvoke;

        pRetryTimerObj->SetClient((ANSC_HANDLE)pRetryTimerObj, (ANSC_HANDLE)pRetryTimerIf);
    }

    if ( !pDelayedActiveNotifTimerObj )
    {
        /* use separate timer scehduler to run retry alg, otherwise, we will observe delays of timer expiration */
        pDelayedActiveNotifTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    (ANSC_HANDLE)NULL, /* pMyObject->hContainerContext,*/ 
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pDelayedActiveNotifTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hDelayedActiveNotifTimerObj = (ANSC_HANDLE)pDelayedActiveNotifTimerObj;
        }

        pDelayedActiveNotifTimerObj->SetTimerType((ANSC_HANDLE)pDelayedActiveNotifTimerObj, ANSC_TIMER_TYPE_SPORADIC);
        pDelayedActiveNotifTimerObj->SetInterval ((ANSC_HANDLE)pDelayedActiveNotifTimerObj, 5000 * 1000);
    }

    if ( !pDelayedActiveNotifTimerIf )
    {
        pDelayedActiveNotifTimerIf = (PANSC_TDO_CLIENT_OBJECT)CcspTr069PaAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pDelayedActiveNotifTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hDelayedActiveNotifTimerIf = (ANSC_HANDLE)pDelayedActiveNotifTimerIf;
        }

        pDelayedActiveNotifTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pDelayedActiveNotifTimerIf->Invoke         = CcspCwmpsoDelayedActiveNotifTimerInvoke;

        pDelayedActiveNotifTimerObj->SetClient((ANSC_HANDLE)pDelayedActiveNotifTimerObj, (ANSC_HANDLE)pDelayedActiveNotifTimerIf);
    }


    if ( !pCcspCwmpAcsConnection )
    {
        pCcspCwmpAcsConnection =
            (PCCSP_CWMP_ACS_CONNECTION_OBJECT)CcspCwmpCreateAcsConnection
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pCcspCwmpAcsConnection )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hCcspCwmpAcsConnection = (ANSC_HANDLE)pCcspCwmpAcsConnection;

            pCcspCwmpAcsConnection->SetCcspCwmpSession((ANSC_HANDLE)pCcspCwmpAcsConnection, (ANSC_HANDLE)pMyObject);
        }
    }

    if ( !pCcspCwmpMcoIf )
    {
        pCcspCwmpMcoIf = (PCCSP_CWMP_MCO_INTERFACE)CcspTr069PaAllocateMemory(sizeof(CCSP_CWMP_MCO_INTERFACE));

        if ( !pCcspCwmpMcoIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hCcspCwmpMcoIf = (ANSC_HANDLE)pCcspCwmpMcoIf;
        }

        AnscCopyString(pCcspCwmpMcoIf->Name, CCSP_CWMP_MCO_INTERFACE_NAME);

        pCcspCwmpMcoIf->InterfaceId            = CCSP_CWMP_MCO_INTERFACE_ID;
        pCcspCwmpMcoIf->hOwnerContext          = (ANSC_HANDLE)pMyObject;
        pCcspCwmpMcoIf->Size                   = sizeof(CCSP_CWMP_MCO_INTERFACE);

        pCcspCwmpMcoIf->NotifyAcsStatus        = CcspCwmpsoMcoNotifyAcsStatus;
        pCcspCwmpMcoIf->GetNextMethod          = CcspCwmpsoMcoGetNextMethod;
        pCcspCwmpMcoIf->ProcessSoapResponse    = CcspCwmpsoMcoProcessSoapResponse;
        pCcspCwmpMcoIf->ProcessSoapError       = CcspCwmpsoMcoProcessSoapError;
        pCcspCwmpMcoIf->InvokeUnknownMethod    = CcspCwmpsoMcoInvokeUnknownMethod;

        pCcspCwmpMcoIf->GetRpcMethods          = CcspCwmpsoMcoGetRpcMethods;
        pCcspCwmpMcoIf->SetParameterValues     = CcspCwmpsoMcoSetParameterValues;
        pCcspCwmpMcoIf->GetParameterValues     = CcspCwmpsoMcoGetParameterValues;
        pCcspCwmpMcoIf->GetParameterNames      = CcspCwmpsoMcoGetParameterNames;
        pCcspCwmpMcoIf->SetParameterAttributes = CcspCwmpsoMcoSetParameterAttributes;
        pCcspCwmpMcoIf->GetParameterAttributes = CcspCwmpsoMcoGetParameterAttributes;
        pCcspCwmpMcoIf->AddObject              = CcspCwmpsoMcoAddObject;
        pCcspCwmpMcoIf->DeleteObject           = CcspCwmpsoMcoDeleteObject;
        pCcspCwmpMcoIf->Download               = CcspCwmpsoMcoDownload;
        pCcspCwmpMcoIf->Reboot                 = CcspCwmpsoMcoReboot;

        pCcspCwmpMcoIf->GetQueuedTransfers     = CcspCwmpsoMcoGetQueuedTransfers;
        pCcspCwmpMcoIf->ScheduleInform         = CcspCwmpsoMcoScheduleInform;
        pCcspCwmpMcoIf->SetVouchers            = CcspCwmpsoMcoSetVouchers;
        pCcspCwmpMcoIf->GetOptions             = CcspCwmpsoMcoGetOptions;
        pCcspCwmpMcoIf->Upload                 = CcspCwmpsoMcoUpload;
        pCcspCwmpMcoIf->FactoryReset           = CcspCwmpsoMcoFactoryReset;
        pCcspCwmpMcoIf->ChangeDUState          = CcspCwmpsoMcoChangeDUState;

        pCcspCwmpMcoIf->GetParamDataType       = CcspCwmpsoMcoGetParamDataType;
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
AnscLpccoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PANSC_LPC_CONNECTOR_OBJECT      pMyObject     = (PANSC_LPC_CONNECTOR_OBJECT   )hThisObject;
    PANSC_IMC_INTERFACE             pAnscImcIf    = (PANSC_IMC_INTERFACE          )pMyObject->hAnscImcIf;
    PANSC_CPC_INTERFACE             pAnscCpcIf    = (PANSC_CPC_INTERFACE          )pMyObject->hAnscCpcIf;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pConnTimerObj = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hConnTimerObj;
    PANSC_TDO_CLIENT_OBJECT         pConnTimerIf  = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hConnTimerIf;

    if ( !pAnscImcIf )
    {
        pAnscImcIf = (PANSC_IMC_INTERFACE)AnscAllocateMemory(sizeof(ANSC_IMC_INTERFACE));

        if ( !pAnscImcIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hAnscImcIf = (ANSC_HANDLE)pAnscImcIf;
        }

        AnscCopyString(pAnscImcIf->Name, ANSC_IMC_INTERFACE_NAME);

        pAnscImcIf->InterfaceId      = ANSC_IMC_INTERFACE_ID;
        pAnscImcIf->hOwnerContext    = (ANSC_HANDLE)pMyObject;
        pAnscImcIf->Size             = sizeof(ANSC_IMC_INTERFACE);

        pAnscImcIf->GenPartyAddr     = AnscLpccoImcGenPartyAddr;
        pAnscImcIf->GetLpcOpmode     = AnscLpccoImcGetLpcOpmode;
        pAnscImcIf->SetLpcOpmode     = AnscLpccoImcSetLpcOpmode;
        pAnscImcIf->GetPartyName     = AnscLpccoImcGetPartyName;
        pAnscImcIf->SetPartyName     = AnscLpccoImcSetPartyName;
        pAnscImcIf->IsPartyConnected = AnscLpccoImcIsPartyConnected;

        pAnscImcIf->Engage           = AnscLpccoImcEngage;
        pAnscImcIf->Cancel           = AnscLpccoImcCancel;
        pAnscImcIf->CallRequest      = AnscLpccoImcCallRequest;
        pAnscImcIf->CallRequest2     = AnscLpccoImcCallRequest2;
    }

    if ( !pAnscCpcIf )
    {
        pAnscCpcIf = (PANSC_CPC_INTERFACE)AnscAllocateMemory(sizeof(ANSC_CPC_INTERFACE));

        if ( !pAnscCpcIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hAnscCpcIf = (ANSC_HANDLE)pAnscCpcIf;
        }

        AnscCopyString(pAnscCpcIf->Name, ANSC_CPC_INTERFACE_NAME);

        pAnscCpcIf->InterfaceId      = ANSC_CPC_INTERFACE_ID;
        pAnscCpcIf->hOwnerContext    = (ANSC_HANDLE)pMyObject;
        pAnscCpcIf->Size             = sizeof(ANSC_CPC_INTERFACE);

        pAnscCpcIf->CallDispatch     = AnscLpccoCpcCallDispatch;
        pAnscCpcIf->FreeOutputBuffer = AnscLpccoCpcFreeOutputBuffer;
        pAnscCpcIf->NotifyEvent      = AnscLpccoCpcNotifyEvent;
    }

    if ( !pConnTimerObj )
    {
        pConnTimerObj =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pConnTimerObj )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hConnTimerObj = (ANSC_HANDLE)pConnTimerObj;
        }

        pConnTimerObj->SetTimerType((ANSC_HANDLE)pConnTimerObj, ANSC_TIMER_TYPE_SPORADIC   );
        pConnTimerObj->SetInterval ((ANSC_HANDLE)pConnTimerObj, ANSC_LPCCO_DEF_CONN_TIMEOUT);
    }

    if ( !pConnTimerIf )
    {
        pConnTimerIf = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pConnTimerIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hConnTimerIf = (ANSC_HANDLE)pConnTimerIf;
        }

        pConnTimerIf->hClientContext = (ANSC_HANDLE)pMyObject;
        pConnTimerIf->Invoke         = AnscLpccoConnTimerInvoke;

        pConnTimerObj->SetClient((ANSC_HANDLE)pConnTimerObj, (ANSC_HANDLE)pConnTimerIf);
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
TlsSmoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    PTLS_SESSION_MANAGER_OBJECT     pMyObject    = (PTLS_SESSION_MANAGER_OBJECT  )hThisObject;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pPatrolTimer = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hPatrolTimer;
    PANSC_TDO_CLIENT_OBJECT         pTimerClient = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hTimerClient;
    PTLS_HSM_INTERFACE              pTlsHsmIf    = (PTLS_HSM_INTERFACE           )pMyObject->hTlsHsmIf;

    if ( !pPatrolTimer )
    {
        pPatrolTimer =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pPatrolTimer )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hPatrolTimer = (ANSC_HANDLE)pPatrolTimer;
        }

        pPatrolTimer->SetTimerType((ANSC_HANDLE)pPatrolTimer, ANSC_TIMER_TYPE_PERIODIC     );
        pPatrolTimer->SetInterval ((ANSC_HANDLE)pPatrolTimer, TLS_SMO_PATROL_TIMER_INTERVAL);
    }

    if ( !pTimerClient )
    {
        pTimerClient = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pTimerClient )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hTimerClient = (ANSC_HANDLE)pTimerClient;
        }

        pTimerClient->hClientContext = (ANSC_HANDLE)pMyObject;
        pTimerClient->Invoke         = TlsSmoPatrolTimerInvoke;

        pPatrolTimer->SetClient((ANSC_HANDLE)pPatrolTimer, (ANSC_HANDLE)pTimerClient);
    }

    if ( !pTlsHsmIf )
    {
        pTlsHsmIf = (PTLS_HSM_INTERFACE)AnscAllocateMemory(sizeof(TLS_HSM_INTERFACE));

        if ( !pTlsHsmIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hTlsHsmIf = (ANSC_HANDLE)pTlsHsmIf;
        }

        AnscCopyString(pTlsHsmIf->Name, TLS_HSM_INTERFACE_NAME);

        pTlsHsmIf->InterfaceId             = TLS_HSM_INTERFACE_ID;
        pTlsHsmIf->hOwnerContext           = (ANSC_HANDLE)pMyObject;
        pTlsHsmIf->Size                    = sizeof(TLS_HSM_INTERFACE);

        pTlsHsmIf->SelHandshakeSession     = TlsSmoHsmSelHandshakeSession;
        pTlsHsmIf->GetHandshakeSession     = TlsSmoHsmGetHandshakeSession;
        pTlsHsmIf->AddHandshakeSession     = TlsSmoHsmAddHandshakeSession;
        pTlsHsmIf->DelHandshakeSession     = TlsSmoHsmDelHandshakeSession;
        pTlsHsmIf->DelAllHandshakeSessions = TlsSmoHsmDelAllHandshakeSessions;
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
HttpScoEnrollObjects
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus      = ANSC_STATUS_SUCCESS;
    PHTTP_SIMPLE_CLIENT_OBJECT      pMyObject         = (PHTTP_SIMPLE_CLIENT_OBJECT   )hThisObject;
    PHTTP_BSP_INTERFACE             pBspIf            = (PHTTP_BSP_INTERFACE          )pMyObject->hBspIf;
    PHTTP_HFP_INTERFACE             pHfpIf            = (PHTTP_HFP_INTERFACE          )pMyObject->hHfpIf;
    PHTTP_CAS_INTERFACE             pCasIf            = (PHTTP_CAS_INTERFACE          )pMyObject->hCasIf;
    PANSC_TIMER_DESCRIPTOR_OBJECT   pSessionTdo       = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hSessionTdo;
    PANSC_TDO_CLIENT_OBJECT         pSessionTdoClient = (PANSC_TDO_CLIENT_OBJECT      )pMyObject->hSessionTdoClient;

    if ( !pBspIf )
    {
        pBspIf = (PHTTP_BSP_INTERFACE)AnscAllocateMemory(sizeof(HTTP_BSP_INTERFACE));

        if ( !pBspIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hBspIf = (ANSC_HANDLE)pBspIf;
        }

        pBspIf->hOwnerContext = (ANSC_HANDLE)pMyObject;
        pBspIf->Size          = sizeof(HTTP_BSP_INTERFACE);
        pBspIf->Polish        = HttpScoBspPolish;
        pBspIf->Browse        = HttpScoBspBrowse;
        pBspIf->Notify        = HttpScoBspNotify;
    }

    if ( !pHfpIf )
    {
        pHfpIf = (PHTTP_HFP_INTERFACE)AnscAllocateMemory(sizeof(HTTP_HFP_INTERFACE));
#ifdef _CCSP_CWMP_TCP_CONNREQ_HANDLER
        AnscZeroMemory(pHfpIf, sizeof(HTTP_HFP_INTERFACE));
#endif

        if ( !pHfpIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            /* Initialize the data HFP_interface */
            pHfpIf->ParseHeader                     = AnscHttpParseHeader;
            pHfpIf->ParseRequestLine                = AnscHttpParseRequestLine;
            pHfpIf->ParseStatusLine                 = AnscHttpParseStatusLine;
            pHfpIf->ParseChunkedLine                = AnscHttpParseChunkedLine;
            pHfpIf->ParseHttpUrl                    = AnscHttpParseUrl;
            pHfpIf->ParseQueryString                = AnscHttpParseQueryString;
            pHfpIf->GetHeaderParam                  = AnscHttpGetHeaderParam;
            pHfpIf->GetHeaderSize                   = AnscHttpGetHeaderSize;
            pHfpIf->GetStatusLineSize               = AnscHttpGetStatusLineSize;
            pHfpIf->GetRequestLineSize              = AnscHttpGetRequestLineSize;
            pHfpIf->BuildHeader                     = AnscHttpBuildHeader;
            pHfpIf->BuildRequestLine                = AnscHttpBuildRequestLine;
            pHfpIf->BuildStatusLine                 = AnscHttpBuildStatusLine;

            /* set the owner context and size of the structure */
            pHfpIf->hOwnerContext                   = hThisObject;
            pHfpIf->Size                            = sizeof(HTTP_HFP_INTERFACE);

            /* register minimum header info */
            AnscHttpRegisterAllHeadersXInfo();
            pMyObject->hHfpIf = (ANSC_HANDLE)pHfpIf;
        }
#ifndef _CCSP_CWMP_TCP_CONNREQ_HANDLER
        pHfpIf->hOwnerContext = (ANSC_HANDLE)NULL;
        pHfpIf->Size          = sizeof(HTTP_HFP_INTERFACE);
#endif
    }

    if ( !pCasIf )
    {
        pCasIf = (PHTTP_CAS_INTERFACE)AnscAllocateMemory(sizeof(HTTP_CAS_INTERFACE));

        if ( !pCasIf )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hCasIf   = (ANSC_HANDLE)pCasIf;
        }

        pCasIf->hOwnerContext   = (ANSC_HANDLE)pMyObject;
        pCasIf->Size            = sizeof(HTTP_CAS_INTERFACE);

        pCasIf->EnableAuth      = HttpScoCasEnableAuth;
        pCasIf->IsAuthEnabled   = HttpScoCasIsAuthEnabled;
        pCasIf->ProcessRequest  = HttpScoCasProcessRequest;
        pCasIf->ProcessResponse = HttpScoCasProcessResponse;
        pCasIf->ClearAuthInfo   = HttpScoCasClearAuthInfo;
    }

    if ( !pSessionTdo )
    {
        pSessionTdo =
            (PANSC_TIMER_DESCRIPTOR_OBJECT)AnscCreateTimerDescriptor
                (
                    pMyObject->hContainerContext,
                    (ANSC_HANDLE)pMyObject,
                    (ANSC_HANDLE)NULL
                );

        if ( !pSessionTdo )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSessionTdo = (ANSC_HANDLE)pSessionTdo;
        }

        pSessionTdo->SetTimerType((ANSC_HANDLE)pSessionTdo, ANSC_TIMER_TYPE_PERIODIC      );
        pSessionTdo->SetInterval ((ANSC_HANDLE)pSessionTdo, HTTP_SCO_SESSION_TIME_INTERVAL);
    }

    if ( !pSessionTdoClient )
    {
        pSessionTdoClient = (PANSC_TDO_CLIENT_OBJECT)AnscAllocateMemory(sizeof(ANSC_TDO_CLIENT_OBJECT));

        if ( !pSessionTdoClient )
        {
            return  ANSC_STATUS_RESOURCES;
        }
        else
        {
            pMyObject->hSessionTdoClient = (ANSC_HANDLE)pSessionTdoClient;
        }

        pSessionTdoClient->hClientContext = (ANSC_HANDLE)pMyObject;
        pSessionTdoClient->Invoke         = HttpScoSessionTdoInvoke;

        pSessionTdo->SetClient((ANSC_HANDLE)pSessionTdo, (ANSC_HANDLE)pSessionTdoClient);
    }

    AnscCoEnrollObjects((ANSC_HANDLE)pMyObject);

    return  ANSC_STATUS_SUCCESS;
}