Index: src/ch/UpdateChecker.cpp =================================================================== diff -u -N -r53cb62334fc09a404726d92af726eca6141ad177 -rd9982d1ee462dceb76298ef4216f0b6122d004a6 --- src/ch/UpdateChecker.cpp (.../UpdateChecker.cpp) (revision 53cb62334fc09a404726d92af726eca6141ad177) +++ src/ch/UpdateChecker.cpp (.../UpdateChecker.cpp) (revision d9982d1ee462dceb76298ef4216f0b6122d004a6) @@ -3,72 +3,110 @@ #include #include #include "../common/version.h" +#include "../libicpf/cfg.h" +#include "../libicpf/exception.h" -CUpdateChecker::ECheckResult CUpdateChecker::CheckForUpdates(bool bCheckBeta) +CUpdateChecker::ECheckResult CUpdateChecker::CheckForUpdates(const tchar_t* pszSite, bool bCheckBeta) { try { + CString strSite(pszSite); + strSite.Replace(_T("http://"), _T("")); + CInternetSession inetSession; - CHttpConnection* pHttpConnection = inetSession.GetHttpConnection(_T("www.copyhandler.com"), INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 80); + CHttpConnection* pHttpConnection = inetSession.GetHttpConnection(strSite, INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 80); if(!pHttpConnection) - return eResult_Error; + { + m_eResult = eResult_Error; + return m_eResult; + } - CString strAddr = _T("chver.php?ver="); - strAddr += bCheckBeta ? _T("beta") : _T("stable"); + CString strAddr = _T("chver.ini"); CHttpFile* pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET, strAddr); if(!pHttpFile) - return eResult_Error; + { + m_eResult = eResult_Error; + return m_eResult; + } if(!pHttpFile->SendRequest()) - return eResult_Error; + { + m_eResult = eResult_Error; + return m_eResult; + } - char szBuf[512]; - UINT uiRD = pHttpFile->Read(szBuf, 511); + const size_t stBufferSize(65536); + tchar_t* pszBuf = new tchar_t[stBufferSize]; + UINT uiRD = pHttpFile->Read(pszBuf, stBufferSize - 1); if(uiRD > 0) - szBuf[uiRD] = _T('\0'); + pszBuf[uiRD] = _T('\0'); // convert text to unicode - CA2CT a2ct(szBuf); + icpf::config cfg(icpf::config::eIni); + const uint_t uiVersionNumeric = cfg.register_string(_t("Version/Numeric"), _t("")); + const uint_t uiVersionReadable = cfg.register_string(_t("Version/Human Readable"), _t("")); + const uint_t uiDownloadAddress = cfg.register_string(_t("Version/Download Address"), pszSite); + const uint_t uiBetaVersionNumeric = cfg.register_string(_t("Version/Numeric Beta"), _t("")); + const uint_t uiBetaVersionReadable = cfg.register_string(_t("Version/Human Readable Beta"), _t("")); + const uint_t uiBetaDownloadAddress = cfg.register_string(_t("Version/Download Address Beta"), pszSite); + try + { + cfg.read_from_buffer(pszBuf, uiRD); + } + catch(icpf::exception& e) + { + m_strLastError = e.get_desc(); - CString strVersion = a2ct; - CString strNumericVersion; - CString strReadableVersion; - int iPos = strVersion.Find(_t('|')); - if(iPos != -1) + delete [] pszBuf; + m_eResult = eResult_Error; + return m_eResult; + } + delete [] pszBuf; + + if(bCheckBeta) { - strNumericVersion = strVersion.Mid(0, iPos); - strReadableVersion = strVersion.Mid(iPos + 1); + m_strReadableVersion = cfg.get_string(uiBetaVersionReadable); + m_strNumericVersion = cfg.get_string(uiBetaVersionNumeric); + m_strDownloadAddress = cfg.get_string(uiBetaDownloadAddress); } - else - strNumericVersion = strVersion; - m_strRemoteVersion = strReadableVersion; + if(!bCheckBeta || m_strNumericVersion.IsEmpty()) + { + m_strNumericVersion = cfg.get_string(uiVersionNumeric); + m_strReadableVersion = cfg.get_string(uiVersionReadable); + m_strDownloadAddress = cfg.get_string(uiDownloadAddress); + } // and compare to current version ushort_t usVer[4]; - if(_stscanf(strNumericVersion, _t("%hu.%hu.%hu.%hu"), &usVer[0], &usVer[1], &usVer[2], &usVer[3]) != 4) + if(_stscanf(m_strNumericVersion, _t("%hu.%hu.%hu.%hu"), &usVer[0], &usVer[1], &usVer[2], &usVer[3]) != 4) { TRACE(_T("Error parsing retrieved version number.")); - return eResult_Error; + m_eResult = eResult_Error; + return m_eResult; } ull_t ullCurrentVersion = ((ull_t)PRODUCT_VERSION1) << 48 | ((ull_t)PRODUCT_VERSION2) << 32 | ((ull_t)PRODUCT_VERSION3) << 16 | ((ull_t)PRODUCT_VERSION4); ull_t ullSiteVersion = ((ull_t)usVer[0]) << 48 | ((ull_t)usVer[1]) << 32 | ((ull_t)usVer[2]) << 16 | ((ull_t)usVer[3]); if(ullCurrentVersion < ullSiteVersion) - return eResult_VersionNewer; + m_eResult = eResult_VersionNewer; else if(ullCurrentVersion == ullSiteVersion) - return eResult_VersionCurrent; + m_eResult = eResult_VersionCurrent; else - return eResult_VersionOlder; + m_eResult = eResult_VersionOlder; + + return m_eResult; } catch(CInternetException* e) { TCHAR* pszBuffer = m_strLastError.GetBufferSetLength(1024); e->GetErrorMessage(pszBuffer, 1023); pszBuffer[1023] = _T('\0'); m_strLastError.ReleaseBuffer(); + m_strLastError.TrimRight(); - return eResult_Error; + m_eResult = eResult_Error; + return m_eResult; } }