summaryrefslogtreecommitdiff
path: root/gtk2_ardour/pingback.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-07-12 01:54:44 +0200
committerRobin Gareus <robin@gareus.org>2015-07-12 01:54:44 +0200
commit34315a59ad384e2548c816bad85556994dac61c0 (patch)
treee82b2bbee9af1ef7368232d0e888b85848d779a3 /gtk2_ardour/pingback.cc
parent6315b2ebf583cd0686b0792adfe8e18d72795f35 (diff)
consolidate windows pingback
Diffstat (limited to 'gtk2_ardour/pingback.cc')
-rw-r--r--gtk2_ardour/pingback.cc65
1 files changed, 37 insertions, 28 deletions
diff --git a/gtk2_ardour/pingback.cc b/gtk2_ardour/pingback.cc
index 4076db25d9..df6cfbe360 100644
--- a/gtk2_ardour/pingback.cc
+++ b/gtk2_ardour/pingback.cc
@@ -73,6 +73,34 @@ struct ping_call {
: 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*
_pingback (void *arg)
{
@@ -138,52 +166,33 @@ _pingback (void *arg)
url += s;
free (query);
#else
- // this is hilarious: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724429%28v=vs.85%29.aspx
- HKEY key;
- DWORD size = PATH_MAX;
- char tmp[PATH_MAX+1];
-
- 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;
+ std::string val;
+ if (_query_registry("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", "ProductName", val)) {
+ char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
+ url += "r=";
+ url += query;
url += '&';
free (query);
} else {
url += "r=&";
}
- if ( (ERROR_SUCCESS == RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor\\0", 0, KEY_READ, &key))
- && (ERROR_SUCCESS == RegQueryValueExA (key, "Identifier", 0, NULL, reinterpret_cast<LPBYTE>(tmp), &size))
- // or "ProcessorNameString" instead of "Identifier"
- )
- {
- 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;
+ if (_query_registry("Hardware\\Description\\System\\CentralProcessor\\0", "Identifier", val)) {
+ char* query = curl_easy_escape (c, val.c_str(), strlen (val.c_str()));
+ url += "m=";
+ url += query;
url += '&';
free (query);
} else {
url += "m=&";
}
- url += "r=&";
# if ( defined(__x86_64__) || defined(_M_X64) )
url += "s=Windows64";
# else
url += "s=Windows32";
# endif
-#ifndef NDEBUG
- std::cerr << "Pingback: " << url << std::endl;
-#endif
-
#endif /* PLATFORM_WINDOWS */
curl_easy_setopt (c, CURLOPT_URL, url.c_str());