consolidate windows pingback

This commit is contained in:
Robin Gareus 2015-07-12 01:54:44 +02:00
parent 6315b2ebf5
commit 34315a59ad

View file

@ -73,6 +73,34 @@ struct ping_call {
: version (v), announce_path (a) {} : version (v), announce_path (a) {}
}; };
#ifdef PLATFORM_WINDOWS
static bool
_query_registry (const char *regkey, const char *regval, std::string &rv) {
HKEY key;
DWORD size = PATH_MAX;
char tmp[PATH_MAX+1];
if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ, &key))
&& (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
)
{
rv = Glib::locale_to_utf8 (tmp);
return true;
}
if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ | KEY_WOW64_32KEY, &key))
&& (ERROR_SUCCESS == RegQueryValueExA (key, regval, 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
)
{
rv = Glib::locale_to_utf8 (tmp);
return true;
}
return false;
}
#endif
static void* static void*
_pingback (void *arg) _pingback (void *arg)
{ {
@ -138,52 +166,33 @@ _pingback (void *arg)
url += s; url += s;
free (query); free (query);
#else #else
// this is hilarious: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724429%28v=vs.85%29.aspx std::string val;
HKEY key; if (_query_registry("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", val)) {
DWORD size = PATH_MAX; char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
char tmp[PATH_MAX+1]; url += "r=";
url += query;
if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &key))
&& (ERROR_SUCCESS == RegQueryValueExA (key, "ProductName", 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
// or "BuildLab" instead of "ProductName"
)
{
string s = Glib::locale_to_utf8 (tmp);
char* query = curl_easy_escape (c, s.c_str(), strlen (s.c_str()));
s = string_compose ("r=%1", query);
url += s;
url += '&'; url += '&';
free (query); free (query);
} else { } else {
url += "r=&"; url += "r=&";
} }
if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor\\0", 0, KEY_READ, &key)) if (_query_registry("Hardware\\Description\\System\\CentralProcessor\\0", "Identifier", val)) {
&& (ERROR_SUCCESS == RegQueryValueExA (key, "Identifier", 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size)) char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
// or "ProcessorNameString" instead of "Identifier" url += "m=";
) url += query;
{
string s = Glib::locale_to_utf8 (tmp);
char* query = curl_easy_escape (c, s.c_str(), strlen (s.c_str()));
s = string_compose ("m=%1", query);
url += s;
url += '&'; url += '&';
free (query); free (query);
} else { } else {
url += "m=&"; url += "m=&";
} }
url += "r=&";
# if ( defined(__x86_64__) || defined(_M_X64) ) # if ( defined(__x86_64__) || defined(_M_X64) )
url += "s=Windows64"; url += "s=Windows64";
# else # else
url += "s=Windows32"; url += "s=Windows32";
# endif # endif
#ifndef NDEBUG
std::cerr << "Pingback: " << url << std::endl;
#endif
#endif /* PLATFORM_WINDOWS */ #endif /* PLATFORM_WINDOWS */
curl_easy_setopt (c, CURLOPT_URL, url.c_str()); curl_easy_setopt (c, CURLOPT_URL, url.c_str());