Index: src/ch/UpdateChecker.cpp =================================================================== diff -u -N -r8ef3d7626821ec49c5cad75fd8176e492884bc7b -rd5fd15320ef765fd5225b10e764bca458c2e317c --- src/ch/UpdateChecker.cpp (.../UpdateChecker.cpp) (revision 8ef3d7626821ec49c5cad75fd8176e492884bc7b) +++ src/ch/UpdateChecker.cpp (.../UpdateChecker.cpp) (revision d5fd15320ef765fd5225b10e764bca458c2e317c) @@ -29,6 +29,8 @@ #include "../libicpf/exception.h" #include "../libicpf/circ_buffer.h" #include "../libchcore/TWin32ErrorFormatter.h" +#include "WindowsVersion.h" +#include // timeout used with waiting for events (avoiding hangs) #define FORCE_TIMEOUT 60000 @@ -74,7 +76,7 @@ /// @param[in] pszPath Url to be opened (full path to file). /// @return S_OK if opened, S_FALSE if wait for result is needed, E_* for errors. // ============================================================================ -HRESULT CAsyncHttpFile::Open(const tchar_t* pszPath) +HRESULT CAsyncHttpFile::Open(const tchar_t* pszPath, const wchar_t* pszUserAgent) { if(!pszPath) { @@ -99,7 +101,7 @@ return E_FAIL; } - m_hInternet = ::InternetOpen(_T(PRODUCT_NAME), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC); + m_hInternet = ::InternetOpen(pszUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC); if(!m_hInternet) { SetErrorCode(GetLastError()); @@ -618,6 +620,20 @@ return bCheckForBeta; } +std::wstring CUpdateChecker::GetUserAgent() +{ + std::wstring wstrUserAgent(PRODUCT_FULL_VERSION_T); + wstrUserAgent += L" (" + + boost::lexical_cast(PRODUCT_VERSION1) + L"." + + boost::lexical_cast(PRODUCT_VERSION2) + L"." + + boost::lexical_cast(PRODUCT_VERSION3) + L"." + + boost::lexical_cast(PRODUCT_VERSION4) + L")"; + + wstrUserAgent += L" (" + WindowsVersion::GetWindowsVersion() + L")"; + + return wstrUserAgent; +} + // ============================================================================ /// CUpdateChecker::GetResult /// @date 2009/04/18 @@ -662,7 +678,8 @@ vBuffer.reserve(stReserveBuffer); // open the connection and try to get to the file - HRESULT hResult = pUpdateChecker->m_httpFile.Open(strSite); + std::wstring wstrUserAgent = GetUserAgent(); + HRESULT hResult = pUpdateChecker->m_httpFile.Open(strSite, wstrUserAgent.c_str()); if(SUCCEEDED(hResult)) { eWaitResult = pUpdateChecker->m_httpFile.WaitForResult(pUpdateChecker->m_hKillEvent);