ULONG
IPv6PingServerTable_GetParamStringValue
    (
        ANSC_HANDLE                 hInsContext,
        char*                       ParamName,
        char*                       pValue,
        ULONG*                      pUlSize
    )
{
    PCOSA_CONTEXT_SELFHEAL_LINK_OBJECT   pSelfHealCxtLink     = (PCOSA_CONTEXT_SELFHEAL_LINK_OBJECT)hInsContext;
    PCOSA_DML_SELFHEAL_IPv6_SERVER_TABLE pServerIpv6  = (PCOSA_DML_SELFHEAL_IPv6_SERVER_TABLE)pSelfHealCxtLink->hContext;
    PUCHAR                                    pString       = NULL;
	
    /* check the parameter name and return the corresponding value */
    if( AnscEqualString(ParamName, "X_RDKCENTRAL-COM_Ipv6PingServerURI", TRUE))
    {
        /* collect value */
        if ( AnscSizeOfString(pServerIpv6->Ipv6PingServerURI) < *pUlSize)
        {
            AnscCopyString(pValue, pServerIpv6->Ipv6PingServerURI);
            return 0;
        }
        else
        {
            *pUlSize = AnscSizeOfString(pServerIpv6->Ipv6PingServerURI)+1;
            return 1;
        }
    }
	    return -1;
}
ANSC_STATUS
CosaDmlDiGetProvisioningCode
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        ULONG*                      pulSize
    )
{
#if 0
    UtopiaContext ctx;
    int rc = -1;
    char temp[64];

    if (!Utopia_Init(&ctx))
        return ERR_UTCTX_INIT;

    rc = Utopia_Get_Prov_Code(&ctx,temp);

    Utopia_Free(&ctx,0);
    AnscCopyString(pValue,temp);
    *pulSize = AnscSizeOfString(pValue);
#endif

// Provisioning Code sent to ACS is Serial Number of the device
#ifdef _COSA_DRG_TPG_
    plat_GetFlashValue("unitsn", unitsn);
    sprintf(pValue, "%c%c%c%c%c%c%c",unitsn[0],unitsn[1],unitsn[2],unitsn[3],unitsn[4],unitsn[5],unitsn[6]);
#elif _COSA_INTEL_USG_ARM_

    if (platform_hal_GetSerialNumber(pValue) != RETURN_OK )
        return ANSC_STATUS_FAILURE;
#endif
    *pulSize = AnscSizeOfString(pValue);
    return ANSC_STATUS_SUCCESS; 
}
static
char*
Bmc2EnvcoFindSubStrNoCase
    (
        char*                       pString,
        char*                       pSub
    )
{
    int                             i, nStringLen, nSubLen;

    if ( !pString || !pSub )
    {
        return NULL;
    }

    nStringLen = AnscSizeOfString(pString);
    nSubLen    = AnscSizeOfString(pSub);

    for ( i = 0; i <= nStringLen - nSubLen; i ++ )
    {
        if ( AnscEqualString2(pString+i, pSub, nSubLen, FALSE) )
        {
            return pString+i;
        }
    }

    return  NULL;
}
BOOL
Bmc2ComeoSoaIsBuiltInObject
    (
        ANSC_HANDLE                 hThisObject,
        char*                       obj_name
    )
{
    PBMC2_PEC_INTERFACE             pBmc2PecIf      = (PBMC2_PEC_INTERFACE)hThisObject;
    ULONG                           i;
    ULONG                           ulLen;
    ULONG                           ulObjNameLen    = obj_name ? AnscSizeOfString(obj_name) : 0;
    PUCHAR                          pObjName;

    for (i = 0; i < sizeof(s_Bmc2BuiltinObjs)/sizeof(s_Bmc2BuiltinObjs[0]); i ++)
    {
        pObjName        = (PUCHAR)s_Bmc2BuiltinObjs[i];
        ulLen           = AnscSizeOfString(pObjName);

        if ( ulObjNameLen != ulLen )
        {
            continue;
        }

        if ( AnscEqualString2(obj_name, pObjName, ulLen, TRUE) )
        {
            return TRUE;
        }
    }

    return FALSE;
}
/**********************************************************************  

    caller:     owner of this object 

    prototype: 

        ULONG
        Process_GetParamStringValue
            (
                ANSC_HANDLE                 hInsContext,
                char*                       ParamName,
                char*                       pValue,
                ULONG*                      pUlSize
            );

    description:

        This function is called to retrieve string parameter value; 

    argument:   ANSC_HANDLE                 hInsContext,
                The instance handle;

                char*                       ParamName,
                The parameter name;

                char*                       pValue,
                The string value buffer;

                ULONG*                      pUlSize
                The buffer of length of string value;
                Usually size of 1023 will be used.
                If it's not big enough, put required size here and return 1;

    return:     0 if succeeded;
                1 if short of buffer size; (*pUlSize = required size)
                -1 if not supported.

**********************************************************************/
ULONG
Process_GetParamStringValue
    (
        ANSC_HANDLE                 hInsContext,
        char*                       ParamName,
        char*                       pValue,
        ULONG*                      pUlSize
    )
{
    PCOSA_PROCESS_ENTRY        p_proc = (PCOSA_PROCESS_ENTRY)hInsContext;

    /* check the parameter name and return the corresponding value */
    if( AnscEqualString(ParamName, "Command", TRUE))
    {
        /* collect value */
        if ( AnscSizeOfString(p_proc->Command) < *pUlSize)
        {
            AnscCopyString(pValue, p_proc->Command);
            return 0;
        }
        else
        {
            *pUlSize = AnscSizeOfString(p_proc->Command)+1;
            return 1;
        }
    }


    /* CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName)); */
    return -1;
}
ANSC_STATUS
CosaDmlDiGetHardwareVersion
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        ULONG*                      pulSize
    )
{

#ifdef _COSA_INTEL_USG_ARM_    

    if (platform_hal_GetHardwareVersion(pValue) != RETURN_OK )
        return ANSC_STATUS_FAILURE;
    else {
        *pulSize = AnscSizeOfString(pValue);
        return ANSC_STATUS_SUCCESS;
    }

#elif _COSA_DRG_TPG_
//Replace this with syscfg if we are pulling this from Cable modem later on 
    UCHAR hwVersion[128];
    memset(hwVersion,0,128);    
    plat_GetFlashValue("hwid", hwVersion);
    sprintf(pValue, "%X%X",hwVersion[0],hwVersion[1]);
    *pulSize = AnscSizeOfString(pValue);
    return ANSC_STATUS_SUCCESS;
#endif  
}
/**********************************************************************

    caller:     owner of this object

    prototype:

        BOOL
        NetworkDevicesTraffic_Default_Validate
            (
                ANSC_HANDLE                 hInsContext,
                char*                       pReturnParamName,
                ULONG*                      puLength
            );

    description:
        This function is called to finally commit all the update.

    argument:   ANSC_HANDLE                 hInsContext,
                The instance handle;

                char*                       pReturnParamName,
                The buffer (128 bytes) of parameter name if there's a validation.

                ULONG*                      puLength
                The output length of the param name.

    return:     TRUE if there's no validation.

**********************************************************************/
BOOL
NetworkDevicesTraffic_Default_Validate
    (
        ANSC_HANDLE                 hInsContext,
        char*                       pReturnParamName,
        ULONG*                      puLength
    )
{
    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, LMLite %s : ENTER \n", __FUNCTION__ ));

    if(g_pReports->bNDTDefPollingPeriodChanged)
    {
        BOOL validated = ValidateNDTPeriod(g_pReports->uNDTPollingPeriodDefault);
        if(!validated)
        {
            CcspLMLiteTrace(("RDK_LOG_ERROR, LMLite %s : Default PollingPeriod Validation Failed : [%d] Value not Allowed \n", __FUNCTION__ , g_pReports->uNDTPollingPeriodDefault));
            AnscCopyString(pReturnParamName, "PollingPeriod");
            *puLength = AnscSizeOfString("PollingPeriod");
            return FALSE;
        }

        ULONG period = (g_pReports->bNDTDefReportingPeriodChanged == TRUE) ? g_pReports->uNDTReportingPeriodDefault : GetNDTReportingPeriodDefault();

        if (g_pReports->uNDTPollingPeriodDefault > period)
        {
            CcspLMLiteTrace(("RDK_LOG_ERROR, LMLite %s : Default PollingPeriod Validation Failed : New Default Polling Period [%d] > Current Default Reporting Period [%d] \n", __FUNCTION__ , g_pReports->uNDTPollingPeriodDefault, period ));
            AnscCopyString(pReturnParamName, "PollingPeriod");
            *puLength = AnscSizeOfString("PollingPeriod");
            return FALSE;
        }
    }

    if(g_pReports->bNDTDefReportingPeriodChanged)
    {
        BOOL validated = ValidateNDTPeriod(g_pReports->uNDTReportingPeriodDefault);
        if(!validated)
        {
            CcspLMLiteTrace(("RDK_LOG_ERROR, LMLite %s : Default ReportingPeriod Validation Failed : [%d] Value not Allowed \n", __FUNCTION__ , g_pReports->uNDTReportingPeriodDefault));
            AnscCopyString(pReturnParamName, "ReportingPeriod");
            *puLength = AnscSizeOfString("ReportingPeriod");
            return FALSE;
        }

        ULONG period = (g_pReports->bNDTDefPollingPeriodChanged == TRUE) ? g_pReports->uNDTPollingPeriodDefault : GetNDTPollingPeriodDefault();

	if (g_pReports->uNDTReportingPeriodDefault < period)
        {
            CcspLMLiteTrace(("RDK_LOG_ERROR, LMLite %s : Default ReportingPeriod Validation Failed : New Default Reporting Period [%d] < Current Default Polling Period [%d] \n", __FUNCTION__ , g_pReports->uNDTReportingPeriodDefault, period ));
            AnscCopyString(pReturnParamName, "ReportingPeriod");
            *puLength = AnscSizeOfString("ReportingPeriod");
            return FALSE;
        }
    }

    CcspLMLiteConsoleTrace(("RDK_LOG_DEBUG, LMLite %s : EXIT \n", __FUNCTION__ ));

    return TRUE;
}
/**********************************************************************

    prototype:

        ANSC_STATUS
        CcspCwmpAcscoConnect
            (
                ANSC_HANDLE                 hThisObject
            );

    description:

        This function is called to connect to ACS.

    argument:

                ANSC_HANDLE                 hThisObject
                The caller object.

    return:     the status of the operation;

**********************************************************************/
ANSC_STATUS
CcspCwmpAcscoConnect
    (
        ANSC_HANDLE                 hThisObject
    )
{
    PCCSP_CWMP_ACS_CONNECTION_OBJECT pMyObject      = (PCCSP_CWMP_ACS_CONNECTION_OBJECT)hThisObject;
    PHTTP_SIMPLE_CLIENT_OBJECT      pHttpClient     = (PHTTP_SIMPLE_CLIENT_OBJECT)pMyObject->hHttpSimpleClient;
    ANSC_STATUS                     returnStatus    = ANSC_STATUS_SUCCESS;
    PCCSP_CWMP_SESSION_OBJECT       pWmpSession     = (PCCSP_CWMP_SESSION_OBJECT   )pMyObject->hCcspCwmpSession;

    if ( pWmpSession )
    {
        PCCSP_CWMP_CPE_CONTROLLER_OBJECT pCcspCwmpCpeController = (PCCSP_CWMP_CPE_CONTROLLER_OBJECT)pWmpSession->hCcspCwmpCpeController;
		
		if ( pCcspCwmpCpeController )
		{
    	    PCCSP_CWMP_CFG_INTERFACE    pCcspCwmpCfgIf  = (PCCSP_CWMP_CFG_INTERFACE)pCcspCwmpCpeController->hCcspCwmpCfgIf;
	        PHTTP_SIMPLE_CLIENT_OBJECT	pHttpClient     = (PHTTP_SIMPLE_CLIENT_OBJECT)pMyObject->hHttpSimpleClient;
        	ULONG                       ulSessionIdleTimeout = 0;

    	    if ( pCcspCwmpCfgIf && pCcspCwmpCfgIf->GetHttpSessionIdleTimeout )
	        {
        	    ulSessionIdleTimeout = pCcspCwmpCfgIf->GetHttpSessionIdleTimeout(pCcspCwmpCfgIf->hOwnerContext);
    	    }

	        pHttpClient->SetSessionIdleTimeout((ANSC_HANDLE)pHttpClient, ulSessionIdleTimeout);

            // fprintf(stderr, "<RT> %s: OutboundIfName = '%s'\n", __FUNCTION__, pCcspCwmpCpeController->OutboundIfName ? pCcspCwmpCpeController->OutboundIfName : "NULL");
            if ( pCcspCwmpCpeController->OutboundIfName && pCcspCwmpCpeController->OutboundIfName[0] 
                    &&  AnscSizeOfString(pCcspCwmpCpeController->OutboundIfName) < HTTP_MAX_DEVICE_NAME_SIZE)
            {
                AnscCopyString(pHttpClient->Property.BindToDevice.DeviceName, pCcspCwmpCpeController->OutboundIfName);
            }
            else
            {
                pHttpClient->Property.BindToDevice.DeviceName[0] = '\0';
            }
		}
    }

    if( pMyObject->AcsUrl == NULL || AnscSizeOfString(pMyObject->AcsUrl) <= 10)
    {
        return ANSC_STATUS_NOT_READY;
    }

    returnStatus = pHttpClient->Engage  ((ANSC_HANDLE)pHttpClient);

    if( returnStatus == ANSC_STATUS_SUCCESS)
    {
        pMyObject->bActive          = TRUE;
    }

    return returnStatus;
}
/**********************************************************************

    prototype:

        char*
        DslhVarroMacAddrListToString
            (
                SLAP_UCHAR_ARRAY*           mac_addr_list
            );

    description:

        This function is called to export MAC address list to a string.

    argument:   SLAP_UCHAR_ARRAY*           mac_addr_list
                The input mac address list;

    return:     The exported string;

**********************************************************************/
char*
DslhVarroMacAddrListToString
    (
        SLAP_UCHAR_ARRAY*           mac_addr_list
    )
{
    char*                           var_string   = (char*                     )(mac_addr_list? AnscAllocateMemory(mac_addr_list->VarCount * 24 / 6 + 1) : NULL);
    ULONG                           i            = 0;

    if ( !var_string )
    {
        return  NULL;
    }
    else if ( !mac_addr_list || (mac_addr_list->VarCount == 0) )
    {
        return  var_string;
    }

    for ( i = 0; i < mac_addr_list->VarCount; i++ )
    {
        if( i != 0 )
        {
            if ( (i % 6) == 0)
            {
                _ansc_sprintf
                    (
                        &var_string[AnscSizeOfString(var_string)],
                        ","
                    );
            }
            else if( i % 6 )
            {
                _ansc_sprintf
                    (
                        &var_string[AnscSizeOfString(var_string)],
                        ":"
                    );
            }
        }

        _ansc_sprintf
            (
                &var_string[AnscSizeOfString(var_string)],
                "%02X",
                mac_addr_list->Array.arrayUchar[i]
            );
    }

    return  var_string;
}
static ANSC_STATUS
Local_CosaDmlGetParamValueByPathName
    (
        const char *pathName,
        char *pValue,
        PULONG pulSize
    )
{

    ANSC_STATUS retval = ANSC_STATUS_FAILURE;
    parameterValStruct_t varStruct;
    char outdata[80];
    int size = sizeof(outdata);

    varStruct.parameterName = pathName;
    varStruct.parameterValue = outdata;

    retval = COSAGetParamValueByPathName(bus_handle, &varStruct, &size);
    
    if ( retval != ANSC_STATUS_SUCCESS) 
    {
        return ANSC_STATUS_FAILURE;
    }
    else 
    {
        AnscCopyString(pValue, outdata);
        *pulSize = AnscSizeOfString(pValue);
        return ANSC_STATUS_SUCCESS;
    }
}
char*
DslhVarroGetFullName
    (
        ANSC_HANDLE                 hThisObject
    )
{
    ANSC_STATUS                     returnStatus   = ANSC_STATUS_SUCCESS;
    PDSLH_VAR_RECORD_OBJECT         pMyObject      = (PDSLH_VAR_RECORD_OBJECT)hThisObject;
    PDSLH_VAR_ENTITY_OBJECT         pVarEntity     = (PDSLH_VAR_ENTITY_OBJECT)pMyObject->hDslhVarEntity;
    PDSLH_OBJ_RECORD_OBJECT         pObjRecord     = (PDSLH_OBJ_RECORD_OBJECT)pMyObject->hDslhObjRecord;
    char*                           pLastName      = (char*                  )pVarEntity->ParamDescr->Name;
    char*                           pFullName      = (char*                  )NULL;
    ULONG                           ulFullNameSize = (ULONG                  )0;

    ulFullNameSize = (pObjRecord->FullName? AnscSizeOfString(pObjRecord->FullName) : 0) + AnscSizeOfString(pLastName) + 4;
    pFullName      = (char*)AnscAllocateMemory(ulFullNameSize);

    if ( !pFullName )
    {
        return  NULL;
    }
    else
    {
        _ansc_sprintf
            (
                pFullName,
                "%s%s",
                pObjRecord->FullName,
                pLastName
            );
    }

    return  pFullName;
}
void
AnscStringCOTrimRightString
    (
        ANSC_HANDLE                 hThisObject,
        PUCHAR                      pTrimStr
    )
{
    PANSC_STRING_OBJECT             pStringObj  = (PANSC_STRING_OBJECT)hThisObject;
    PUCHAR                          pValue;
    ULONG                           ulStrLen;
    ULONG                           TrimLen;
    PUCHAR                          pRightStr;

    if (pStringObj && pTrimStr)
    {
        pValue      = pStringObj->pValue;
        ulStrLen    = pStringObj->ulValueLen;

        TrimLen     = AnscSizeOfString(pTrimStr);
        if (TrimLen > ulStrLen || TrimLen == 0)
            return;

        pRightStr   = pValue + (ulStrLen - TrimLen);

        if (AnscEqualMemory(pRightStr, pTrimStr, TrimLen))
        {
            *pRightStr  = 0;
            pStringObj->ulValueLen  -= TrimLen;
        }
    }
}
void
AnscStringCOSetString
    (
        ANSC_HANDLE                 hThisObject,
        PUCHAR                      pValue              /* ZERO-terminated string */
    )
{
    PANSC_STRING_OBJECT             pStringObj  = (PANSC_STRING_OBJECT)hThisObject;
    ULONG                           ulLen;
    ULONG                           ulCopySize;

    if (!pStringObj || !pValue)
        return;

    ulLen   = AnscSizeOfString(pValue);
    
    /* buffer is not big enough */
    if (pStringObj->ulValueBufferLen <= ulLen)
    {
        pStringObj->Resize(hThisObject, ulLen + 1);
    }

    ulCopySize  = ulLen;
    if (ulCopySize >= pStringObj->ulValueBufferLen)
    {
        /* have to trunk the string */
        ulCopySize  = pStringObj->ulValueBufferLen - 1;
    }

    pStringObj->SetBuffer(hThisObject, pValue, ulCopySize);
}
ANSC_STATUS
CosaDmlDiGetFirstUseDate
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        PULONG                      pulSize
    )
{
    UtopiaContext ctx;
    int rc = -1;
    char firstUseDate[64];

    if (!Utopia_Init(&ctx))
        return ERR_UTCTX_INIT;

    rc = Utopia_Get_First_Use_Date(&ctx,firstUseDate);

    Utopia_Free(&ctx,0);

    //    fprintf(stderr, "<RT> rc=%d, First Use Date = '%s'\n", rc, firstUseDate);

    if(rc || firstUseDate[0] == '\0') _ansc_sprintf(firstUseDate, "2013-11-22T00:00:00");

    AnscCopyString(pValue,firstUseDate);
    *pulSize = AnscSizeOfString(pValue);
    
    return ANSC_STATUS_SUCCESS;
}
BOOL
DslhVarroIsValidMacAddress
    (
        PCHAR                       pAddress
    )
{
    ULONG                           length   = 0;
    ULONG                           i        = 0;
    char                            c        = 0;

    if( pAddress == NULL)
    {
        return TRUE; /* empty string is fine */
    }

    length = AnscSizeOfString(pAddress);

    if( length == 0)
    {
        return TRUE; /* empty string is fine */
    }

    /*
     *  Mac address such as "12:BB:AA:99:34:89" is fine, and mac adress
     *  with Mask is also OK, such as "12:BB:AA:99:34:89/FF:FF:FF:FF:FF:00".
     */
    if( length != 17 && length != 35)
    {
        return FALSE;
    }

    if( length > 17 && pAddress[17] != '/')
    {
        return FALSE;
    }

    for( i = 0; i < length ; i ++)
    {
        c = pAddress[i];

        if( i % 3 == 2)
        {
            if( i != 17 && c != ':')
            {
                return FALSE;
            }
        }
        else
        {
            if ( AnscIsAlphaOrDigit(c) )
            {
                continue;
            }

            return FALSE;
        }
    }

    return TRUE;
}
void
AnscStringArraySetAt
    (
        ANSC_HANDLE                 hThisObject,
        ULONG                       ulIndex,
        ANSC_OBJECT_ARRAY_DATA      Data
    )
{
    PANSC_STRING_ARRAY_OBJECT       pStringArray  = (PANSC_STRING_ARRAY_OBJECT)hThisObject;

    if (!pStringArray || pStringArray->ulMaxItemCount <= ulIndex)
        return;
    else
    {
        PUCHAR                      *pStorage;
        PUCHAR                      pData, pStr;
        ULONG                       ulStrLen;

        pStorage    = (PUCHAR *)pStringArray->hStorage;

        pData       = (PUCHAR)Data;
        ulStrLen    = AnscSizeOfString(pData);
        pStr        = (PUCHAR)AnscAllocateMemory(ulStrLen + 1);
        AnscCopyString(pStr, pData);

        pStorage[ulIndex]   = pStr;
    }
}
/**********************************************************************

    caller:     owner of this object

    prototype:

        ANSC_HANDLE
        DslhCpecoGetInterfaceByName
            (
                ANSC_HANDLE                 hThisObject,
                char*                       ifName
            );

    description:

        This function is called to retrieve the interface handle specified
        by the interface name;

    argument:   ANSC_HANDLE                 hThisObject
                This handle is actually the pointer of this object
                itself.

                char*                       ifName
                The specified interface name;

    return:     status of operation.

**********************************************************************/
ANSC_HANDLE
DslhCpecoGetInterfaceByName
    (
        ANSC_HANDLE                 hThisObject,
        char*                       ifName
    )
{
    PDSLH_CPE_CONTROLLER_OBJECT     pMyObject    = (PDSLH_CPE_CONTROLLER_OBJECT  )hThisObject;
    PANSC_INTERFACE_OBJECT          pInterface   = (PANSC_INTERFACE_OBJECT)NULL;
    ULONG                           i            = 0;

    if( ifName == NULL || AnscSizeOfString(ifName) == 0)
    {
        AnscTrace("Unable to retrieve interface in DslhCpeController.\n");

        return NULL;
    }

    for( i = 0; i < pMyObject->uIfCount; i ++)
    {
        pInterface = (PANSC_INTERFACE_OBJECT)pMyObject->hIfArray[i];

        if( pInterface != NULL && AnscEqualString(pInterface->Name, ifName, TRUE))
        {
            return (ANSC_HANDLE)pInterface;
        }
    }

    AnscTrace("Unable to retrieve interface '%s' in DslhCpeController.\n", ifName);


    return NULL;
}
char*
HttpBmoReqRcpGetPathTranslated
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hBmoReq
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PHTTP_BMO_REQ_OBJECT            pMyObject    = (PHTTP_BMO_REQ_OBJECT         )hThisObject;
    PHTTP_REQUEST_INFO              pReqInfo     = (PHTTP_REQUEST_INFO           )pMyObject->hReqInfo;
    char*                           pPathInfo    = (char*                        )pMyObject->RcpBpad;
    ULONG                           ulPathLen    = 0;
    ULONG                           i            = 0;

    for ( i = 0; i < pReqInfo->RequestUri.PathLevel; i++ )
    {
        AnscCopyString((char*)(pPathInfo + ulPathLen), pReqInfo->RequestUri.PathArray[i]);

        ulPathLen             += AnscSizeOfString(pReqInfo->RequestUri.PathArray[i]);
        pPathInfo[ulPathLen++] = '/';
    }

    if ( ulPathLen > 1 )
    {
        pPathInfo[--ulPathLen] = 0;
    }

    return  pPathInfo;
}
Beispiel #19
0
/**********************************************************************

    prototype:

        char*
        CcspCrLookforRemoteCR
            (
                ANSC_HANDLE                 hCcspCr,
                char*                       pPrefix
            );

    description:

        This function is called to look for remote cr path specified by name.

    argument:   ANSC_HANDLE                                 hCcspCr
                the handle of CCSP CR component;

                char*                       pPrefix
                The specified subsystem prefix;

    return:     The dbus path if found;

**********************************************************************/
char*
CcspCrLookforRemoteCR
    (
        ANSC_HANDLE                 hThisObject,
        char*                       pPrefix
    )
{
    PCCSP_CR_MANAGER_OBJECT         pMyObject         = (PCCSP_CR_MANAGER_OBJECT)hThisObject;
    PCCSP_REMOTE_CRINFO             pCompInfo         = (PCCSP_REMOTE_CRINFO)NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry       = (PSINGLE_LINK_ENTRY)NULL;

    if( pPrefix == NULL || AnscSizeOfString(pPrefix) == 0)
    {
        return NULL;
    }

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->RemoteCRQueue);

    while ( pSLinkEntry )
    {
        pCompInfo       = ACCESS_CCSP_REMOTE_CRINFO(pSLinkEntry);
        pSLinkEntry     = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString(pCompInfo->pPrefix, (char*)pPrefix, TRUE))
        {
            return  pCompInfo->pID;
        }
    }

    return NULL;

}
ULONG
AnscGetIanaMediaSubtypeByName
    (
        ULONG                       ulMediaType,
        PUCHAR                      pMediaSubtype
    )
{
    ULONG                           ulCount, i;

    for (i = 0; i < sizeof(g_IanaMediaSubtypeLists)/sizeof(g_IanaMediaSubtypeLists[0]); i ++)
    {
        if (ulMediaType == g_IanaMediaSubtypeLists[i].MediaType)
        {
            ulCount = g_IanaMediaSubtypeLists[i].Count;

            return 
                AnscGetIanaTypeByName
                    (
                        (PANSC_UTILBOX_IANA_MEDIA)g_IanaMediaSubtypeLists[i].pSubtypes,
                        ulCount,
                        pMediaSubtype,
                        AnscSizeOfString(pMediaSubtype)
                    );
        }
    }

    return 0;
}
static ULONG
AnscGetIanaTypeByName
    (
        PANSC_UTILBOX_IANA_MEDIA    pSet,
        ULONG                       ulCount,
        PUCHAR                      pName,
        ULONG                       ulNameLen
    )
{
    ULONG                           Type    = 0;
    ULONG                           i;
    PANSC_UTILBOX_IANA_MEDIA        pInfo;

    if (!pName || ulNameLen == 0)
    {
        return 0;
    }

    for (i = 0; i < ulCount; i ++)
    {
        pInfo   = (PANSC_UTILBOX_IANA_MEDIA)&pSet[i];

        if ( pInfo->Name == NULL || 
                (ulNameLen == AnscSizeOfString(pInfo->Name) && 
                AnscEqualString2(pName, pInfo->Name, ulNameLen, FALSE)) )
        {
            return pInfo->Type;
        }
    }

    return 0;
}
ANSC_STATUS
CosaDmlGetTCPImplementation
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        ULONG*                      pulSize    
    )
{
    char value[25];
    FILE *fp;

    AnscCopyString(pValue, _ERROR_);
    memset(value,0,10);

    fp = popen("cat /proc/sys/net/ipv4/tcp_congestion_control", "r");
    if (fp == NULL)
    {
        CcspTraceWarning(("ERROR '%s'\n","ERROR")); 
        return ANSC_STATUS_FAILURE;
    }
   
    while(fgets(value, 25, fp) != NULL)
    {
        AnscCopyString(pValue ,value);
    }

    pclose(fp);
    *pulSize = AnscSizeOfString(pValue);
    return ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
CosaDmlDiGetFirmwareBuildTime
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        PULONG                      pulSize
    )
{
    FILE *fp;
    char line[512];

    if ((fp = fopen("/etc/versions", "rb")) == NULL)
        return ANSC_STATUS_FAILURE;

    while (fgets(line, sizeof(line), fp) != NULL)
    {
        if (strncmp(line, "FSSTAMP", strlen("FSSTAMP")) != 0)
            continue;

        snprintf(pValue, pulSize, "%s", line);
        *pulSize = AnscSizeOfString(pValue);
        if(pValue[*pulSize-1] == '\n') pValue[--(*pulSize)] = '\0';
        fclose(fp);
        return ANSC_STATUS_SUCCESS;
    }

    fclose(fp);
    return ANSC_STATUS_FAILURE;
}
ANSC_STATUS
AnscXmlDomNodeSetName
    (
        ANSC_HANDLE                 hThisObject,
        char*                       name
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PANSC_XML_DOM_NODE_OBJECT       pXmlNode      = (PANSC_XML_DOM_NODE_OBJECT)hThisObject;

    if( name == NULL)
    {
        return ANSC_STATUS_FAILURE;
    }

    if( ANSC_OBJECT_NAME_SIZE <= AnscSizeOfString(name))
    {
        AnscXmlWarning
            (
                "Invalid XML node name (too big)- '%s'\n",
                name
            );

        return ANSC_STATUS_FAILURE;
    }

    AnscCopyString(pXmlNode->Name, name);

    return  ANSC_STATUS_SUCCESS;
}
PUCHAR
AnscDupString
    (
        PUCHAR                      pStr
    )
{
    if (!pStr)
    {
        return NULL;
    }
    else
    {
        ULONG                       ulStrLen;
        PUCHAR                      pDupStr;

        ulStrLen    = AnscSizeOfString(pStr);

        pDupStr     = (PUCHAR)AnscAllocateMemory(ulStrLen + 1);
        if (ulStrLen != 0)
            AnscCopyString(pDupStr, pStr);
        else
            pDupStr[0]  = 0;

        return pDupStr;
    }
}
ANSC_STATUS
SlapScoSetObjName
    (
        ANSC_HANDLE                 hThisObject,
        char*                       obj_name
    )
{
    ANSC_STATUS                     returnStatus = ANSC_STATUS_SUCCESS;
    PSLAP_SRV_COMPONENT_OBJECT      pMyObject    = (PSLAP_SRV_COMPONENT_OBJECT)hThisObject;

    if ( pMyObject->ObjName )
    {
        AnscFreeMemory(pMyObject->ObjName);

        pMyObject->ObjName = NULL;
    }

    if ( obj_name )
    {
        pMyObject->ObjName = (char*)AnscAllocateMemory(AnscSizeOfString(obj_name) + 1);

        if ( pMyObject->ObjName )
        {
            AnscCopyString(pMyObject->ObjName, obj_name);
        }
    }
    else
    {
        pMyObject->ObjName = (char*)AnscAllocateMemory(1);
    }

    return  ANSC_STATUS_SUCCESS;
}
ANSC_STATUS
HttpFcoAddFormElement
    (
        ANSC_HANDLE                 hThisObject,
        ANSC_HANDLE                 hFeo
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PHTTP_FORM_CONTENT_OBJECT       pMyObject     = (PHTTP_FORM_CONTENT_OBJECT)hThisObject;
    PHTTP_HFP_INTERFACE             pHfpIf        = (PHTTP_HFP_INTERFACE      )pMyObject->hHfpIf;
    PHTTP_FORM_ELEMENT              pFormElement  = (PHTTP_FORM_ELEMENT       )hFeo;
    ULONG                           ulHashIndex   = 0;

    ulHashIndex =
        AnscHashString
            (
                pFormElement->Name,
                AnscSizeOfString(pFormElement->Name),
                HTTP_FCO_FEO_TABLE_SIZE
            );

    pFormElement->FormIndex = pMyObject->FormIndex++;
    pFormElement->HashIndex = ulHashIndex;

    AnscAcquireLock   (&pMyObject->FeoTableLock);
    AnscQueuePushEntry(&pMyObject->FeoTable[ulHashIndex], &pFormElement->Linkage);
    AnscReleaseLock   (&pMyObject->FeoTableLock);

    return  ANSC_STATUS_SUCCESS;
}
ANSC_HANDLE
HttpFcoGetFormElement
    (
        ANSC_HANDLE                 hThisObject,
        char*                       name
    )
{
    ANSC_STATUS                     returnStatus  = ANSC_STATUS_SUCCESS;
    PHTTP_FORM_CONTENT_OBJECT       pMyObject     = (PHTTP_FORM_CONTENT_OBJECT)hThisObject;
    PHTTP_HFP_INTERFACE             pHfpIf        = (PHTTP_HFP_INTERFACE      )pMyObject->hHfpIf;
    PHTTP_FORM_ELEMENT              pFormElement  = NULL;
    PSINGLE_LINK_ENTRY              pSLinkEntry   = NULL;
    ULONG                           ulHashIndex   = AnscHashString(name, AnscSizeOfString(name), HTTP_FCO_FEO_TABLE_SIZE);

    AnscAcquireLock(&pMyObject->FeoTableLock);

    pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->FeoTable[ulHashIndex]);

    while ( pSLinkEntry )
    {
        pFormElement = ACCESS_HTTP_FORM_ELEMENT(pSLinkEntry);
        pSLinkEntry  = AnscQueueGetNextEntry(pSLinkEntry);

        if ( AnscEqualString(pFormElement->Name, name, TRUE) )
        {
            AnscReleaseLock(&pMyObject->FeoTableLock);

            return  (ANSC_HANDLE)pFormElement;
        }
    }

    AnscReleaseLock(&pMyObject->FeoTableLock);

    return  (ANSC_HANDLE)NULL;
}
int
CcspCwmpAcscoHttpFindCookie
    (
        ANSC_HANDLE                 hThisObject,
        PCHAR                       pCookieName
    )
{
    PCCSP_CWMP_ACS_CONNECTION_OBJECT pMyObject         = (PCCSP_CWMP_ACS_CONNECTION_OBJECT)hThisObject;
    ULONG                           i;
    PCHAR                           pValue;
    ULONG                           ulCookieNameLen   = AnscSizeOfString(pCookieName);

    for ( i = 0; i < pMyObject->NumCookies; i ++ )
    {
        if ( pMyObject->Cookies[i] )
        {
            pValue = _ansc_strstr(pMyObject->Cookies[i], pCookieName);

			if ( !pValue ) continue;

            if ( ( pValue == pMyObject->Cookies[i] || *(pValue-1) == ' ' || *(pValue-1) == ';' ) && 
                 *(pValue + ulCookieNameLen) == '=' )
            {
                return  (int)i;
            }
        }
    }

    return -1;
}
ANSC_STATUS
CosaDmlDiGetProductClass
    (
        ANSC_HANDLE                 hContext,
        char*                       pValue,
        ULONG*                      pulSize
    )
{
/*    char val[64] = {0};
    char param_name[256] = {0};

    _ansc_sprintf(param_name, "%s%s", DMSB_TR181_PSM_DeviceInfo_Root, DMSB_TR181_PSM_DeviceInfo_ProductClass);        

    if (PsmGet(param_name, val, sizeof(val)) != 0) {
        pValue[0] = '\0';
        *pulSize = 0;
        return ANSC_STATUS_FAILURE;
    }
    else {
        AnscCopyString(pValue, val);
        *pulSize = AnscSizeOfString(pValue);
        return ANSC_STATUS_SUCCESS;
    }
*/
    AnscCopyString(pValue, "XB3");
    *pulSize = AnscSizeOfString(pValue);
    return ANSC_STATUS_SUCCESS;
}