LoadHostList.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:10k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  FileName    :   LoadHostList.cpp
  4. //  Version     :   1.0
  5. //  Creater     :   Cheng Bitao
  6. //  Date        :   2002-1-7 16:26:05
  7. //  Comment     :   
  8. //
  9. //////////////////////////////////////////////////////////////////////////////////////
  10. #include "stdafx.h"
  11. #include "LoadHostList.h"
  12. #include "PublicFun.h"
  13. #include "Global.h"
  14. #include "DataDefine.h"
  15. #include "Resource.h"
  16. #include "UpdateData.h"
  17. extern KPATH_TABLE g_PathTable;
  18. extern KUPDATE_DATA g_UpdateData;
  19. int KHostList::SaveHostListFileInfo(const char cszDestFileName[], const char cszSrcFileName[])
  20. {
  21.     char szFileName[MAX_PATH]   = {0};
  22.     char szCRC32[20]            = {0};
  23.     UINT uCRC32                 = 0;
  24.     
  25.     strcpy(szFileName, g_PathTable.szModulePath);
  26.     strcat(szFileName, cszSrcFileName);
  27.     uCRC32 = GetFileCRC(szFileName);
  28.     sprintf(szCRC32, "%d", uCRC32);
  29.     WritePrivateProfileString(cszSrcFileName, "CRC32", szCRC32, cszDestFileName);
  30.  
  31.     return true;
  32. }
  33. int KHostList::IsHostListFileChanged(const char cszDestFileName[], const char cszSrcFileName[])
  34. {
  35.     char szFileName[MAX_PATH]   = {0};
  36.     int nRetCode                = 0;
  37.     UINT uCRC32                 = 0;
  38.     
  39.     strcpy(szFileName, g_PathTable.szModulePath);
  40.     strcat(szFileName, cszSrcFileName);
  41.     uCRC32 = GetPrivateProfileInt(cszSrcFileName, "CRC32", 0, cszDestFileName);
  42.     if (!FileExists(szFileName) && uCRC32)
  43.         return true;
  44.    
  45.     nRetCode = CheckFileCRC(uCRC32, szFileName);
  46.     if (nRetCode)
  47.         return false;
  48.     
  49.     return true;
  50. }
  51. void KHostList::AddHostList(KHOST_LIST *pSrcHostList, KHOST_LIST **ppDestHostList)
  52. {
  53.     KHOST_LIST *pHostList = NULL;
  54.     if (!ppDestHostList || !pSrcHostList)
  55.         return;
  56.     if ((*ppDestHostList) == NULL)
  57.     {
  58.         *ppDestHostList = pSrcHostList;
  59.     }
  60.     else
  61.     {
  62.         pHostList = *ppDestHostList;
  63.         while (pHostList->pNext)
  64.             pHostList = pHostList->pNext;
  65.         pHostList->pNext = pSrcHostList;        
  66.     }
  67. }
  68. int KHostList::LoadOrdHostList(const char cszFileName[], KHOST_LIST **ppListHost)
  69. {
  70.     int nResult = 0;
  71.     int i;
  72.     char szHostURLKey[10]       = {0};
  73.     char szHostNameKey[10]      = {0};
  74.     char szIndexKey[10]         = {0};
  75.     char szHostURL[MAX_PATH]    = {0};
  76.     char szHostName[MAX_PATH]   = {0};
  77.     int nIndex                  = 0;
  78.     DWORD dwSize                = 0;
  79.     DWORD dwRetCode             = 0;
  80.     KHOST_LIST *pHostNode       = NULL;
  81.     KAV_PROCESS_ERROR(ppListHost);        
  82.     if (FileExists(cszFileName))
  83.     {
  84.         for (i = 0; ; i++)
  85.         {
  86.             sprintf(szHostURLKey, "URL%d", i);
  87.             sprintf(szHostNameKey, "Name%d", i);
  88.             sprintf(szIndexKey, "Index%d", i);
  89.             dwSize = MAX_PATH;
  90.             dwRetCode = GetPrivateProfileString("HostList", szHostURLKey, "", szHostURL, dwSize, cszFileName);                    
  91.             if (*szHostURL == '')
  92.                 break;
  93.             dwSize = MAX_PATH;
  94.             dwRetCode = GetPrivateProfileString("HostList", szHostNameKey, "", szHostName, dwSize, cszFileName);
  95.             if (*szHostName == '')
  96.                 break;
  97.             nIndex = GetPrivateProfileInt("HostList", szIndexKey, 0, cszFileName);
  98.             // add to the list
  99.             pHostNode = new KHOST_LIST;
  100.             KAV_PROCESS_ERROR(pHostNode);
  101.             
  102.             pHostNode->nIndex = nIndex;
  103.             strcpy(pHostNode->szName, szHostName);
  104.             strcpy(pHostNode->szURL, szHostURL);
  105.             pHostNode->pNext = NULL;
  106.             AddHostList(pHostNode, ppListHost);
  107.             pHostNode = NULL;
  108.         }   
  109.     }
  110.     nResult = true;
  111. Exit0:
  112.     return nResult;
  113. }
  114. int KHostList::LoadSrcHostList(const char cszFileName[], KHOST_LIST **ppHostList)
  115. {
  116.     int nResult             = false;
  117.     CString szDubaUpdateName;
  118.     CString sPathName;
  119.     CStdioFile file;
  120.     KHOST_LIST *pHostNode   = NULL;
  121.     KAV_PROCESS_ERROR(ppHostList);
  122. // Read host information from Update.svr or Update.ext
  123.     if (g_PathTable.szModulePath[0] == '')
  124.         goto Exit0;
  125. sPathName = (CString)g_PathTable.szModulePath + cszFileName;
  126. if (!FileExists(sPathName))
  127.     {
  128.         if (stricmp(cszFileName, defHOST_LIST_FILE_EXT) != 0)
  129.         {
  130.             // Default Host
  131.             pHostNode = new KHOST_LIST;
  132.             KAV_PROCESS_ERROR(pHostNode);
  133.             pHostNode->pNext = NULL;
  134.             pHostNode->nIndex = -1;
  135.             strcpy(pHostNode->szName, g_UpdateData.szDefHostName);
  136.             strcpy(pHostNode->szURL, g_UpdateData.szDefHostURL);
  137.             
  138.             AddHostList(pHostNode, ppHostList);            
  139.         }
  140.         goto Exit1;
  141.     }         
  142. if (file.Open(sPathName, CFile::modeRead | CFile::typeText))
  143. {
  144. CString sName, sAddress;
  145.         int nIndex = 0;
  146. while (file.ReadString(sName))
  147. {
  148. sName.TrimLeft();
  149. sName.TrimRight();
  150. if (sName == "")
  151. continue;
  152.             while (file.ReadString(sAddress))
  153. {
  154. sAddress.TrimLeft();
  155. sAddress.TrimRight();
  156. if (sAddress == "")
  157. continue;
  158. pHostNode = new KHOST_LIST;
  159.                 KAV_PROCESS_ERROR(pHostNode);
  160.                 pHostNode->pNext = NULL;
  161.                 pHostNode->nIndex = -1;
  162.                 strcpy(pHostNode->szName, sName);
  163.                 strcpy(pHostNode->szURL, sAddress);
  164.                 AddHostList(pHostNode, ppHostList);            
  165.                 
  166.                 break;
  167. }
  168.             nIndex++;
  169. }
  170. file.Close();
  171. Exit1:
  172.     nResult = true;
  173. Exit0:
  174.     return nResult;
  175. }
  176. void KHostList::ReleaseHostList(KHOST_LIST **ppHostList)
  177. {
  178.     KHOST_LIST *pHostList = NULL;
  179.     if (ppHostList == NULL)
  180.         return;
  181.     pHostList = *ppHostList;
  182.     while (pHostList)
  183.     {
  184.         *ppHostList = (*ppHostList)->pNext;
  185.         delete pHostList;
  186.         
  187.         pHostList = *ppHostList;
  188.     }   
  189.     *ppHostList = NULL;
  190. }   
  191. KHostList::KHostList()
  192. {
  193.     m_nSVRChangedFlag   = 0;
  194.     m_nEXTChangedFlag   = 0;
  195.     *m_szFileName       = '';
  196.     m_pHostList         = NULL;
  197. }
  198. KHostList::KHostList(const char cszFileName[])
  199. {
  200.     LoadList(cszFileName);
  201. }
  202. KHostList::~KHostList()
  203. {
  204.     ReleaseList();
  205. }
  206. void KHostList::ReleaseList()
  207. {
  208.     ReleaseHostList(&m_pHostList);   
  209. }                
  210. int KHostList::LoadList(const char cszFileName[])
  211. {
  212.     strcpy(m_szFileName, cszFileName);
  213.     m_nSVRChangedFlag = IsHostListFileChanged(m_szFileName, defHOST_LIST_FILE_SVR);
  214.     m_nEXTChangedFlag = IsHostListFileChanged(m_szFileName, defHOST_LIST_FILE_EXT);
  215.     return LoadList();
  216. }
  217. int KHostList::LoadList()
  218. {
  219.     int nResult                 = false;
  220.     KHOST_LIST *pHostNode       = NULL;
  221.     KHOST_LIST *pHostList       = NULL;
  222.     KHOST_LIST *pOrdHostList    = NULL;
  223.     KHOST_LIST *pOrdHostNode    = NULL;
  224.     KHOST_LIST *pSrcHostList    = NULL;
  225.     int nRetCode                = 0;
  226.     
  227.     ReleaseList();
  228.     if (m_nSVRChangedFlag || m_nEXTChangedFlag)
  229.     {
  230.         nRetCode = LoadSrcHostList(defHOST_LIST_FILE_SVR, &m_pHostList);
  231.         KAV_PROCESS_ERROR(nRetCode);
  232.         nRetCode = LoadSrcHostList(defHOST_LIST_FILE_EXT, &m_pHostList);
  233.         KAV_PROCESS_ERROR(nRetCode);
  234.         nRetCode = LoadOrdHostList(m_szFileName, &pOrdHostList);
  235.         KAV_PROCESS_ERROR(nRetCode);
  236.         if (pOrdHostList)
  237.         {
  238.             pHostList = m_pHostList;
  239.             while (pHostList)
  240.             {
  241.                 pOrdHostNode = pOrdHostList;
  242.                 while (pOrdHostNode)
  243.                 {
  244.                     if (stricmp(pHostList->szURL, pOrdHostNode->szURL) == 0)
  245.                     {
  246.                         pHostList->nIndex = pOrdHostNode->nIndex;
  247.                         break;
  248.                     }
  249.                     pOrdHostNode = pOrdHostNode->pNext;
  250.                 }
  251.                 pHostList = pHostList->pNext;
  252.             }
  253.             ReleaseHostList(&pOrdHostList);
  254.         }
  255.     }
  256.     else
  257.     {
  258.         nRetCode = LoadOrdHostList(m_szFileName, &m_pHostList);
  259.         KAV_PROCESS_ERROR(nRetCode);
  260.     }
  261.     nResult = true;
  262. Exit0:
  263.     return nResult;
  264. }
  265. void KHostList::AddList(KHOST_LIST *pHostNode)
  266. {
  267.     AddHostList(pHostNode, &m_pHostList);
  268. }
  269. int KHostList::SaveList(char *pszFileName /* = NULL */)
  270. {
  271.     char *pszSaveFileName   = NULL;
  272.     KHOST_LIST *pHostList   = NULL;
  273.     char szHostURLKey[10]   = {0};
  274.     char szHostNameKey[10]  = {0};
  275.     char szIndexKey[10]     = {0};
  276.     char szIndex[10]        = {0};    
  277.     int i;
  278.     pszSaveFileName = pszFileName;
  279.     if (pszSaveFileName == NULL)
  280.         pszSaveFileName = m_szFileName;
  281.     DeleteFile(pszSaveFileName);
  282.     SaveHostListFileInfo(pszSaveFileName, defHOST_LIST_FILE_SVR);
  283.     SaveHostListFileInfo(pszSaveFileName, defHOST_LIST_FILE_EXT);
  284.     i = 0;
  285.     pHostList = m_pHostList;    
  286.     while (pHostList)
  287.     {
  288.         sprintf(szHostURLKey, "URL%d", i);
  289.         sprintf(szHostNameKey, "Name%d", i);
  290.         sprintf(szIndexKey, "Index%d", i);
  291.         
  292.         WritePrivateProfileString("HostList", szHostNameKey, pHostList->szName, pszSaveFileName);
  293.         WritePrivateProfileString("HostList", szHostURLKey, pHostList->szURL, pszSaveFileName);
  294.         sprintf(szIndex, "%d", pHostList->nIndex);
  295.         WritePrivateProfileString("HostList", szIndexKey, szIndex, pszSaveFileName);
  296.         i++;
  297.         pHostList = pHostList->pNext;        
  298.     }
  299.     return true;
  300. }
  301. int KHostList::IsHostListChanged()
  302. {
  303.     return (m_nSVRChangedFlag || m_nEXTChangedFlag);
  304. }