[shill] Use flimflam-esque storage ids

Devices:
  device_<MAC>

IPConfig:
  ipconfig_<MAC of associated device>_0

Services:
  ethernet_<MAC of associated device>
  wifi_<MAC of associated device>_<SSID>_<mode>_<security>
  cellular_<MAC of associated device>_<Network_name>

BUG=chromium-os:17744
TEST=unit

Change-Id: Ibf061f9c184e7c86f5afcf97d48e321fc74bde1c
Reviewed-on: http://gerrit.chromium.org/gerrit/6412
Reviewed-by: Chris Masone <cmasone@chromium.org>
Tested-by: Chris Masone <cmasone@chromium.org>
diff --git a/wifi_service.cc b/wifi_service.cc
index 4bded51..6a2bdee 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -7,6 +7,9 @@
 #include <string>
 
 #include <base/logging.h>
+#include <base/stringprintf.h>
+#include <base/string_number_conversions.h>
+#include <base/string_util.h>
 #include <chromeos/dbus/service_constants.h>
 
 #include "shill/control_interface.h"
@@ -18,6 +21,9 @@
 
 namespace shill {
 
+// static
+const char WiFiService::kServiceType[] = "wifi";
+
 WiFiService::WiFiService(ControlInterface *control_interface,
                          EventDispatcher *dispatcher,
                          Manager *manager,
@@ -26,6 +32,7 @@
                          const std::string &mode,
                          const std::string &key_management)
     : Service(control_interface, dispatcher, manager),
+      security_(flimflam::kSecurityNone),
       mode_(mode),
       task_factory_(this),
       wifi_(device),
@@ -64,6 +71,16 @@
   // XXX remove from favorite networks list?
 }
 
+string WiFiService::GetStorageIdentifier(const std::string &mac) {
+  string ssid_hex = base::HexEncode(&(*ssid_.begin()), ssid_.size());
+  return StringToLowerASCII(base::StringPrintf("%s_%s_%s_%s_%s",
+                                               kServiceType,
+                                               mac.c_str(),
+                                               ssid_hex.c_str(),
+                                               mode_.c_str(),
+                                               security_.c_str()));
+}
+
 const string &WiFiService::mode() const {
   return mode_;
 }