[maemo-commits] [maemo-commits] r16501 - projects/haf/trunk/apt/methods

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Oct 27 18:27:43 EET 2008
Author: marivoll
Date: 2008-10-27 18:27:42 +0200 (Mon, 27 Oct 2008)
New Revision: 16501

Modified:
   projects/haf/trunk/apt/methods/https.cc
Log:
Add device identification to urls.


Modified: projects/haf/trunk/apt/methods/https.cc
===================================================================
--- projects/haf/trunk/apt/methods/https.cc	2008-10-27 15:45:41 UTC (rev 16500)
+++ projects/haf/trunk/apt/methods/https.cc	2008-10-27 16:27:42 UTC (rev 16501)
@@ -33,6 +33,75 @@
 									/*}}}*/
 using namespace std;
 
+static const char *
+get_osso_product_hardware ()
+{
+  static char *product_hardware = NULL;
+  
+  if (product_hardware)
+    return product_hardware;
+
+  /* XXX - There is a library in maemo somewhere to do this, but it is
+           not included in the maemo SDK, so we have to do it
+           ourselves.  Ridiculous, I know.
+  */
+
+  product_hardware = "";
+  FILE *f = fopen ("/proc/component_version", "r");
+  if (f)
+    {
+      char *line = NULL;
+      size_t len = 0;
+      ssize_t n;
+
+      while ((n = getline (&line, &len, f)) != -1)
+        {
+          if (n > 0 && line[n-1] == '\n')
+            line[n-1] = '\0';
+
+          if (sscanf (line, "product %as", &product_hardware) == 1)
+            break;
+        }
+
+      free (line);
+      fclose (f);
+    }
+
+  return product_hardware;
+}
+
+char*
+maybe_add_device_id (const char *uri)
+{
+  const char *product_hardware = get_osso_product_hardware ();
+  const char *host_part, *host_end, *at_pos;
+  char *result;
+
+  if (product_hardware == NULL || product_hardware[0] == '\0')
+    {
+dont_add_device_id:
+      return strdup (uri);
+    }
+
+  host_part = strstr (uri, "//");
+  if (host_part == NULL)
+    goto dont_add_device_id;
+  host_part += 2;
+  
+  host_end = strchr (host_part, '/');
+  if (host_end == NULL)
+    host_end = host_part + strlen (host_part);
+
+  at_pos = strchr (host_part, '@');
+  if (at_pos && at_pos < host_end)
+    goto dont_add_device_id;
+
+  asprintf (&result, "%.*sNOKIA-OSSO-%s:JOSHUA@%s",
+            host_part - uri, uri, product_hardware, host_part);
+
+  return result;
+}
+
 size_t 
 HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
 {
@@ -118,7 +187,8 @@
    SetupProxy();
 
    // callbacks
-   curl_easy_setopt(curl, CURLOPT_URL, Itm->Uri.c_str());
+   char *url = maybe_add_device_id (Itm->Uri.c_str ());
+   curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, this);
    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_callback);
@@ -261,6 +331,9 @@
    delete File;
    curl_slist_free_all(headers);
 
+   if (url)
+     free (url);
+
    return true;
 };
 


More information about the maemo-commits mailing list