Buffet: Move buffet over to platform2 from src/platform/buffet.
This change also open-sources buffet. The only change in this CL
is the removal of the Makefile and addition of the buffet.gyp file.
BUG=chromium:355180
TEST=USE=buffet emerge-gizmo platform2
Change-Id: Ibf8d3ac3f38313f82a9c07d79932b6f30130f9c5
diff --git a/buffet/dbus_manager.cc b/buffet/dbus_manager.cc
new file mode 100644
index 0000000..c6031fc
--- /dev/null
+++ b/buffet/dbus_manager.cc
@@ -0,0 +1,80 @@
+// Copyright 2014 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 "buffet/dbus_manager.h"
+
+#include <string>
+
+#include <base/bind.h>
+
+namespace buffet {
+
+namespace {
+
+// Passes |method_call| to |handler| and passes the response to
+// |response_sender|. If |handler| returns NULL, an empty response is created
+// and sent.
+void HandleSynchronousDBusMethodCall(
+ base::Callback<scoped_ptr<dbus::Response>(dbus::MethodCall*)> handler,
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
+ auto response = handler.Run(method_call);
+ if (!response)
+ response = dbus::Response::FromMethodCall(method_call);
+
+ response_sender.Run(response.Pass());
+}
+
+} // namespace
+
+DBusManager::DBusManager()
+ : bus_(nullptr),
+ buffet_dbus_object_(nullptr) {}
+
+DBusManager::~DBusManager() {}
+
+void DBusManager::Init() {
+ InitDBus();
+}
+
+void DBusManager::Finalize() {
+ ShutDownDBus();
+}
+
+void DBusManager::InitDBus() {
+ dbus::Bus::Options options;
+ // TODO(sosa): Should this be on the system bus?
+ options.bus_type = dbus::Bus::SYSTEM;
+ bus_ = new dbus::Bus(options);
+ CHECK(bus_->Connect());
+
+ buffet_dbus_object_ = bus_->GetExportedObject(
+ dbus::ObjectPath(kBuffetServicePath));
+ ExportDBusMethod(kTestMethod, &DBusManager::HandleTestMethod);
+
+ CHECK(bus_->RequestOwnershipAndBlock(kBuffetServiceName,
+ dbus::Bus::REQUIRE_PRIMARY))
+ << "Unable to take ownership of " << kBuffetServiceName;
+}
+
+void DBusManager::ShutDownDBus() {
+ bus_->ShutdownAndBlock();
+}
+
+void DBusManager::ExportDBusMethod(const std::string& method_name,
+ DBusMethodCallMemberFunction member) {
+ DCHECK(buffet_dbus_object_);
+ CHECK(buffet_dbus_object_->ExportMethodAndBlock(
+ kBuffetInterface, method_name,
+ base::Bind(&HandleSynchronousDBusMethodCall,
+ base::Bind(member, base::Unretained(this)))));
+}
+
+scoped_ptr<dbus::Response> DBusManager::HandleTestMethod(
+ dbus::MethodCall* method_call) {
+ LOG(INFO) << "Received call to test method.";
+ return scoped_ptr<dbus::Response>();
+}
+
+} // namespace buffet