Index: src/ch/UpdateChecker.cpp
===================================================================
diff -u -r53cb62334fc09a404726d92af726eca6141ad177 -rd9982d1ee462dceb76298ef4216f0b6122d004a6
--- src/ch/UpdateChecker.cpp	(.../UpdateChecker.cpp)	(revision 53cb62334fc09a404726d92af726eca6141ad177)
+++ src/ch/UpdateChecker.cpp	(.../UpdateChecker.cpp)	(revision d9982d1ee462dceb76298ef4216f0b6122d004a6)
@@ -3,72 +3,110 @@
 #include <afxinet.h>
 #include <atlconv.h>
 #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;
 	}
 }