[shill] Make wifi classes store mode as a string
Also, use flimflam nomenclature (managed,adhoc).
BUG=chromium-os:17744
TEST=unit
Change-Id: If4722525065f58a82b65bdd6adab34d97408bd67
Reviewed-on: http://gerrit.chromium.org/gerrit/6399
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: Chris Masone <cmasone@chromium.org>
diff --git a/wifi.cc b/wifi.cc
index ca88281..8b444bb 100644
--- a/wifi.cc
+++ b/wifi.cc
@@ -170,7 +170,7 @@
DBus::Path network_path;
add_network_args[kSupplicantPropertyNetworkMode].writer().
- append_uint32(service.mode());
+ append_uint32(WiFiEndpoint::ModeStringToUint(service.mode()));
add_network_args[kSupplicantPropertyKeyMode].writer().
append_string(service.key_management().c_str());
// TODO(quiche): figure out why we can't use operator<< without the
diff --git a/wifi_endpoint.cc b/wifi_endpoint.cc
index 2fd2999..300c258 100644
--- a/wifi_endpoint.cc
+++ b/wifi_endpoint.cc
@@ -2,10 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "shill/wifi_endpoint.h"
+
+#include <base/logging.h>
#include <base/stringprintf.h>
#include <base/string_number_conversions.h>
-
-#include "shill/wifi_endpoint.h"
+#include <chromeos/dbus/service_constants.h>
using std::string;
@@ -36,10 +38,10 @@
operator std::vector<uint8_t>();
signal_strength_ =
properties.find(kSupplicantPropertySignal)->second;
- network_mode_ = parse_mode(
+ network_mode_ = ParseMode(
properties.find(kSupplicantPropertyMode)->second);
- if (network_mode_ < 0) {
+ if (network_mode_.empty()) {
// XXX log error?
}
@@ -53,6 +55,18 @@
WiFiEndpoint::~WiFiEndpoint() {}
+// static
+uint32_t WiFiEndpoint::ModeStringToUint(const std::string &mode_string) {
+ if (mode_string == flimflam::kModeManaged)
+ return kSupplicantNetworkModeInfrastructureInt;
+ else if (mode_string == flimflam::kModeAdhoc)
+ return kSupplicantNetworkModeAdHocInt;
+ else
+ NOTIMPLEMENTED() << "Shill dos not support " << mode_string
+ << " mode at this time.";
+ return 0;
+}
+
const std::vector<uint8_t> &WiFiEndpoint::ssid() const {
return ssid_;
}
@@ -77,22 +91,22 @@
return signal_strength_;
}
-uint32_t WiFiEndpoint::network_mode() const {
- if (network_mode_ < 0)
- return 0;
- else
+const string &WiFiEndpoint::network_mode() const {
return network_mode_;
}
-int32_t WiFiEndpoint::parse_mode(const std::string &mode_string) {
+// static
+const char *WiFiEndpoint::ParseMode(const std::string &mode_string) {
if (mode_string == kSupplicantNetworkModeInfrastructure) {
- return kSupplicantNetworkModeInfrastructureInt;
+ return flimflam::kModeManaged;
} else if (mode_string == kSupplicantNetworkModeAdHoc) {
- return kSupplicantNetworkModeAdHocInt;
+ return flimflam::kModeAdhoc;
} else if (mode_string == kSupplicantNetworkModeAccessPoint) {
- return kSupplicantNetworkModeAccessPointInt;
+ NOTREACHED() << "Shill does not support AP mode at this time.";
+ return NULL;
} else {
- return -1;
+ NOTREACHED() << "Unknown WiFi endpoint mode!";
+ return NULL;
}
}
diff --git a/wifi_endpoint.h b/wifi_endpoint.h
index 0bc86b5..17bf60b 100644
--- a/wifi_endpoint.h
+++ b/wifi_endpoint.h
@@ -21,13 +21,18 @@
public:
WiFiEndpoint(const std::map<std::string, ::DBus::Variant> &properties);
virtual ~WiFiEndpoint();
+
+ // Maps mode strings from flimflam's nomenclature, as defined
+ // in chromeos/dbus/service_constants.h, to uints used by supplicant
+ static uint32_t ModeStringToUint(const std::string &mode_string);
+
const std::vector<uint8_t> &ssid() const;
const std::string &ssid_string() const;
const std::string &ssid_hex() const;
const std::string &bssid_string() const;
const std::string &bssid_hex() const;
int16_t signal_strength() const;
- uint32_t network_mode() const;
+ const std::string &network_mode() const;
private:
static const uint32_t kSupplicantNetworkModeInfrastructureInt;
@@ -42,7 +47,9 @@
static const char kSupplicantNetworkModeAdHoc[];
static const char kSupplicantNetworkModeAccessPoint[];
- static int32_t parse_mode(const std::string &mode_string);
+ // Maps mode strings from supplicant into flimflam's nomenclature, as defined
+ // in chromeos/dbus/service_constants.h
+ static const char *ParseMode(const std::string &mode_string);
std::vector<uint8_t> ssid_;
std::vector<uint8_t> bssid_;
@@ -51,7 +58,7 @@
std::string bssid_string_;
std::string bssid_hex_;
int16_t signal_strength_;
- int32_t network_mode_;
+ std::string network_mode_;
DISALLOW_COPY_AND_ASSIGN(WiFiEndpoint);
};
diff --git a/wifi_service.cc b/wifi_service.cc
index 64747cc..4bded51 100644
--- a/wifi_service.cc
+++ b/wifi_service.cc
@@ -23,17 +23,16 @@
Manager *manager,
const WiFiRefPtr &device,
const std::vector<uint8_t> ssid,
- uint32_t mode,
+ const std::string &mode,
const std::string &key_management)
: Service(control_interface, dispatcher, manager),
+ mode_(mode),
task_factory_(this),
wifi_(device),
- ssid_(ssid),
- mode_(mode) {
+ ssid_(ssid) {
eap_.key_management = key_management;
- // TODO(cmasone): Figure out if mode_ should be a string or what
- // store_.RegisterString(flimflam::kModeProperty, &mode_);
+ store_.RegisterConstString(flimflam::kModeProperty, &mode_);
store_.RegisterString(flimflam::kPassphraseProperty, &passphrase_);
store_.RegisterBool(flimflam::kPassphraseRequiredProperty, &need_passphrase_);
store_.RegisterConstString(flimflam::kSecurityProperty, &security_);
@@ -65,11 +64,11 @@
// XXX remove from favorite networks list?
}
-uint32_t WiFiService::mode() const {
+const string &WiFiService::mode() const {
return mode_;
}
-const std::string &WiFiService::key_management() const {
+const string &WiFiService::key_management() const {
return eap_.key_management;
}
diff --git a/wifi_service.h b/wifi_service.h
index e785a3f..bb89453 100644
--- a/wifi_service.h
+++ b/wifi_service.h
@@ -26,12 +26,12 @@
Manager *manager,
const WiFiRefPtr &device,
const std::vector<uint8_t> ssid,
- uint32_t mode,
+ const std::string &mode,
const std::string &key_management);
~WiFiService();
void Connect();
void Disconnect();
- uint32_t mode() const;
+ const std::string &mode() const;
const std::string &key_management() const;
const std::vector<uint8_t> &ssid() const;
@@ -51,6 +51,7 @@
const std::string type_;
// TODO(cmasone): see if the below can be pulled from the endpoint associated
// with this service instead.
+ const std::string mode_;
std::string auth_mode_;
bool hidden_ssid_;
uint16 frequency_;
@@ -60,7 +61,6 @@
ScopedRunnableMethodFactory<WiFiService> task_factory_;
WiFiRefPtr wifi_;
const std::vector<uint8_t> ssid_;
- const uint32_t mode_;
DISALLOW_COPY_AND_ASSIGN(WiFiService);
};