summaryrefslogtreecommitdiff
path: root/client/tpm_ownership_dbus_proxy.cc
diff options
context:
space:
mode:
authorUtkarsh Sanghi <usanghi@google.com>2015-10-20 09:31:56 -0700
committerUtkarsh Sanghi <usanghi@google.com>2015-10-26 21:57:43 +0000
commitc9429017d51d78d516ac40531ce83fe35c48524c (patch)
tree3b891853186d1705791655c84bae74773ee7378f /client/tpm_ownership_dbus_proxy.cc
parent39074f04aec7466722271d1484ff75f48a77f93c (diff)
downloadtpm_manager-c9429017d51d78d516ac40531ce83fe35c48524c.tar.gz
tpm_manager: Break up proxy interface
This CL breaks up the dbus_proxy interface to inherit from TpmOwnershipInterface and TpmNvramInterface. Bug: 24659038 TEST=compile and run on DUT. Change-Id: I74c9a7fa3c1c0cbe76e60f08bbb4160d41a40744
Diffstat (limited to 'client/tpm_ownership_dbus_proxy.cc')
-rw-r--r--client/tpm_ownership_dbus_proxy.cc84
1 files changed, 84 insertions, 0 deletions
diff --git a/client/tpm_ownership_dbus_proxy.cc b/client/tpm_ownership_dbus_proxy.cc
new file mode 100644
index 0000000..3282ca4
--- /dev/null
+++ b/client/tpm_ownership_dbus_proxy.cc
@@ -0,0 +1,84 @@
+//
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "tpm_manager/client/tpm_ownership_dbus_proxy.h"
+
+#include <brillo/bind_lambda.h>
+#include <brillo/dbus/dbus_method_invoker.h>
+
+#include "tpm_manager/common/tpm_manager_constants.h"
+#include "tpm_manager/common/tpm_ownership_dbus_interface.h"
+
+namespace {
+
+// Use a two minute timeout because TPM operations can take a long time.
+const int kDBusTimeoutMS = 2 * 60 * 1000;
+
+} // namespace
+
+namespace tpm_manager {
+
+TpmOwnershipDBusProxy::~TpmOwnershipDBusProxy() {
+ if (bus_) {
+ bus_->ShutdownAndBlock();
+ }
+}
+
+bool TpmOwnershipDBusProxy::Initialize() {
+ dbus::Bus::Options options;
+ options.bus_type = dbus::Bus::SYSTEM;
+ bus_ = new dbus::Bus(options);
+ object_proxy_ = bus_->GetObjectProxy(
+ tpm_manager::kTpmManagerServiceName,
+ dbus::ObjectPath(tpm_manager::kTpmManagerServicePath));
+ return (object_proxy_ != nullptr);
+}
+
+void TpmOwnershipDBusProxy::GetTpmStatus(
+ const GetTpmStatusRequest& request,
+ const GetTpmStatusCallback& callback) {
+ CallMethod<GetTpmStatusReply>(tpm_manager::kGetTpmStatus, request, callback);
+}
+
+void TpmOwnershipDBusProxy::TakeOwnership(
+ const TakeOwnershipRequest& request,
+ const TakeOwnershipCallback& callback) {
+ CallMethod<TakeOwnershipReply>(
+ tpm_manager::kTakeOwnership, request, callback);
+}
+
+template<typename ReplyProtobufType,
+ typename RequestProtobufType,
+ typename CallbackType>
+void TpmOwnershipDBusProxy::CallMethod(const std::string& method_name,
+ const RequestProtobufType& request,
+ const CallbackType& callback) {
+ auto on_error = [callback](brillo::Error* error) {
+ ReplyProtobufType reply;
+ reply.set_status(STATUS_NOT_AVAILABLE);
+ callback.Run(reply);
+ };
+ brillo::dbus_utils::CallMethodWithTimeout(
+ kDBusTimeoutMS,
+ object_proxy_,
+ tpm_manager::kTpmOwnershipInterface,
+ method_name,
+ callback,
+ base::Bind(on_error),
+ request);
+}
+
+} // namespace tpm_manager