diff options
author | Utkarsh Sanghi <usanghi@google.com> | 2015-10-20 09:31:56 -0700 |
---|---|---|
committer | Utkarsh Sanghi <usanghi@google.com> | 2015-10-26 21:57:43 +0000 |
commit | c9429017d51d78d516ac40531ce83fe35c48524c (patch) | |
tree | 3b891853186d1705791655c84bae74773ee7378f /client/tpm_ownership_dbus_proxy.cc | |
parent | 39074f04aec7466722271d1484ff75f48a77f93c (diff) | |
download | tpm_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.cc | 84 |
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 |