ANSC_HANDLE AnscXmlDomNodeGetNextChild ( ANSC_HANDLE hThisObject, ANSC_HANDLE hThisChild ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hThisObject; PANSC_XML_DOM_NODE_OBJECT pChildNode = NULL; PANSC_XML_DOM_NODE_OBJECT pThisChild = (PANSC_XML_DOM_NODE_OBJECT)hThisChild; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; if ( pThisChild ) { AnscAcquireXmlLock(&pXmlNode->ChildNodeQueueLock); pSLinkEntry = AnscQueueGetNextEntry(&pThisChild->Linkage); AnscReleaseXmlLock(&pXmlNode->ChildNodeQueueLock); if ( pSLinkEntry ) { pChildNode = ACCESS_ANSC_XML_DOM_NODE_OBJECT(pSLinkEntry); } } else { pChildNode = (PANSC_XML_DOM_NODE_OBJECT)AnscXmlDomNodeGetHeadChild((ANSC_HANDLE)pXmlNode); } return (ANSC_HANDLE)pChildNode; }
/********************************************************************** prototype: ANSC_HANDLE CcspCwmpSoappoUtilFindChildNode ( ANSC_HANDLE hXmlNode, PCHAR pInputName ); description: This function is called to find the child node with the specified node name (ignore namespace); argument: ANSC_HANDLE hXmlNode The xml node; PCHAR pInputName The input node name; return: the node found; **********************************************************************/ ANSC_HANDLE CcspCwmpSoappoUtilFindChildNode ( ANSC_HANDLE hXmlNode, PCHAR pInputName ) { PANSC_XML_DOM_NODE_OBJECT pTempNode = (PANSC_XML_DOM_NODE_OBJECT)hXmlNode; PANSC_XML_DOM_NODE_OBJECT pChildNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PCHAR pNodeName = NULL; pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pTempNode); while(pChildNode != NULL) { pNodeName = CcspCwmpSoappoUtilGetNodeNameWithoutNS ( AnscXmlDomNodeGetName(pChildNode) ); if( pNodeName != NULL && AnscEqualString(pNodeName, pInputName, TRUE)) { return pChildNode; } pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pTempNode, pChildNode); } return NULL; }
BOOL AnscXmlDomNodeEnumChild ( ANSC_HANDLE hNode, PFN_XML_NODE_ENUM_KID_PROC EnumProc, PVOID pData ) { PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hNode; PANSC_XML_DOM_NODE_OBJECT pKid; pKid = AnscXmlDomNodeGetHeadChild((ANSC_HANDLE)pXmlNode); while (pKid) { if (!EnumProc(pKid, pData)) return FALSE; pKid = AnscXmlDomNodeGetNextChild((ANSC_HANDLE)pXmlNode, (ANSC_HANDLE)pKid); } return TRUE; }
void AnscXmlDomNodeSetLevel ( ANSC_HANDLE hNode, ULONG ulLevel ) { PANSC_XML_DOM_NODE_OBJECT pKid; PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hNode; if (pXmlNode) { pXmlNode->Level = ulLevel; pKid = AnscXmlDomNodeGetHeadChild(hNode); while (pKid) { AnscXmlDomNodeSetLevel((ANSC_HANDLE)pKid, ulLevel + 1); pKid = AnscXmlDomNodeGetNextChild(hNode, (ANSC_HANDLE)pKid); } } }
/********************************************************************** prototype: BOOL CcspCrLoadDeviceProfile ( ANSC_HANDLE hCcspCr ); description: This function is called to load device profile for CR. argument: ANSC_HANDLE hCcspCr the handle of CCSP CR component; return: Succeeded or not; **********************************************************************/ BOOL CcspCrLoadDeviceProfile ( ANSC_HANDLE hCcspCr ) { PCCSP_CR_MANAGER_OBJECT pMyObject = (PCCSP_CR_MANAGER_OBJECT)hCcspCr; PCCSP_NAMESPACE_MGR_OBJECT pNSMgr = (PCCSP_NAMESPACE_MGR_OBJECT)pMyObject->hCcspNamespaceMgr; ANSC_HANDLE pFileHandle = NULL; char* pXMLContent = NULL; char* pBackContent = NULL; ULONG uXMLLength = 0; PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PANSC_XML_DOM_NODE_OBJECT pListNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PANSC_XML_DOM_NODE_OBJECT pChildNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; BOOL bStatus = TRUE; ULONG uFileLength = 0; ULONG uBufferSize = 0; char buffer[512] = { 0 }; ULONG uLength = 511; PCCSP_COMPONENT_INFO pCompInfo = (PCCSP_COMPONENT_INFO)NULL; /* load from the file */ pFileHandle = AnscOpenFile ( CCSP_CR_DEVICE_PROFILE_XML_FILE, ANSC_FILE_O_BINARY | ANSC_FILE_O_RDONLY, ANSC_FILE_S_IREAD ); if( pFileHandle == NULL) { AnscTrace("Failed to load the file : '%s'\n", CCSP_CR_DEVICE_PROFILE_XML_FILE); return FALSE; } uFileLength = AnscGetFileSize( pFileHandle); pXMLContent = (char*)AnscAllocateMemory( uFileLength + 8); if( pXMLContent == NULL) { return FALSE; } uBufferSize = uFileLength + 8; if( AnscReadFile( pFileHandle, pXMLContent, &uBufferSize) != ANSC_STATUS_SUCCESS) { AnscFreeMemory(pXMLContent); return FALSE; } if( pFileHandle != NULL) { AnscCloseFile(pFileHandle); } /* parse the XML content */ pBackContent = pXMLContent; pXmlNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomParseString((ANSC_HANDLE)NULL, (PCHAR*)&pXMLContent, uBufferSize); AnscFreeMemory(pBackContent); if( pXmlNode == NULL) { AnscTraceWarning(("Failed to parse the CR profile file.\n")); return FALSE; } /* load CR name */ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pXmlNode, CCSP_CR_XML_NODE_crName); if( pChildNode != NULL && pChildNode->GetDataString(pChildNode, NULL, buffer, &uLength) == ANSC_STATUS_SUCCESS && uLength > 0) { pMyObject->pCRName = AnscCloneString(buffer); } else { pMyObject->pCRName = AnscCloneString(CCSP_CR_NAME); } AnscTraceWarning(("CR Name: %s\n", pMyObject->pCRName)); #if 0 /* load prefix name */ /* Prefix will be set from command line instead */ uLength = 511; AnscZeroMemory(buffer, 512); pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pXmlNode, CCSP_CR_XML_NODE_prefix); if( pChildNode != NULL && pChildNode->GetDataString(pChildNode, NULL, buffer, &uLength) == ANSC_STATUS_SUCCESS && uLength > 0) { pMyObject->pPrefix = AnscCloneString(buffer); pNSMgr->SubsysPrefix = AnscCloneString(buffer); AnscTraceWarning(("CR Prefix: %s\n", pMyObject->pPrefix)); } #endif /* get remote cr array */ pListNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pXmlNode, CCSP_CR_XML_NODE_remote); if( pListNode != NULL) { pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pListNode); while(pChildNode != NULL) { /* load remote cr information */ if(!CcspCrLoadRemoteCRInfo(hCcspCr, (ANSC_HANDLE)pChildNode)) { AnscTraceWarning(("Failed to load remote cr infor.\n")); } pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pListNode, pChildNode); } } /* get the component array node */ pListNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pXmlNode, CCSP_CR_XML_NODE_components); if( pListNode != NULL) { pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pListNode); while(pChildNode != NULL) { /* load component information */ if(!CcspCrLoadComponentProfile(hCcspCr, (ANSC_HANDLE)pChildNode)) { AnscTraceWarning(("Failed to load component profile.\n")); } pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pListNode, pChildNode); } } if( pXmlNode != NULL) { pXmlNode->Remove(pXmlNode); } /* create a Component Info for CR itself */ pCompInfo = (PCCSP_COMPONENT_INFO)CcspCrAllocateMemory(sizeof(CCSP_COMPONENT_INFO)); if( pCompInfo != NULL) { pCompInfo->pComponentName = CcspCrCloneString(CCSP_CR_NAME); pCompInfo->uVersion = CCSP_CR_VERSION; pCompInfo->uStatus = CCSP_Component_NotRegistered; AnscQueuePushEntry(&pMyObject->CompInfoQueue, &pCompInfo->Linkage); } return bStatus; }
ANSC_HANDLE AnscXmlDomNodeCopy ( ANSC_HANDLE hNode ) { CHAR pNodeName[128] = { 0 }; ULONG uNodeLength = 128; PANSC_XML_DOM_NODE_OBJECT pOld = (PANSC_XML_DOM_NODE_OBJECT)hNode; PANSC_XML_DOM_NODE_OBJECT pCopy = NULL; PANSC_XML_ATTRIBUTE pFirst = NULL; PANSC_XML_ATTRIBUTE pNewAttribute = NULL; PANSC_XML_DOM_NODE_OBJECT pFirstNode = NULL; ANSC_HANDLE hCopy, hChild; if( hNode == NULL) { return (ANSC_HANDLE)NULL; } /* create a new node with the node name */ pCopy = (PANSC_XML_DOM_NODE_OBJECT)AnscXmlDomNodeCreate(pOld->hOwnerContext); if( pCopy == NULL) { return (ANSC_HANDLE)NULL; } hCopy = (ANSC_HANDLE)pCopy; AnscXmlDomNodeSetName(hCopy, AnscXmlDomNodeGetName(hNode)); /* copy all the attributes */ pFirst = (PANSC_XML_ATTRIBUTE)AnscXmlDomNodeGetFirstAttr(hNode); while ( pFirst != NULL) { /* * generate a new tree Attribute */ pNewAttribute = (PANSC_XML_ATTRIBUTE)AnscAllocateMemory(sizeof(ANSC_XML_ATTRIBUTE)); if ( !pNewAttribute ) { AnscXmlDomNodeRemove( hCopy ); ANSC_XML_TRACE("Failed to allocate attribute structure for in ALXMLCopyHandle\n"); return (ANSC_HANDLE)NULL; } AnscZeroMemory(pNewAttribute, sizeof(ANSC_XML_ATTRIBUTE)); pNewAttribute->hParentNode = (ANSC_HANDLE)pCopy; pNewAttribute->hXMLContext = pCopy->hXMLContext; pNewAttribute->DataSize = pFirst->DataSize; pNewAttribute->StringData = AnscAllocateMemory( pFirst->DataSize + 1); if( pNewAttribute->StringData != NULL) { AnscZeroMemory(pNewAttribute->StringData,pFirst->DataSize + 1); /* copy the attribute name and value */ AnscCopyString(pNewAttribute->Name, pFirst->Name); if( pFirst->StringData != NULL) { AnscCopyMemory(pNewAttribute->StringData, pFirst->StringData, pNewAttribute->DataSize); } /* add the attribute to the list */ AnscAcquireXmlLock(&pCopy->AttributesListLock); AnscQueuePushEntry(&pCopy->AttributesList, &pNewAttribute->Linkage); AnscReleaseXmlLock(&pCopy->AttributesListLock); } else { AnscFreeMemory(pNewAttribute); } /* goto next attribute */ pFirst = (PANSC_XML_ATTRIBUTE)AnscXmlDomNodeGetNextAttr(hNode, (ANSC_HANDLE)pFirst); } /* copy the text value */ if( pOld->DataSize > 0 && pOld->StringData != NULL) { pCopy->DataSize = pOld->DataSize; pCopy->StringData = AnscAllocateMemory( pOld->DataSize + 1); if( pCopy->StringData != NULL) { AnscZeroMemory(pCopy->StringData, pOld->DataSize + 1); AnscCopyMemory(pCopy->StringData, pOld->StringData, pOld->DataSize); } else { pCopy->DataSize = 0; } } /* create and copy all the child node */ pFirstNode = AnscXmlDomNodeGetHeadChild(hNode); while( pFirstNode ) { hChild = AnscXmlDomNodeCopy((ANSC_HANDLE)pFirstNode); if (hChild) AnscXmlDomNodeAddChild(hCopy, hChild); /* goto the next node */ pFirstNode = AnscXmlDomNodeGetNextChild(hNode, (ANSC_HANDLE)pFirstNode); } return hCopy; }
/********************************************************************** prototype: ANSC_STATUS CcspCwmpSoappoUtilGetParamAttribute ( ANSC_HANDLE hXmlHandle, ANSC_HANDLE hAttrHandle ); description: This function is called to get the parameter attribute from the xml handle. argument: ANSC_HANDLE hXmlHandle, The XML node; ANSC_HANDLE hAttrHandle The parameter attribute handle return: the status of the operation. **********************************************************************/ ANSC_STATUS CcspCwmpSoappoUtilGetParamAttribute ( ANSC_HANDLE hXmlHandle, ANSC_HANDLE hAttrHandle ) { PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hXmlHandle; PANSC_XML_DOM_NODE_OBJECT pListNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PANSC_XML_DOM_NODE_OBJECT pChildNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PCCSP_CWMP_SET_PARAM_ATTRIB pParamAttr = (PCCSP_CWMP_SET_PARAM_ATTRIB)hAttrHandle; ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; CHAR pValue[2048] = { 0 }; PCHAR pBegin = NULL; ULONG length = 2048; ULONG uLeft = 2048; /*************************************************************************** * Argument | Type | Description * *************************************************************************** * Name | string(256) | This is the name of a Parameter. * *-------------------------------------------------------------------------* * Notification | boolean | notification update .* * Change | | . * *-------------------------------------------------------------------------* * Notification | int(0:2) | notification value .* *-------------------------------------------------------------------------* * AccessList | boolean | change accesslist or not .* * Change | | . * *-------------------------------------------------------------------------* * AccesList | string(64)[] | array of access list .* ***************************************************************************/ /* * Get the name first; */ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pXmlNode); if( pChildNode == NULL) { CcspTr069PaTraceError(("Invalid arguments for ParameterAttributeStruct.\n")); return ANSC_STATUS_FAILURE; } length = 256; returnStatus = AnscXmlDomNodeGetDataString ( pChildNode, NULL, pValue, &length ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the parameter name.\n")); return returnStatus; } pParamAttr->Name = CcspTr069PaCloneString(pValue); /* * Get the notification change flag */ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pXmlNode, pChildNode); if( pChildNode == NULL) { CcspTr069PaTraceError(("Invalid arguments for ParameterAttributeStruct.\n")); return ANSC_STATUS_FAILURE; } returnStatus = AnscXmlDomNodeGetDataBoolean ( pChildNode, NULL, &pParamAttr->bNotificationChange ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the notification flag.\n")); return returnStatus; } /* * Get the notificateion value */ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pXmlNode, pChildNode); if( pChildNode == NULL) { CcspTr069PaTraceError(("Invalid arguments for ParameterAttributeStruct.\n")); return ANSC_STATUS_FAILURE; } returnStatus = AnscXmlDomNodeGetDataUlong ( pChildNode, NULL, &pParamAttr->Notification ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the notification value.\n")); return returnStatus; } /* * Get the accesslist change flag */ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pXmlNode, pChildNode); if( pChildNode == NULL) { CcspTr069PaTraceError(("Invalid arguments for ParameterAttributeStruct.\n")); return ANSC_STATUS_FAILURE; } returnStatus = AnscXmlDomNodeGetDataBoolean ( pChildNode, NULL, &pParamAttr->bAccessListChange ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the AccessListChange flag.\n")); return returnStatus; } /* * Get the accesslist */ pParamAttr->AccessList = NULL; pListNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pXmlNode, pChildNode); if( pListNode == NULL) { return ANSC_STATUS_SUCCESS; } length = 2048; AnscZeroMemory(pValue, length); pBegin = pValue; pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pListNode); while( pChildNode != NULL) { if( pBegin != pValue) { AnscCopyMemory(pBegin, CCSP_CWMP_COMMA, AnscSizeOfString(CCSP_CWMP_COMMA)); pBegin += AnscSizeOfString(CCSP_CWMP_COMMA); uLeft -= AnscSizeOfString(CCSP_CWMP_COMMA); length = uLeft; } returnStatus = AnscXmlDomNodeGetDataString ( pChildNode, NULL, pBegin, &length ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the AccessList value.\n")); return returnStatus; } pBegin += length; uLeft -= length; length = uLeft; pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pListNode, pChildNode); } if( pBegin != pValue) { pParamAttr->AccessList = CcspTr069PaCloneString(pValue); } return returnStatus; }
/********************************************************************** prototype: ANSC_STATUS CcspCwmpSoappoUtilGetParamValue ( ANSC_HANDLE hXmlHandle, ANSC_HANDLE hParamHandle ); description: This function is called to get the parameter value from the xml handle. argument: ANSC_HANDLE hXmlHandle, The XML node; ANSC_HANDLE hParamHandle The parameter handle return: the status of the operation. **********************************************************************/ ANSC_STATUS CcspCwmpSoappoUtilGetParamValue ( ANSC_HANDLE hCcspCwmpMcoIf, ANSC_HANDLE hXmlHandle, ANSC_HANDLE hParamHandle ) { PCCSP_CWMP_MCO_INTERFACE pCcspCwmpMcoIf = (PCCSP_CWMP_MCO_INTERFACE)hCcspCwmpMcoIf; PANSC_XML_DOM_NODE_OBJECT pXmlNode = (PANSC_XML_DOM_NODE_OBJECT)hXmlHandle; PANSC_XML_DOM_NODE_OBJECT pNameNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PANSC_XML_DOM_NODE_OBJECT pValueNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PCCSP_CWMP_PARAM_VALUE pCwmpParam = (PCCSP_CWMP_PARAM_VALUE)hParamHandle; PSLAP_VARIABLE pSlapVariable= (PSLAP_VARIABLE)NULL; ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; CHAR pValue[1024] = { 0 }; ULONG dataType = CCSP_CWMP_TR069_DATA_TYPE_Unspecified; ULONG length = 1024; ULONG uLongValue = 0; LONG longValue = 0; BOOL bBool = FALSE; BOOL bIsInteger = FALSE; PANSC_XML_ATTRIBUTE pAttribute = NULL; char* pDataType = NULL; char pTemp[64] = { 0 }; CHAR pHugeValue[32000] = { 0 }; /* Config file value could be as big as 32K */ pCwmpParam->Value = NULL; /*************************************************************************** * Argument | Type | Description * *************************************************************************** * Name | string(256) | This is the name of a Parameter. * *-------------------------------------------------------------------------* * Value | any | Teh is the value to be set .* ***************************************************************************/ pNameNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetHeadChild(pXmlNode); pValueNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetTailChild(pXmlNode); if( pNameNode == NULL || pValueNode == NULL || pNameNode == pValueNode) { CcspTr069PaTraceError(("Invalid arguments for ParameterValueStruct.\n")); return ANSC_STATUS_FAILURE; } /* * Get the name first; */ length = 256; returnStatus = AnscXmlDomNodeGetDataString ( pNameNode, NULL, pValue, &length ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the parameter name.\n")); return returnStatus; } if( length == 0) { CcspTr069PaTraceError(("Empty parameter name in SetParameterValues.\n")); return ANSC_STATUS_FAILURE; } pCwmpParam->Name = CcspTr069PaCloneString(pValue); length = 1024; AnscZeroMemory(pValue, length); pSlapVariable = (PSLAP_VARIABLE)CcspTr069PaAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pSlapVariable ) { return ANSC_STATUS_RESOURCES; } SlapInitVariable(pSlapVariable); pCwmpParam->Value = pSlapVariable; pSlapVariable->Name = NULL; pSlapVariable->ContentType = 0; pSlapVariable->UsageType = 0; /* check the value */ length = 32000; returnStatus = AnscXmlDomNodeGetDataString ( pValueNode, NULL, pHugeValue, &length ); if( returnStatus != ANSC_STATUS_SUCCESS) { CcspTr069PaTraceError(("Failed to get the string parameter value.\n")); CcspTr069PaFreeMemory(pSlapVariable); pCwmpParam->Value = NULL; } else { pSlapVariable->ContentType = SLAP_CONTENT_TYPE_UNSPECIFIED; pSlapVariable->UsageType = 0; pSlapVariable->Syntax = SLAP_VAR_SYNTAX_string; pSlapVariable->Variant.varString = CcspTr069PaCloneString(pHugeValue); } pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_Unspecified; /* retrieve data type */ if ( TRUE ) { PANSC_XML_ATTRIBUTE pAttribute; pCwmpParam->Tr069DataType = pCcspCwmpMcoIf->GetParamDataType(pCcspCwmpMcoIf->hOwnerContext, pCwmpParam->Name); pAttribute = (PANSC_XML_ATTRIBUTE)AnscXmlDomNodeGetFirstAttr(pValueNode); if ( pAttribute ) { char* pDataType; AnscCopyMemory(pValue, pAttribute->StringData, pAttribute->DataSize); pDataType = _ansc_strstr(pValue, ":"); if ( !pDataType ) { pDataType = pValue; } else { pDataType ++; } if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_string, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_String; } else if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_int, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_Int; } else if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_unsignedInt, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_UnsignedInt; } else if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_boolean, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_Boolean; } else if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_dateTime, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_DateTime; } else if ( AnscEqualString(pDataType, CCSP_CWMP_DATA_NAME_base64, TRUE) ) { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_Base64; } else { pCwmpParam->Tr069DataType = CCSP_CWMP_TR069_DATA_TYPE_Unspecified; } } } if ( pCwmpParam->Tr069DataType == CCSP_CWMP_TR069_DATA_TYPE_Unspecified ) { return ANSC_STATUS_BAD_PARAMETER; } return ANSC_STATUS_SUCCESS; }