diff options
author | Alex Deymo <deymo@google.com> | 2016-01-22 00:03:59 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-01-22 00:03:59 +0000 |
commit | 1ec5e940ed9a07360345b60cbc97ef7a9d2c246d (patch) | |
tree | 03b3f32aead9095c2b8e07997a947c57d72d90b2 | |
parent | c1c5cce8bcd08af219b61b25bd7baaf10c99677f (diff) | |
parent | 2a25190ea741023a3753e7f381a8a2b1465c43c1 (diff) | |
download | platform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.tar.gz platform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.tar.bz2 platform_external_libbrillo-1ec5e940ed9a07360345b60cbc97ef7a9d2c246d.zip |
Add DBusConnection helper class to use instead of DBusDaemon.
am: 2a25190ea7
* commit '2a25190ea741023a3753e7f381a8a2b1465c43c1':
Add DBusConnection helper class to use instead of DBusDaemon.
-rw-r--r-- | Android.mk | 1 | ||||
-rw-r--r-- | brillo/daemons/dbus_daemon.cc | 12 | ||||
-rw-r--r-- | brillo/daemons/dbus_daemon.h | 7 | ||||
-rw-r--r-- | brillo/dbus/dbus_connection.cc | 58 | ||||
-rw-r--r-- | brillo/dbus/dbus_connection.h | 40 | ||||
-rw-r--r-- | libbrillo.gypi | 1 |
6 files changed, 108 insertions, 11 deletions
@@ -53,6 +53,7 @@ libbrillo_dbus_sources := \ brillo/daemons/dbus_daemon.cc \ brillo/dbus/async_event_sequencer.cc \ brillo/dbus/data_serialization.cc \ + brillo/dbus/dbus_connection.cc \ brillo/dbus/dbus_method_invoker.cc \ brillo/dbus/dbus_method_response.cc \ brillo/dbus/dbus_object.cc \ diff --git a/brillo/daemons/dbus_daemon.cc b/brillo/daemons/dbus_daemon.cc index 6e90686..a48b288 100644 --- a/brillo/daemons/dbus_daemon.cc +++ b/brillo/daemons/dbus_daemon.cc @@ -18,21 +18,13 @@ namespace brillo { DBusDaemon::DBusDaemon() { } -DBusDaemon::~DBusDaemon() { - if (bus_) - bus_->ShutdownAndBlock(); -} - int DBusDaemon::OnInit() { int exit_code = Daemon::OnInit(); if (exit_code != EX_OK) return exit_code; - dbus::Bus::Options options; - options.bus_type = dbus::Bus::SYSTEM; - - bus_ = new dbus::Bus(options); - CHECK(bus_->Connect()); + bus_ = dbus_connection_.Connect(); + CHECK(bus_); return exit_code; } diff --git a/brillo/daemons/dbus_daemon.h b/brillo/daemons/dbus_daemon.h index 67124e4..25ce306 100644 --- a/brillo/daemons/dbus_daemon.h +++ b/brillo/daemons/dbus_daemon.h @@ -12,6 +12,7 @@ #include <base/memory/ref_counted.h> #include <brillo/brillo_export.h> #include <brillo/daemons/daemon.h> +#include <brillo/dbus/dbus_connection.h> #include <brillo/dbus/exported_object_manager.h> #include <dbus/bus.h> @@ -27,16 +28,20 @@ class AsyncEventSequencer; class BRILLO_EXPORT DBusDaemon : public Daemon { public: DBusDaemon(); - ~DBusDaemon() override; + ~DBusDaemon() override = default; protected: // Calls the base OnInit() and then instantiates dbus::Bus and establishes // a D-Bus connection. int OnInit() override; + // A reference to the |dbus_connection_| bus object often used by derived + // classes. scoped_refptr<dbus::Bus> bus_; private: + DBusConnection dbus_connection_; + DISALLOW_COPY_AND_ASSIGN(DBusDaemon); }; diff --git a/brillo/dbus/dbus_connection.cc b/brillo/dbus/dbus_connection.cc new file mode 100644 index 0000000..b60cf44 --- /dev/null +++ b/brillo/dbus/dbus_connection.cc @@ -0,0 +1,58 @@ +// Copyright 2016 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <brillo/dbus/dbus_connection.h> + +#include <sysexits.h> + +#include <base/bind.h> +#include <brillo/dbus/async_event_sequencer.h> +#include <brillo/dbus/exported_object_manager.h> + +using brillo::dbus_utils::AsyncEventSequencer; +using brillo::dbus_utils::ExportedObjectManager; + +namespace brillo { + +DBusConnection::DBusConnection() { +} + +DBusConnection::~DBusConnection() { + if (bus_) + bus_->ShutdownAndBlock(); +} + +scoped_refptr<dbus::Bus> DBusConnection::Connect() { + return ConnectWithTimeout(base::TimeDelta()); +} + +scoped_refptr<dbus::Bus> DBusConnection::ConnectWithTimeout( + base::TimeDelta timeout) { + if (bus_) + return bus_; + + base::TimeTicks deadline = base::TimeTicks::Now() + timeout; + + dbus::Bus::Options options; + options.bus_type = dbus::Bus::SYSTEM; + + scoped_refptr<dbus::Bus> bus = new dbus::Bus(options); + + do { + if (bus->Connect()) { + bus_ = bus; + return bus_; + } + LOG(WARNING) << "Failed to get system bus."; + // Wait 1 second to prevent trashing the device while waiting for the + // dbus-daemon to start. + sleep(1); + } while (base::TimeTicks::Now() < deadline); + + LOG(ERROR) << "Failed to get system bus after " << timeout.InSeconds() + << " seconds."; + return nullptr; +} + +} // namespace brillo diff --git a/brillo/dbus/dbus_connection.h b/brillo/dbus/dbus_connection.h new file mode 100644 index 0000000..aecf434 --- /dev/null +++ b/brillo/dbus/dbus_connection.h @@ -0,0 +1,40 @@ +// Copyright 2016 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBBRILLO_BRILLO_DBUS_DBUS_CONNECTION_H_ +#define LIBBRILLO_BRILLO_DBUS_DBUS_CONNECTION_H_ + +#include <base/memory/ref_counted.h> +#include <base/time/time.h> +#include <dbus/bus.h> + +#include <brillo/brillo_export.h> + +namespace brillo { + +// DBusConnection adds D-Bus support to Daemon. +class BRILLO_EXPORT DBusConnection final { + public: + DBusConnection(); + ~DBusConnection(); + + // Instantiates dbus::Bus and establishes a D-Bus connection. Returns a + // reference to the connected bus, or an empty pointer in case of error. + scoped_refptr<dbus::Bus> Connect(); + + // Instantiates dbus::Bus and tries to establish a D-Bus connection for up to + // |timeout|. If the connection can't be established after the timeout, fails + // returning an empty pointer. + scoped_refptr<dbus::Bus> ConnectWithTimeout(base::TimeDelta timeout); + + private: + scoped_refptr<dbus::Bus> bus_; + + private: + DISALLOW_COPY_AND_ASSIGN(DBusConnection); +}; + +} // namespace brillo + +#endif // LIBBRILLO_BRILLO_DAEMONS_DBUS_DAEMON_H_ diff --git a/libbrillo.gypi b/libbrillo.gypi index 6c317d7..f2d7882 100644 --- a/libbrillo.gypi +++ b/libbrillo.gypi @@ -61,6 +61,7 @@ 'brillo/data_encoding.cc', 'brillo/dbus/async_event_sequencer.cc', 'brillo/dbus/data_serialization.cc', + 'brillo/dbus/dbus_connection.cc', 'brillo/dbus/dbus_method_invoker.cc', 'brillo/dbus/dbus_method_response.cc', 'brillo/dbus/dbus_object.cc', |