blob: 0127dd4f507c3fc6ce835d125d744dec5c4f103b [file] [log] [blame]
// Copyright 2022 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 "vtpm/vtpm_service.h"
#include <memory>
#include <string>
#include <utility>
#include <base/bind.h>
#include <base/logging.h>
#include <brillo/dbus/dbus_method_response.h>
#include "vtpm/vtpm_interface.pb.h"
namespace vtpm {
namespace {
// Makes a `SendCommandResponse` with `response` as the TPM response.
SendCommandResponse MakeResponseProto(const std::string& response) {
SendCommandResponse response_proto;
response_proto.set_response(response);
return response_proto;
}
} // namespace
VtpmService::VtpmService(Command* command) : command_(command) {
CHECK(command_);
}
void VtpmService::SendCommand(
std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<SendCommandResponse>>
response,
const SendCommandRequest& request) {
VLOG(1) << __func__;
// Delegates the command execution to `command_`.
command_->Run(request.command(),
MakeCallingThreadCallback(std::move(response)));
}
void VtpmService::RunResponseCallback(
std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<SendCommandResponse>>
response,
const std::string& send_command_response) {
response->Return(MakeResponseProto(send_command_response));
}
void VtpmService::PostResponseCallback(
std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<SendCommandResponse>>
response,
const std::string& send_command_response) {
origin_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&VtpmService::RunResponseCallback, base::Unretained(this),
std::move(response), send_command_response));
}
CommandResponseCallback VtpmService::MakeCallingThreadCallback(
std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<SendCommandResponse>>
response) {
return base::BindOnce(&VtpmService::PostResponseCallback,
base::Unretained(this), std::move(response));
}
} // namespace vtpm