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

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

Issue 1733013: AU: Beginnings of dbus support. (Closed)
Patch Set: fixes for wad's review Created 10 years, 8 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/main.cc
diff --git a/src/platform/update_engine/main.cc b/src/platform/update_engine/main.cc
index cbd6e4489ffc0d58bc7e06f523a294de39d06d93..a796a983a01fd9e0b535e9cedc896503b205d2fe 100644
--- a/src/platform/update_engine/main.cc
+++ b/src/platform/update_engine/main.cc
@@ -1,26 +1,24 @@
-// Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
+// Copyright (c) 2010 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.
-// TODO(adlr): get rid of commented out lines or comment them back in.
-// Look for "// re-add" next to those comments.
-
#include <string>
#include <tr1/memory>
#include <vector>
#include <gflags/gflags.h>
#include <glib.h>
+#include "base/command_line.h"
#include "chromeos/obsolete_logging.h"
-#include "update_engine/action_processor.h"
-#include "update_engine/download_action.h"
-#include "update_engine/filesystem_copier_action.h"
-// #include "update_engine/install_action.h" // re-add
-#include "update_engine/libcurl_http_fetcher.h"
-#include "update_engine/omaha_request_prep_action.h"
-#include "update_engine/omaha_response_handler_action.h"
-#include "update_engine/postinstall_runner_action.h"
-#include "update_engine/set_bootable_flag_action.h"
-#include "update_engine/update_check_action.h"
+#include "update_engine/dbus_constants.h"
+#include "update_engine/dbus_service.h"
+#include "update_engine/update_attempter.h"
+
+extern "C" {
+#include "update_engine/update_engine.dbusserver.h"
+}
+
+DEFINE_bool(logtostderr, false,
+ "Write logs to stderr instead of to a file in log_dir.");
using std::string;
using std::tr1::shared_ptr;
@@ -28,108 +26,47 @@ using std::vector;
namespace chromeos_update_engine {
-class UpdateAttempter : public ActionProcessorDelegate {
- public:
- UpdateAttempter(GMainLoop *loop)
- : full_update_(false),
- loop_(loop) {}
- void Update(bool force_full_update);
-
- // Delegate method:
- void ProcessingDone(const ActionProcessor* processor, bool success);
- private:
- bool full_update_;
- vector<shared_ptr<AbstractAction> > actions_;
- ActionProcessor processor_;
- GMainLoop *loop_;
-
- // pointer to the OmahaResponseHandlerAction in the actions_ vector;
- shared_ptr<OmahaResponseHandlerAction> response_handler_action_;
- DISALLOW_COPY_AND_ASSIGN(UpdateAttempter);
-};
-
-// Returns true on success. If there was no update available, that's still
-// success.
-// If force_full is true, try to force a full update.
-void UpdateAttempter::Update(bool force_full_update) {
- full_update_ = force_full_update;
- CHECK(!processor_.IsRunning());
- processor_.set_delegate(this);
-
- // Actions:
- shared_ptr<OmahaRequestPrepAction> request_prep_action(
- new OmahaRequestPrepAction(force_full_update));
- shared_ptr<UpdateCheckAction> update_check_action(
- new UpdateCheckAction(new LibcurlHttpFetcher));
- shared_ptr<OmahaResponseHandlerAction> response_handler_action(
- new OmahaResponseHandlerAction);
- shared_ptr<FilesystemCopierAction> filesystem_copier_action(
- new FilesystemCopierAction);
- shared_ptr<DownloadAction> download_action(
- new DownloadAction(new LibcurlHttpFetcher));
- // shared_ptr<InstallAction> install_action( // re-add
- // new InstallAction);
- shared_ptr<PostinstallRunnerAction> postinstall_runner_action(
- new PostinstallRunnerAction);
- shared_ptr<SetBootableFlagAction> set_bootable_flag_action(
- new SetBootableFlagAction);
-
- response_handler_action_ = response_handler_action;
-
- actions_.push_back(shared_ptr<AbstractAction>(request_prep_action));
- actions_.push_back(shared_ptr<AbstractAction>(update_check_action));
- actions_.push_back(shared_ptr<AbstractAction>(response_handler_action));
- actions_.push_back(shared_ptr<AbstractAction>(filesystem_copier_action));
- actions_.push_back(shared_ptr<AbstractAction>(download_action));
- // actions_.push_back(shared_ptr<AbstractAction>(install_action)); // re-add
- actions_.push_back(shared_ptr<AbstractAction>(postinstall_runner_action));
- actions_.push_back(shared_ptr<AbstractAction>(set_bootable_flag_action));
-
- // Enqueue the actions
- for (vector<shared_ptr<AbstractAction> >::iterator it = actions_.begin();
- it != actions_.end(); ++it) {
- processor_.EnqueueAction(it->get());
- }
+gboolean SetupInMainLoop(void* arg) {
+ // TODO(adlr): Tell update_attempter to start working.
+ // Comment this in for that:
+ //UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
- // Bond them together. We have to use the leaf-types when calling
- // BondActions().
- BondActions(request_prep_action.get(), update_check_action.get());
- BondActions(update_check_action.get(), response_handler_action.get());
- BondActions(response_handler_action.get(), filesystem_copier_action.get());
- BondActions(filesystem_copier_action.get(), download_action.get());
- // BondActions(download_action.get(), install_action.get()); // re-add
- // BondActions(install_action.get(), postinstall_runner_action.get());
- BondActions(postinstall_runner_action.get(), set_bootable_flag_action.get());
-
- processor_.StartProcessing();
+ return FALSE; // Don't call this callback function again
}
-void UpdateAttempter::ProcessingDone(const ActionProcessor* processor,
- bool success) {
- CHECK(response_handler_action_);
- if (response_handler_action_->GotNoUpdateResponse()) {
- // All done.
- g_main_loop_quit(loop_);
- return;
+void SetupDbusService(UpdateEngineService* service) {
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+ GError *error = NULL;
+
+ bus = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
+ if (!bus) {
+ LOG(FATAL) << "Failed to get bus";
}
- if (!success) {
- if (!full_update_) {
- LOG(ERROR) << "Update failed. Attempting full update";
- actions_.clear();
- response_handler_action_.reset();
- Update(true);
- return;
- } else {
- LOG(ERROR) << "Full update failed. Aborting";
- }
+ proxy = dbus_g_proxy_new_for_name(bus,
+ DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS,
+ DBUS_INTERFACE_DBUS);
+
+ guint32 request_name_ret;
+ if (!org_freedesktop_DBus_request_name(proxy,
+ kUpdateEngineServiceName,
+ 0,
+ &request_name_ret,
+ &error)) {
+ LOG(FATAL) << "Failed to get name: " << error->message;
}
- g_main_loop_quit(loop_);
-}
-
-gboolean UpdateInMainLoop(void* arg) {
- UpdateAttempter* update_attempter = reinterpret_cast<UpdateAttempter*>(arg);
- update_attempter->Update(false);
- return FALSE; // Don't call this callback function again
+ if (request_name_ret != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+ g_warning("Got result code %u from requesting name", request_name_ret);
+ g_error_free(error);
+ exit(1);
+ LOG(FATAL) << "Got result code " << request_name_ret
+ << " from requesting name, but expected "
+ << DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER;
+ }
+ dbus_g_connection_register_g_object(bus,
+ "/org/chromium/UpdateEngine",
+ G_OBJECT(service));
}
} // namespace chromeos_update_engine
@@ -137,12 +74,16 @@ gboolean UpdateInMainLoop(void* arg) {
#include "update_engine/subprocess.h"
int main(int argc, char** argv) {
+ ::g_type_init();
g_thread_init(NULL);
+ dbus_g_thread_init();
chromeos_update_engine::Subprocess::Init();
google::ParseCommandLineFlags(&argc, &argv, true);
- // TODO(adlr): figure out log file
- logging::InitLogging("",
- logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG,
+ CommandLine::Init(argc, argv);
+ logging::InitLogging("logfile.txt",
+ FLAGS_logtostderr ?
+ logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG :
+ logging::LOG_ONLY_TO_FILE,
logging::DONT_LOCK_LOG_FILE,
logging::APPEND_TO_OLD_LOG_FILE);
LOG(INFO) << "Chrome OS Update Engine starting";
@@ -150,13 +91,26 @@ int main(int argc, char** argv) {
// Create the single GMainLoop
GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
+ // Create the update attempter:
chromeos_update_engine::UpdateAttempter update_attempter(loop);
- g_timeout_add(0, &chromeos_update_engine::UpdateInMainLoop,
- &update_attempter);
+ // Create the dbus service object:
+ dbus_g_object_type_install_info(UPDATE_ENGINE_TYPE_SERVICE,
+ &dbus_glib_update_engine_service_object_info);
+ UpdateEngineService* service =
+ UPDATE_ENGINE_SERVICE(g_object_new(UPDATE_ENGINE_TYPE_SERVICE, NULL));
+ service->update_attempter_ = &update_attempter;
+ chromeos_update_engine::SetupDbusService(service);
+
+ // Set up init routine to run within the main loop.
+ g_timeout_add(0, &chromeos_update_engine::SetupInMainLoop, &update_attempter);
+ // Run the main loop until exit time:
g_main_loop_run(loop);
+
+ // Cleanup:
g_main_loop_unref(loop);
+ g_object_unref(G_OBJECT(service));
LOG(INFO) << "Chrome OS Update Engine terminating";
return 0;
« no previous file with comments | « src/platform/update_engine/dbus_service.cc ('k') | src/platform/update_engine/org.chromium.UpdateEngine.service » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698