shill_ipconfig_client.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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_IPCONFIG_CLIENT_H_
6#define CHROMEOS_DBUS_SHILL_IPCONFIG_CLIENT_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/callback.h"
12#include "chromeos/chromeos_export.h"
13#include "chromeos/dbus/dbus_client_implementation_type.h"
14#include "chromeos/dbus/shill_client_helper.h"
15
16namespace base {
17
18class Value;
19class DictionaryValue;
20
21}  // namespace base
22
23namespace dbus {
24
25class Bus;
26class ObjectPath;
27
28}  // namespace dbus
29
30namespace chromeos {
31
32class ShillPropertyChangedObserver;
33
34// ShillIPConfigClient is used to communicate with the Shill IPConfig
35// service.  All methods should be called from the origin thread which
36// initializes the DBusThreadManager instance.
37class CHROMEOS_EXPORT ShillIPConfigClient {
38 public:
39  typedef ShillClientHelper::PropertyChangedHandler PropertyChangedHandler;
40  typedef ShillClientHelper::DictionaryValueCallback DictionaryValueCallback;
41  virtual ~ShillIPConfigClient();
42
43  // Factory function, creates a new instance which is owned by the caller.
44  // For normal usage, access the singleton via DBusThreadManager::Get().
45  static ShillIPConfigClient* Create(DBusClientImplementationType type,
46                                        dbus::Bus* bus);
47
48  // Adds a property changed |observer| for the ipconfig at |ipconfig_path|.
49  virtual void AddPropertyChangedObserver(
50      const dbus::ObjectPath& ipconfig_path,
51      ShillPropertyChangedObserver* observer) = 0;
52
53  // Removes a property changed |observer| for the ipconfig at |ipconfig_path|.
54  virtual void RemovePropertyChangedObserver(
55      const dbus::ObjectPath& ipconfig_path,
56      ShillPropertyChangedObserver* observer) = 0;
57
58  // Refreshes the active IP configuration after service property changes and
59  // renews the DHCP lease, if any.
60  virtual void Refresh(const dbus::ObjectPath& ipconfig_path,
61                       const VoidDBusMethodCallback& callback) = 0;
62
63  // Calls GetProperties method.
64  // |callback| is called after the method call succeeds.
65  virtual void GetProperties(const dbus::ObjectPath& ipconfig_path,
66                             const DictionaryValueCallback& callback) = 0;
67
68  // DEPRECATED DO NOT USE: Calls GetProperties method and blocks until the
69  // method call finishes.  The caller is responsible to delete the result.
70  // Thie method returns NULL when method call fails.
71  //
72  // TODO(hashimoto): Refactor CrosListIPConfigs to remove this method.
73  // crosbug.com/29902
74  virtual base::DictionaryValue* CallGetPropertiesAndBlock(
75      const dbus::ObjectPath& ipconfig_path) = 0;
76
77  // Calls SetProperty method.
78  // |callback| is called after the method call succeeds.
79  virtual void SetProperty(const dbus::ObjectPath& ipconfig_path,
80                           const std::string& name,
81                           const base::Value& value,
82                           const VoidDBusMethodCallback& callback) = 0;
83
84  // Calls ClearProperty method.
85  // |callback| is called after the method call succeeds.
86  virtual void ClearProperty(const dbus::ObjectPath& ipconfig_path,
87                             const std::string& name,
88                             const VoidDBusMethodCallback& callback) = 0;
89
90  // Calls Remove method.
91  // |callback| is called after the method call succeeds.
92  virtual void Remove(const dbus::ObjectPath& ipconfig_path,
93                      const VoidDBusMethodCallback& callback) = 0;
94
95 protected:
96  // Create() should be used instead.
97  ShillIPConfigClient();
98
99 private:
100  DISALLOW_COPY_AND_ASSIGN(ShillIPConfigClient);
101};
102
103}  // namespace chromeos
104
105#endif  // CHROMEOS_DBUS_SHILL_IPCONFIG_CLIENT_H_
106