Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(703)

Unified Diff: src/platform/update_engine/update_engine_client.cc

Issue 2037002: AU: DBus support. (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: fixes for review Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/platform/update_engine/update_engine_client.cc
diff --git a/src/platform/update_engine/update_engine_client.cc b/src/platform/update_engine/update_engine_client.cc
index bed72056f073283c57caea08210f6cc7e5a75b2a..cfdbc8ab87df72dc6dbbfd073033f6378e8548e1 100644
--- a/src/platform/update_engine/update_engine_client.cc
+++ b/src/platform/update_engine/update_engine_client.cc
@@ -5,6 +5,7 @@
#include <gflags/gflags.h>
#include <glib.h>
+#include "update_engine/marshal.glibmarshal.h"
#include "update_engine/dbus_constants.h"
#include "update_engine/subprocess.h"
#include "update_engine/utils.h"
@@ -23,13 +24,15 @@ DEFINE_bool(force_update, false,
"Force an update, even over an expensive network.");
DEFINE_bool(check_for_update, false,
"Initiate check for updates.");
+DEFINE_bool(watch_for_updates, false,
+ "Listen for status updates and print them to the screen.");
namespace {
-bool GetStatus() {
- DBusGConnection *bus;
- DBusGProxy *proxy;
- GError *error = NULL;
+bool GetProxy(DBusGProxy** out_proxy) {
+ DBusGConnection* bus;
+ DBusGProxy* proxy;
+ GError* error = NULL;
bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
if (!bus) {
@@ -43,6 +46,30 @@ bool GetStatus() {
if (!proxy) {
LOG(FATAL) << "Error getting proxy: " << GetGErrorMessage(error);
}
+ *out_proxy = proxy;
+ return true;
+}
+
+static void StatusUpdateSignalHandler(DBusGProxy* proxy,
+ int64_t last_checked_time,
+ double progress,
+ gchar* current_operation,
+ gchar* new_version,
+ int64_t new_size,
+ void* user_data) {
+ LOG(INFO) << "Got status update:";
+ LOG(INFO) << " last_checked_time: " << last_checked_time;
+ LOG(INFO) << " progress: " << progress;
+ LOG(INFO) << " current_operation: " << current_operation;
+ LOG(INFO) << " new_version: " << new_version;
+ LOG(INFO) << " new_size: " << new_size;
+}
+
+bool GetStatus() {
+ DBusGProxy* proxy;
+ GError* error = NULL;
+
+ CHECK(GetProxy(&proxy));
gint64 last_checked_time = 0;
gdouble progress = 0.0;
@@ -71,7 +98,52 @@ bool GetStatus() {
return true;
}
+// Should never return.
+void WatchForUpdates() {
+ DBusGProxy* proxy;
+
+ CHECK(GetProxy(&proxy));
+
+ // Register marshaller
+ dbus_g_object_register_marshaller(
+ update_engine_VOID__INT64_DOUBLE_STRING_STRING_INT64,
+ G_TYPE_NONE,
+ G_TYPE_INT64,
+ G_TYPE_DOUBLE,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INT64,
+ G_TYPE_INVALID);
+
+ // TODO(adlr): make StatusUpdate a const string
+ dbus_g_proxy_add_signal(proxy,
+ "StatusUpdate",
+ G_TYPE_INT64,
+ G_TYPE_DOUBLE,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_INT64,
+ G_TYPE_INVALID);
+ GMainLoop* loop = g_main_loop_new (NULL, TRUE);
+ dbus_g_proxy_connect_signal(proxy,
+ "StatusUpdate",
+ G_CALLBACK(StatusUpdateSignalHandler),
+ NULL,
+ NULL);
+ g_main_loop_run(loop);
+ g_main_loop_unref(loop);
+}
+
bool CheckForUpdates(bool force) {
+ DBusGProxy* proxy;
+ GError* error = NULL;
+
+ CHECK(GetProxy(&proxy));
+
+ gboolean rc =
+ org_chromium_UpdateEngineInterface_check_for_update(proxy, &error);
+ CHECK_EQ(rc, TRUE) << "Error checking for update: "
+ << GetGErrorMessage(error);
return true;
}
@@ -101,6 +173,11 @@ int main(int argc, char** argv) {
<< "Update check/initiate update failed.";
return 0;
}
+ if (FLAGS_watch_for_updates) {
+ LOG(INFO) << "Watching for status updates.";
+ WatchForUpdates(); // Should never return.
+ return 1;
+ }
LOG(INFO) << "No flags specified. Exiting.";
return 0;

Powered by Google App Engine
This is Rietveld 408576698