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 #ifndef CHROMEOS_DBUS_SHILL_MANAGER_CLIENT_H_
      6 #define CHROMEOS_DBUS_SHILL_MANAGER_CLIENT_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "chromeos/chromeos_export.h"
     12 #include "chromeos/dbus/dbus_client.h"
     13 #include "chromeos/dbus/dbus_method_call_status.h"
     14 #include "chromeos/dbus/shill_client_helper.h"
     15 
     16 namespace dbus {
     17 
     18 class ObjectPath;
     19 
     20 }  // namespace dbus
     21 
     22 namespace chromeos {
     23 
     24 class ShillPropertyChangedObserver;
     25 
     26 // ShillManagerClient is used to communicate with the Shill Manager
     27 // service.  All methods should be called from the origin thread which
     28 // initializes the DBusThreadManager instance.
     29 class CHROMEOS_EXPORT ShillManagerClient : public DBusClient {
     30  public:
     31   typedef ShillClientHelper::PropertyChangedHandler PropertyChangedHandler;
     32   typedef ShillClientHelper::DictionaryValueCallback DictionaryValueCallback;
     33   typedef ShillClientHelper::ErrorCallback ErrorCallback;
     34   typedef ShillClientHelper::StringCallback StringCallback;
     35   typedef ShillClientHelper::BooleanCallback BooleanCallback;
     36 
     37   // Interface for setting up devices, services, and technologies for testing.
     38   // Accessed through GetTestInterface(), only implemented in the Stub Impl.
     39   class TestInterface {
     40    public:
     41     virtual void AddDevice(const std::string& device_path) = 0;
     42     virtual void RemoveDevice(const std::string& device_path) = 0;
     43     virtual void ClearDevices() = 0;
     44     virtual void AddTechnology(const std::string& type, bool enabled) = 0;
     45     virtual void RemoveTechnology(const std::string& type) = 0;
     46     virtual void SetTechnologyInitializing(const std::string& type,
     47                                            bool initializing) = 0;
     48     virtual void AddGeoNetwork(const std::string& technology,
     49                                const base::DictionaryValue& network) = 0;
     50 
     51     // Does not create an actual profile in the ProfileClient but update the
     52     // profiles list and sends a notification to observers. This should only be
     53     // called by the ProfileStub. In all other cases, use
     54     // ShillProfileClient::TestInterface::AddProfile.
     55     virtual void AddProfile(const std::string& profile_path) = 0;
     56 
     57     // Used to reset all properties; does not notify observers.
     58     virtual void ClearProperties() = 0;
     59 
     60     // Set manager property.
     61     virtual void SetManagerProperty(const std::string& key,
     62                                     const base::Value& value) = 0;
     63 
     64     // Modify services in the Manager's list.
     65     virtual void AddManagerService(const std::string& service_path,
     66                                    bool notify_observers) = 0;
     67     virtual void RemoveManagerService(const std::string& service_path) = 0;
     68     virtual void ClearManagerServices() = 0;
     69 
     70     // Called by ShillServiceClient when a service's State property changes,
     71     // before notifying observers. Sets the DefaultService property to empty
     72     // if the state changes to a non-connected state.
     73     virtual void ServiceStateChanged(const std::string& service_path,
     74                                      const std::string& state) = 0;
     75 
     76     // Called by ShillServiceClient when a service's State or Visibile
     77     // property changes. If |notify| is true, notifies observers if a list
     78     // changed. Services are sorted first by active, inactive, or disabled
     79     // state, then by type.
     80     virtual void SortManagerServices(bool notify) = 0;
     81 
     82     // Sets up the default fake environment based on default initial states
     83     // or states provided by the command line.
     84     virtual void SetupDefaultEnvironment() = 0;
     85 
     86     // Returns the interactive delay specified on the command line, 0 for none.
     87     virtual int GetInteractiveDelay() const = 0;
     88 
     89     // Sets the 'best' service to connect to on a ConnectToBestServices call.
     90     virtual void SetBestServiceToConnect(const std::string& service_path) = 0;
     91 
     92    protected:
     93     virtual ~TestInterface() {}
     94   };
     95 
     96   // Properties used to verify the origin device.
     97   struct VerificationProperties {
     98     VerificationProperties();
     99     ~VerificationProperties();
    100 
    101     // A string containing a PEM-encoded X.509 certificate for use in verifying
    102     // the signed data.
    103     std::string certificate;
    104 
    105     // A string containing a PEM-encoded RSA public key to be used to compare
    106     // with the one in signedData
    107     std::string public_key;
    108 
    109     // A string containing a base64-encoded random binary data for use in
    110     // verifying the signed data.
    111     std::string nonce;
    112 
    113     // A string containing the identifying data string signed by the device.
    114     std::string signed_data;
    115 
    116     // A string containing the serial number of the device.
    117     std::string device_serial;
    118 
    119     // A string containing the SSID of the device. Only set if the device has
    120     // already been setup once.
    121     std::string device_ssid;
    122 
    123     // A string containing the BSSID of the device. Only set if the device has
    124     // already been setup.
    125     std::string device_bssid;
    126   };
    127 
    128   virtual ~ShillManagerClient();
    129 
    130   // Factory function, creates a new instance which is owned by the caller.
    131   // For normal usage, access the singleton via DBusThreadManager::Get().
    132   static ShillManagerClient* Create();
    133 
    134   // Adds a property changed |observer|.
    135   virtual void AddPropertyChangedObserver(
    136       ShillPropertyChangedObserver* observer) = 0;
    137 
    138   // Removes a property changed |observer|.
    139   virtual void RemovePropertyChangedObserver(
    140       ShillPropertyChangedObserver* observer) = 0;
    141 
    142   // Calls GetProperties method.
    143   // |callback| is called after the method call succeeds.
    144   virtual void GetProperties(const DictionaryValueCallback& callback) = 0;
    145 
    146   // Calls GetNetworksForGeolocation method.
    147   // |callback| is called after the method call succeeds.
    148   virtual void GetNetworksForGeolocation(
    149       const DictionaryValueCallback& callback) = 0;
    150 
    151   // Calls SetProperty method.
    152   // |callback| is called after the method call succeeds.
    153   virtual void SetProperty(const std::string& name,
    154                            const base::Value& value,
    155                            const base::Closure& callback,
    156                            const ErrorCallback& error_callback) = 0;
    157 
    158   // Calls RequestScan method.
    159   // |callback| is called after the method call succeeds.
    160   virtual void RequestScan(const std::string& type,
    161                            const base::Closure& callback,
    162                            const ErrorCallback& error_callback) = 0;
    163 
    164   // Calls EnableTechnology method.
    165   // |callback| is called after the method call succeeds.
    166   virtual void EnableTechnology(const std::string& type,
    167                                 const base::Closure& callback,
    168                                 const ErrorCallback& error_callback) = 0;
    169 
    170   // Calls DisableTechnology method.
    171   // |callback| is called after the method call succeeds.
    172   virtual void DisableTechnology(const std::string& type,
    173                                  const base::Closure& callback,
    174                                  const ErrorCallback& error_callback) = 0;
    175 
    176   // Calls ConfigureService method.
    177   // |callback| is called after the method call succeeds.
    178   virtual void ConfigureService(const base::DictionaryValue& properties,
    179                                 const ObjectPathCallback& callback,
    180                                 const ErrorCallback& error_callback) = 0;
    181 
    182   // Calls ConfigureServiceForProfile method.
    183   // |callback| is called with the created service if the method call succeeds.
    184   virtual void ConfigureServiceForProfile(
    185       const dbus::ObjectPath& profile_path,
    186       const base::DictionaryValue& properties,
    187       const ObjectPathCallback& callback,
    188       const ErrorCallback& error_callback) = 0;
    189 
    190   // Calls GetService method.
    191   // |callback| is called after the method call succeeds.
    192   virtual void GetService(const base::DictionaryValue& properties,
    193                           const ObjectPathCallback& callback,
    194                           const ErrorCallback& error_callback) = 0;
    195 
    196   // Verify that the given data corresponds to a trusted device, and return true
    197   // to the callback if it is.
    198   virtual void VerifyDestination(const VerificationProperties& properties,
    199                                  const BooleanCallback& callback,
    200                                  const ErrorCallback& error_callback) = 0;
    201 
    202   // Verify that the given data corresponds to a trusted device, and if it is,
    203   // return the encrypted credentials for connecting to the network represented
    204   // by the given |service_path|, encrypted using the |public_key| for the
    205   // trusted device. If the device is not trusted, return the empty string.
    206   virtual void VerifyAndEncryptCredentials(
    207       const VerificationProperties& properties,
    208       const std::string& service_path,
    209       const StringCallback& callback,
    210       const ErrorCallback& error_callback) = 0;
    211 
    212   // Verify that the given data corresponds to a trusted device, and return the
    213   // |data| encrypted using the |public_key| for the trusted device. If the
    214   // device is not trusted, return the empty string.
    215   virtual void VerifyAndEncryptData(const VerificationProperties& properties,
    216                                     const std::string& data,
    217                                     const StringCallback& callback,
    218                                     const ErrorCallback& error_callback) = 0;
    219 
    220   // For each technology present, connect to the "best" service available.
    221   // Called once the user is logged in and certificates are loaded.
    222   virtual void ConnectToBestServices(const base::Closure& callback,
    223                                      const ErrorCallback& error_callback) = 0;
    224 
    225   // Returns an interface for testing (stub only), or returns NULL.
    226   virtual TestInterface* GetTestInterface() = 0;
    227 
    228  protected:
    229   friend class ShillManagerClientTest;
    230 
    231   // Create() should be used instead.
    232   ShillManagerClient();
    233 
    234  private:
    235   DISALLOW_COPY_AND_ASSIGN(ShillManagerClient);
    236 };
    237 
    238 }  // namespace chromeos
    239 
    240 #endif  // CHROMEOS_DBUS_SHILL_MANAGER_CLIENT_H_
    241