AutoUpdate.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /*-------------------------------------------------------------------------
  2. AutoUpdate.cpp
  3. Management of the AutoUpdate system
  4. Owner:
  5. Copyright 1986-2000 Microsoft Corporation, All Rights Reserved
  6. *-----------------------------------------------------------------------*/
  7. #include "pch.h"
  8. class CAutoUpdateImpl :
  9. public IAutoUpdate
  10. {
  11. public:
  12. CAutoUpdateImpl() :
  13. m_crcFileList(0),
  14. m_nFileListSize(0)
  15. {
  16. }
  17. /////////////////////////////////////////////////////////////////////////
  18. void LoadSettings(HKEY hk)
  19. {
  20. bool m_bAutoUpdateActive;
  21. m_bAutoUpdateActive = _Module.ReadFromRegistry(hk, true, "FTPArtServer", m_szFTPServer, NULL);
  22. m_bAutoUpdateActive = _Module.ReadFromRegistry(hk, true, "FTPArtRoot", m_szFTPInitialDir, NULL) && m_bAutoUpdateActive;
  23. _Module.ReadFromRegistry(hk, true, "FTPAccount", m_szFTPAccount, (DWORD)"Anonymous", false);
  24. _Module.ReadFromRegistry(hk, true, "FTPPW", m_szFTPPassword, (DWORD)"Unknown", false);
  25. if (!m_bAutoUpdateActive)
  26. {
  27. _Module.LogEvent(EVENTLOG_ERROR_TYPE, LE_BadAutoUpdateConfig);
  28. g_pAutoUpdate = NULL;
  29. delete this;
  30. }
  31. }
  32. /////////////////////////////////////////////////////////////////////////
  33. void LoadCRC(char * szFileName)
  34. {
  35. char szErrorMsg[200+MAX_PATH];
  36. HANDLE hFile = CreateFile(szFileName,
  37. GENERIC_READ,
  38. FILE_SHARE_READ,
  39. NULL,
  40. OPEN_EXISTING,
  41. FILE_ATTRIBUTE_NORMAL,
  42. NULL);
  43. if (hFile == INVALID_HANDLE_VALUE)
  44. {
  45. sprintf(szErrorMsg, "Failed open file (%s); Error Code: %d ", szFileName, GetLastError());
  46. }
  47. else
  48. {
  49. m_nFileListSize = GetFileSize(hFile, NULL);
  50. char szErrorMsgBuffer[100+MAX_PATH];
  51. m_crcFileList = FileCRC(hFile, szErrorMsgBuffer);
  52. if (m_crcFileList == 0)
  53. {
  54. sprintf(szErrorMsg, "Error while determining CRC; %s", szErrorMsgBuffer);
  55. }
  56. else
  57. {
  58. ::CloseHandle(hFile);
  59. return;
  60. }
  61. }
  62. _Module.LogEvent(EVENTLOG_ERROR_TYPE, LE_AutoUpdateDeactivated, szErrorMsg);
  63. g_pAutoUpdate = NULL;
  64. delete this;
  65. }
  66. /////////////////////////////////////////////////////////////////////////
  67. char * GetFTPServer()
  68. {
  69. return m_szFTPServer;
  70. }
  71. /////////////////////////////////////////////////////////////////////////
  72. char * GetFTPInitialDir()
  73. {
  74. return m_szFTPInitialDir;
  75. }
  76. /////////////////////////////////////////////////////////////////////////
  77. char * GetFTPAccount()
  78. {
  79. return m_szFTPAccount;
  80. }
  81. /////////////////////////////////////////////////////////////////////////
  82. char * GetFTPPassword()
  83. {
  84. return m_szFTPPassword;
  85. }
  86. /////////////////////////////////////////////////////////////////////////
  87. int GetFileListCRC()
  88. {
  89. return m_crcFileList;
  90. }
  91. /////////////////////////////////////////////////////////////////////////
  92. unsigned GetFileListSize()
  93. {
  94. return m_nFileListSize;
  95. }
  96. /////////////////////////////////////////////////////////////////////////
  97. private:
  98. char m_szFTPServer[MAX_PATH+1];
  99. char m_szFTPInitialDir[MAX_PATH+1];
  100. char m_szFTPAccount[MAX_PATH+1];
  101. char m_szFTPPassword[MAX_PATH+1];
  102. int m_crcFileList;
  103. unsigned m_nFileListSize;
  104. };
  105. IAutoUpdate * g_pAutoUpdate = NULL; // NULL if AutoUpdate is disabled
  106. void CreateAutoUpdate(HKEY hk, char * szFileName)
  107. {
  108. g_pAutoUpdate = new CAutoUpdateImpl();
  109. g_pAutoUpdate->LoadSettings(hk);
  110. if (g_pAutoUpdate) // if loading settings failed, g_pAutoUpdate is NULL
  111. {
  112. g_pAutoUpdate->LoadCRC(szFileName);
  113. }
  114. }