static void CcspTr069PaSsp_XML_GetOneItemByName ( PANSC_XML_DOM_NODE_OBJECT pRootNode, char* ItemName, char** retVal ) { PANSC_XML_DOM_NODE_OBJECT pChildNode = NULL; int uLength = 511; char buffer[512] = {0}; if (pRootNode && retVal && ItemName) { if(*retVal) { AnscFreeMemory(*retVal); *retVal=NULL; } uLength=511; pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pRootNode, ItemName); if(pChildNode != NULL && pChildNode->GetDataString(pChildNode, NULL, buffer, &uLength) == ANSC_STATUS_SUCCESS && uLength > 0) { *retVal = CcspTr069PaCloneString(buffer); } } CcspTr069PaTraceDebug(("%s: %s = %s\n", __FUNCTION__, (ItemName)?(ItemName):"NULL", (*retVal)?(*retVal):"NULL")); // fprintf(stderr, "%s: %s = %s\n", __FUNCTION__, (ItemName)?(ItemName):"NULL", (*retVal)?(*retVal):"NULL"); }
static ANSC_STATUS CcspTr069PaSsp_XML_GetMultipleItemWithSameName ( PANSC_XML_DOM_NODE_OBJECT pRootNode, char* ItemName, char** retVal ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_XML_DOM_NODE_OBJECT pChildNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; char buffer[512] = {0}; ULONG uLength = 511; if (pRootNode && ItemName && retVal) { if(*retVal) { CcspTr069PaFreeMemory(*retVal); *retVal = NULL; } pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pRootNode, ItemName); while( pChildNode != NULL) { if (AnscEqualString(pChildNode->Name, ItemName, TRUE)) { uLength = 511; // uLength: passes in max buffer length; gets out actual length if (pChildNode->GetDataString(pChildNode, NULL, buffer, &uLength) == ANSC_STATUS_SUCCESS && uLength > 0) { if(*retVal) { char* sptr = (char*)CcspTr069PaAllocateMemory(AnscSizeOfString(*retVal)+1+uLength+1); if(sptr == NULL) { CcspTr069PaTraceWarning(("Failed to reallocate returnCA\n")); CcspTr069PaFreeMemory(*retVal); *retVal = NULL; returnStatus = ANSC_STATUS_RESOURCES; goto EXIT; } _ansc_sprintf(sptr, "%s,%s", *retVal, buffer); CcspTr069PaFreeMemory(*retVal); *retVal = sptr; } else *retVal = CcspTr069PaCloneString(buffer); } } pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetNextChild(pRootNode, pChildNode); } CcspTr069PaTraceDebug(("%s: %s = %s\n", __FUNCTION__, (ItemName)?(ItemName):"NULL", (*retVal)?(*retVal):"NULL")); // fprintf(stderr, "%s: %s = %s\n", __FUNCTION__, (ItemName)?(ItemName):"NULL", (*retVal)?(*retVal):"NULL"); } EXIT: return returnStatus; }
ANSC_HANDLE AnscXmlDomNodeAddChildByName ( ANSC_HANDLE hThisObject, char* name ) { 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; BOOL bUnique = FALSE; if ( bUnique ) { pChildNode = AnscXmlDomNodeGetChildByName((ANSC_HANDLE)pXmlNode, name); } else { pChildNode = NULL; } if ( pChildNode ) { return (ANSC_HANDLE)pChildNode; } else { pChildNode = (PANSC_XML_DOM_NODE_OBJECT)AnscXmlDomNodeCreate(pXmlNode->hOwnerContext); if ( !pChildNode ) { return (ANSC_HANDLE)NULL; } else { AnscXmlDomNodeSetParentNode((ANSC_HANDLE)pChildNode, (ANSC_HANDLE)pXmlNode); AnscXmlDomNodeSetName ((ANSC_HANDLE)pChildNode, name); } AnscXmlDomNodeAddChild((ANSC_HANDLE)pXmlNode, (ANSC_HANDLE)pChildNode); AnscXmlDomNodeSetLevel((ANSC_HANDLE)pChildNode, AnscXmlDomNodeGetLevel((ANSC_HANDLE)pXmlNode) + 1); } return (ANSC_HANDLE)pChildNode; }
ANSC_STATUS AnscXmlDomNodeDelChildByName ( ANSC_HANDLE hThisObject, char* name ) { 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; pChildNode = AnscXmlDomNodeGetChildByName((ANSC_HANDLE)pXmlNode, name); if ( pChildNode ) { AnscXmlDomNodeDelChild((ANSC_HANDLE)pXmlNode, (ANSC_HANDLE)pChildNode); } return ANSC_STATUS_SUCCESS; }
/********************************************************************** 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_STATUS CcspTr069PaSsp_LoadCfgFile ( char* pCfgFileName ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; char* pXMLContent = NULL; ULONG uBufferSize = 0; char partnerID[128]; /* load configuration file */ { ANSC_HANDLE pFileHandle = NULL; pFileHandle = AnscOpenFile ( pCfgFileName, ANSC_FILE_O_BINARY | ANSC_FILE_O_RDONLY, ANSC_FILE_S_IREAD ); if( pFileHandle == NULL) { CcspTr069PaTraceWarning(("Failed to open file %s\n", pCfgFileName)); return ANSC_STATUS_FAILURE; } uBufferSize = AnscGetFileSize(pFileHandle) + 8; pXMLContent = (char*)AnscAllocateMemory(uBufferSize); if (pXMLContent == NULL) { CcspTr069PaTraceWarning(("Failed to allocate buffer\n")); AnscCloseFile(pFileHandle); return ANSC_STATUS_RESOURCES; } if ( AnscReadFile(pFileHandle, pXMLContent, &uBufferSize) != ANSC_STATUS_SUCCESS ) { CcspTr069PaTraceWarning(("Failed to read file %s\n", pCfgFileName)); AnscFreeMemory(pXMLContent); AnscCloseFile(pFileHandle); return ANSC_STATUS_FAILURE; } AnscCloseFile(pFileHandle); } /* * Parse the XML content */ { PANSC_XML_DOM_NODE_OBJECT pRootNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; PANSC_XML_DOM_NODE_OBJECT pChildNode = (PANSC_XML_DOM_NODE_OBJECT)NULL; char* pXMLIterator = pXMLContent; pRootNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomParseString((ANSC_HANDLE)NULL, (PCHAR*)&pXMLIterator, uBufferSize); if ( pRootNode == NULL ) { CcspTr069PaTraceWarning(("Failed to parse the file to retrieve the root node!\n")); returnStatus = ANSC_STATUS_FAILURE; goto EXIT; } #ifdef _ANSC_USE_OPENSSL_ pChildNode = (PANSC_XML_DOM_NODE_OBJECT) AnscXmlDomNodeGetChildByName(pRootNode, CCSP_TR069PA_CFG_Name_Certificates); if ( pChildNode != NULL) { CcspTr069PaSsp_XML_GetMultipleItemWithSameName(pChildNode, CCSP_TR069PA_CERTIFICATE_CFG_Name_ca, &openssl_client_ca_certificate_files); CcspTr069PaSsp_XML_GetOneItemByName(pChildNode, CCSP_TR069PA_CERTIFICATE_CFG_Name_dev, &openssl_client_dev_certificate_file); CcspTr069PaSsp_XML_GetOneItemByName(pChildNode, CCSP_TR069PA_CERTIFICATE_CFG_Name_pkey, &openssl_client_private_key_file); } #endif CcspTr069PaSsp_XML_GetOneItemByName(pRootNode, CCSP_TR069PA_CFG_Name_Outbound_If, &g_Tr069PaOutboundIfName); CcspTr069PaSsp_GetPartnerID(partnerID); if (strcmp(partnerID,"comcast")==0) { CcspTr069PaSsp_XML_GetOneItemByName(pRootNode, CCSP_TR069PA_CFG_Name_AcsDefAddr, &g_Tr069PaAcsDefAddr); } else { CcspTr069PaSsp_XML_GetOneItemByName(pRootNode, partnerID, &g_Tr069PaAcsDefAddr); } returnStatus = ANSC_STATUS_SUCCESS; } EXIT: AnscFreeMemory(pXMLContent); return returnStatus; }