shill: implement manager.RequestScan (for WiFi only)
BUG=chromium-os:19831
TEST=unittests, WiFiManager/000_SSID_Length_Limit
note that 000_SSID_Length_Limit does not pass yet,
because we don't do IP configuration yet. but it
does get scan results.
Change-Id: I8993b3c646eda705271d1f7ad7d7341c692ae06b
Reviewed-on: http://gerrit.chromium.org/gerrit/7407
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/manager.cc b/manager.cc
index 1b8810f..19aadbd 100644
--- a/manager.cc
+++ b/manager.cc
@@ -177,6 +177,13 @@
return;
}
services_.push_back(to_manage);
+
+ vector<string> service_paths;
+ for (it = services_.begin(); it != services_.end(); ++it) {
+ service_paths.push_back((*it)->GetRpcIdentifier());
+ }
+ adaptor_->EmitRpcIdentifierArrayChanged(flimflam::kServicesProperty,
+ service_paths);
}
void Manager::DeregisterService(const ServiceConstRefPtr &to_forget) {
@@ -284,4 +291,24 @@
return ActiveProfile()->GetFriendlyName();
}
+// called via RPC (e.g., from ManagerDBusAdaptor)
+void Manager::RequestScan(const std::string &technology, Error *error) {
+ if (technology == flimflam::kTypeWifi || technology == "") {
+ vector<DeviceRefPtr> wifi_devices;
+ FilterByTechnology(Device::kWifi, &wifi_devices);
+
+ for (vector<DeviceRefPtr>::iterator it = wifi_devices.begin();
+ it != wifi_devices.end();
+ ++it) {
+ (*it)->Scan();
+ }
+ } else {
+ // TODO(quiche): support scanning for other technologies?
+ const string kMessage = "Unrecognized technology " + technology;
+ LOG(ERROR) << kMessage;
+ CHECK(error);
+ error->Populate(Error::kInvalidArguments, kMessage);
+ }
+}
+
} // namespace shill