blob: eab79e562e62fc631519f03384ae80f8d60fc633 [file] [log] [blame]
David Rochbergb8b89b12012-02-28 16:11:33 -05001// Copyright (c) 2012 The Chromium OS 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#include "shill/dbus_objectmanager_proxy.h"
5
6#include <base/logging.h>
7
8#include "cellular_error.h"
Ben Chanfad4a0b2012-04-18 15:49:59 -07009#include "scope_logger.h"
David Rochbergb8b89b12012-02-28 16:11:33 -050010
11using std::string;
12
13namespace shill {
14
15DBusObjectManagerProxy::DBusObjectManagerProxy(
David Rochbergb8b89b12012-02-28 16:11:33 -050016 DBus::Connection *connection,
17 const string &path,
18 const string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050019 : proxy_(connection, path, service) {}
David Rochbergb8b89b12012-02-28 16:11:33 -050020DBusObjectManagerProxy::~DBusObjectManagerProxy() {}
21
Eric Shienbrood9a245532012-03-07 14:20:39 -050022void DBusObjectManagerProxy::GetManagedObjects(
23 Error *error,
24 const ManagedObjectsCallback &callback,
25 int timeout) {
26 scoped_ptr<ManagedObjectsCallback> cb(new ManagedObjectsCallback(callback));
27 try {
28 proxy_.GetManagedObjects(cb.get(), timeout);
David Rochbergfa1d31d2012-03-20 10:38:07 -040029 cb.release();
Eric Shienbrood9a245532012-03-07 14:20:39 -050030 } catch (DBus::Error e) {
31 if (error)
32 CellularError::FromDBusError(e, error);
33 }
34}
35
36void DBusObjectManagerProxy::set_interfaces_added_callback(
37 const InterfacesAddedSignalCallback &callback) {
38 proxy_.set_interfaces_added_callback(callback);
39}
40
41void DBusObjectManagerProxy::set_interfaces_removed_callback(
42 const InterfacesRemovedSignalCallback &callback) {
43 proxy_.set_interfaces_removed_callback(callback);
David Rochbergb8b89b12012-02-28 16:11:33 -050044}
45
46// Inherited from DBusObjectManagerProxyInterface.
Eric Shienbrood9a245532012-03-07 14:20:39 -050047DBusObjectManagerProxy::Proxy::Proxy(DBus::Connection *connection,
David Rochbergb8b89b12012-02-28 16:11:33 -050048 const std::string &path,
49 const std::string &service)
Eric Shienbrood9a245532012-03-07 14:20:39 -050050 : DBus::ObjectProxy(*connection, path, service.c_str()) {}
David Rochbergb8b89b12012-02-28 16:11:33 -050051
52DBusObjectManagerProxy::Proxy::~Proxy() {}
53
Eric Shienbrood9a245532012-03-07 14:20:39 -050054void DBusObjectManagerProxy::Proxy::set_interfaces_added_callback(
55 const InterfacesAddedSignalCallback &callback) {
56 interfaces_added_callback_ = callback;
57}
58
59void DBusObjectManagerProxy::Proxy::set_interfaces_removed_callback(
60 const InterfacesRemovedSignalCallback &callback) {
61 interfaces_removed_callback_ = callback;
62}
63
David Rochbergb8b89b12012-02-28 16:11:33 -050064// Signal callback
65void DBusObjectManagerProxy::Proxy::InterfacesAdded(
66 const ::DBus::Path &object_path,
67 const DBusInterfaceToProperties &interface_to_properties) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070068 SLOG(DBus, 2) << __func__ << "(" << object_path << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050069 interfaces_added_callback_.Run(object_path, interface_to_properties);
David Rochbergb8b89b12012-02-28 16:11:33 -050070}
71
72// Signal callback
73void DBusObjectManagerProxy::Proxy::InterfacesRemoved(
74 const ::DBus::Path &object_path,
75 const std::vector< std::string > &interfaces) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070076 SLOG(DBus, 2) << __func__ << "(" << object_path << ")";
Eric Shienbrood9a245532012-03-07 14:20:39 -050077 interfaces_removed_callback_.Run(object_path, interfaces);
David Rochbergb8b89b12012-02-28 16:11:33 -050078}
79
80// Method callback
81void DBusObjectManagerProxy::Proxy::GetManagedObjectsCallback(
82 const DBusObjectsWithProperties &objects_with_properties,
83 const DBus::Error &dberror,
84 void *data) {
Ben Chanfad4a0b2012-04-18 15:49:59 -070085 SLOG(DBus, 2) << __func__;
David Rochbergb8b89b12012-02-28 16:11:33 -050086 shill::Error error;
87 CellularError::FromDBusError(dberror, &error);
Eric Shienbrood9a245532012-03-07 14:20:39 -050088 scoped_ptr<ManagedObjectsCallback> callback(
89 reinterpret_cast<ManagedObjectsCallback *>(data));
David Rochbergb8b89b12012-02-28 16:11:33 -050090
Eric Shienbrood9a245532012-03-07 14:20:39 -050091 callback->Run(objects_with_properties, error);
David Rochbergb8b89b12012-02-28 16:11:33 -050092}
93
94} // namespace shill