shill: implement Manager.GetService (error-case only)
BUG=chromium-os:20254
TEST=unittests, WiFiManager/000_SSID_Length_Limit
this gives us enough to pass the autotest for
network_WiFiManager/000_SSID_Length_Limit.
Change-Id: Ib0305e707d2203327d846be3e0b206033d6a884a
Reviewed-on: http://gerrit.chromium.org/gerrit/7567
Commit-Ready: mukesh agrawal <quiche@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Tested-by: mukesh agrawal <quiche@chromium.org>
diff --git a/manager.cc b/manager.cc
index 996c291..3b109e2 100644
--- a/manager.cc
+++ b/manager.cc
@@ -7,6 +7,7 @@
#include <time.h>
#include <stdio.h>
+#include <map>
#include <string>
#include <vector>
@@ -29,12 +30,17 @@
#include "shill/resolver.h"
#include "shill/shill_event.h"
#include "shill/service.h"
+#include "shill/wifi.h"
+#include "shill/wifi_service.h"
using std::string;
using std::vector;
namespace shill {
+// static
+const char Manager::kManagerErrorNoDevice[] = "no wifi devices available";
+
Manager::Manager(ControlInterface *control_interface,
EventDispatcher *dispatcher,
GLib *glib,
@@ -304,6 +310,21 @@
}
// called via RPC (e.g., from ManagerDBusAdaptor)
+WiFiServiceRefPtr Manager::GetWifiService(const KeyValueStore &args,
+ Error *error) {
+ std::vector<DeviceRefPtr> wifi_devices;
+ FilterByTechnology(Device::kWifi, &wifi_devices);
+ if (wifi_devices.empty()) {
+ error->Populate(Error::kInvalidArguments, kManagerErrorNoDevice);
+ return NULL;
+ } else {
+ WiFi *wifi = dynamic_cast<WiFi *>(wifi_devices.front().get());
+ CHECK(wifi);
+ return wifi->GetService(args, error);
+ }
+}
+
+// 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;