Home | History | Annotate | Download | only in dbus
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chromeos/dbus/shill_manager_client.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/logging.h"
      9 #include "base/message_loop/message_loop.h"
     10 #include "base/values.h"
     11 #include "chromeos/dbus/shill_property_changed_observer.h"
     12 #include "dbus/bus.h"
     13 #include "dbus/message.h"
     14 #include "dbus/object_path.h"
     15 #include "dbus/object_proxy.h"
     16 #include "dbus/values_util.h"
     17 #include "third_party/cros_system_api/dbus/service_constants.h"
     18 
     19 namespace chromeos {
     20 
     21 namespace {
     22 
     23 // The ShillManagerClient implementation.
     24 class ShillManagerClientImpl : public ShillManagerClient {
     25  public:
     26   ShillManagerClientImpl() : proxy_(NULL) {}
     27 
     28   ////////////////////////////////////
     29   // ShillManagerClient overrides.
     30   virtual void AddPropertyChangedObserver(
     31       ShillPropertyChangedObserver* observer) OVERRIDE {
     32     helper_->AddPropertyChangedObserver(observer);
     33   }
     34 
     35   virtual void RemovePropertyChangedObserver(
     36       ShillPropertyChangedObserver* observer) OVERRIDE {
     37     helper_->RemovePropertyChangedObserver(observer);
     38   }
     39 
     40   virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE {
     41     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     42                                  shill::kGetPropertiesFunction);
     43     helper_->CallDictionaryValueMethod(&method_call, callback);
     44   }
     45 
     46   virtual void GetNetworksForGeolocation(
     47       const DictionaryValueCallback& callback) OVERRIDE {
     48     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     49                                  shill::kGetNetworksForGeolocation);
     50     helper_->CallDictionaryValueMethod(&method_call, callback);
     51   }
     52 
     53   virtual void SetProperty(const std::string& name,
     54                            const base::Value& value,
     55                            const base::Closure& callback,
     56                            const ErrorCallback& error_callback) OVERRIDE {
     57     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     58                                  shill::kSetPropertyFunction);
     59     dbus::MessageWriter writer(&method_call);
     60     writer.AppendString(name);
     61     ShillClientHelper::AppendValueDataAsVariant(&writer, value);
     62     helper_->CallVoidMethodWithErrorCallback(&method_call,
     63                                             callback,
     64                                             error_callback);
     65   }
     66 
     67   virtual void RequestScan(const std::string& type,
     68                            const base::Closure& callback,
     69                            const ErrorCallback& error_callback) OVERRIDE {
     70     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     71                                  shill::kRequestScanFunction);
     72     dbus::MessageWriter writer(&method_call);
     73     writer.AppendString(type);
     74     helper_->CallVoidMethodWithErrorCallback(&method_call,
     75                                             callback,
     76                                             error_callback);
     77   }
     78 
     79   virtual void EnableTechnology(
     80       const std::string& type,
     81       const base::Closure& callback,
     82       const ErrorCallback& error_callback) OVERRIDE {
     83     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     84                                  shill::kEnableTechnologyFunction);
     85     dbus::MessageWriter writer(&method_call);
     86     writer.AppendString(type);
     87     helper_->CallVoidMethodWithErrorCallback(&method_call,
     88                                             callback,
     89                                             error_callback);
     90   }
     91 
     92   virtual void DisableTechnology(
     93       const std::string& type,
     94       const base::Closure& callback,
     95       const ErrorCallback& error_callback) OVERRIDE {
     96     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
     97                                  shill::kDisableTechnologyFunction);
     98     dbus::MessageWriter writer(&method_call);
     99     writer.AppendString(type);
    100     helper_->CallVoidMethodWithErrorCallback(&method_call,
    101                                             callback,
    102                                             error_callback);
    103   }
    104 
    105   virtual void ConfigureService(
    106       const base::DictionaryValue& properties,
    107       const ObjectPathCallback& callback,
    108       const ErrorCallback& error_callback) OVERRIDE {
    109     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    110                                  shill::kConfigureServiceFunction);
    111     dbus::MessageWriter writer(&method_call);
    112     ShillClientHelper::AppendServicePropertiesDictionary(&writer, properties);
    113     helper_->CallObjectPathMethodWithErrorCallback(&method_call,
    114                                                   callback,
    115                                                   error_callback);
    116   }
    117 
    118   virtual void ConfigureServiceForProfile(
    119       const dbus::ObjectPath& profile_path,
    120       const base::DictionaryValue& properties,
    121       const ObjectPathCallback& callback,
    122       const ErrorCallback& error_callback) OVERRIDE {
    123     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    124                                  shill::kConfigureServiceForProfileFunction);
    125     dbus::MessageWriter writer(&method_call);
    126     writer.AppendObjectPath(dbus::ObjectPath(profile_path));
    127     ShillClientHelper::AppendServicePropertiesDictionary(&writer, properties);
    128     helper_->CallObjectPathMethodWithErrorCallback(&method_call,
    129                                                   callback,
    130                                                   error_callback);
    131   }
    132 
    133   virtual void GetService(
    134       const base::DictionaryValue& properties,
    135       const ObjectPathCallback& callback,
    136       const ErrorCallback& error_callback) OVERRIDE {
    137     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    138                                  shill::kGetServiceFunction);
    139     dbus::MessageWriter writer(&method_call);
    140     ShillClientHelper::AppendServicePropertiesDictionary(&writer, properties);
    141     helper_->CallObjectPathMethodWithErrorCallback(&method_call,
    142                                                   callback,
    143                                                   error_callback);
    144   }
    145 
    146   virtual void VerifyDestination(const VerificationProperties& properties,
    147                                  const BooleanCallback& callback,
    148                                  const ErrorCallback& error_callback) OVERRIDE {
    149     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    150                                  shill::kVerifyDestinationFunction);
    151     dbus::MessageWriter writer(&method_call);
    152     writer.AppendString(properties.certificate);
    153     writer.AppendString(properties.public_key);
    154     writer.AppendString(properties.nonce);
    155     writer.AppendString(properties.signed_data);
    156     writer.AppendString(properties.device_serial);
    157     writer.AppendString(properties.device_ssid);
    158     writer.AppendString(properties.device_bssid);
    159     helper_->CallBooleanMethodWithErrorCallback(
    160         &method_call, callback, error_callback);
    161   }
    162 
    163   virtual void VerifyAndEncryptCredentials(
    164       const VerificationProperties& properties,
    165       const std::string& service_path,
    166       const StringCallback& callback,
    167       const ErrorCallback& error_callback) OVERRIDE {
    168     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    169                                  shill::kVerifyAndEncryptCredentialsFunction);
    170     dbus::MessageWriter writer(&method_call);
    171     writer.AppendString(properties.certificate);
    172     writer.AppendString(properties.public_key);
    173     writer.AppendString(properties.nonce);
    174     writer.AppendString(properties.signed_data);
    175     writer.AppendString(properties.device_serial);
    176     writer.AppendString(properties.device_ssid);
    177     writer.AppendString(properties.device_bssid);
    178     writer.AppendObjectPath(dbus::ObjectPath(service_path));
    179     helper_->CallStringMethodWithErrorCallback(
    180         &method_call, callback, error_callback);
    181   }
    182 
    183   virtual void VerifyAndEncryptData(
    184       const VerificationProperties& properties,
    185       const std::string& data,
    186       const StringCallback& callback,
    187       const ErrorCallback& error_callback) OVERRIDE {
    188     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    189                                  shill::kVerifyAndEncryptDataFunction);
    190     dbus::MessageWriter writer(&method_call);
    191     writer.AppendString(properties.certificate);
    192     writer.AppendString(properties.public_key);
    193     writer.AppendString(properties.nonce);
    194     writer.AppendString(properties.signed_data);
    195     writer.AppendString(properties.device_serial);
    196     writer.AppendString(properties.device_ssid);
    197     writer.AppendString(properties.device_bssid);
    198     writer.AppendString(data);
    199     helper_->CallStringMethodWithErrorCallback(
    200         &method_call, callback, error_callback);
    201   }
    202 
    203   virtual void ConnectToBestServices(
    204       const base::Closure& callback,
    205       const ErrorCallback& error_callback) OVERRIDE {
    206     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
    207                                  shill::kConnectToBestServicesFunction);
    208     helper_->CallVoidMethodWithErrorCallback(&method_call,
    209                                             callback,
    210                                             error_callback);
    211   }
    212 
    213   virtual TestInterface* GetTestInterface() OVERRIDE {
    214     return NULL;
    215   }
    216 
    217  protected:
    218   virtual void Init(dbus::Bus* bus) OVERRIDE {
    219     proxy_ = bus->GetObjectProxy(shill::kFlimflamServiceName,
    220                                  dbus::ObjectPath(shill::kFlimflamServicePath));
    221     helper_.reset(new ShillClientHelper(proxy_));
    222     helper_->MonitorPropertyChanged(shill::kFlimflamManagerInterface);
    223   }
    224 
    225  private:
    226   dbus::ObjectProxy* proxy_;
    227   scoped_ptr<ShillClientHelper> helper_;
    228 
    229   DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl);
    230 };
    231 
    232 }  // namespace
    233 
    234 ShillManagerClient::ShillManagerClient() {}
    235 
    236 ShillManagerClient::~ShillManagerClient() {}
    237 
    238 // static
    239 ShillManagerClient* ShillManagerClient::Create() {
    240   return new ShillManagerClientImpl();
    241 }
    242 
    243 // ShillManagerClient::VerificationProperties implementation.
    244 ShillManagerClient::VerificationProperties::VerificationProperties() {
    245 }
    246 
    247 ShillManagerClient::VerificationProperties::~VerificationProperties() {
    248 }
    249 
    250 }  // namespace chromeos
    251