1259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//
2259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Copyright (C) 2015 The Android Open Source Project
3259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//
4259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License");
5259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// you may not use this file except in compliance with the License.
6259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// You may obtain a copy of the License at
7259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//
8259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//      http://www.apache.org/licenses/LICENSE-2.0
9259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//
10259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software
11259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS,
12259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// See the License for the specific language governing permissions and
14259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi// limitations under the License.
15259fa1be39c0a35ec374fe127ba49d1c5ed5eb18Utkarsh Sanghi//
162863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
17c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#ifndef TPM_MANAGER_CLIENT_TPM_OWNERSHIP_DBUS_PROXY_H_
18c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#define TPM_MANAGER_CLIENT_TPM_OWNERSHIP_DBUS_PROXY_H_
192863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
20c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#include "tpm_manager/common/tpm_ownership_interface.h"
212863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
222863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi#include <string>
232863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
24c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#include <base/macros.h>
252863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi#include <base/memory/ref_counted.h>
262863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi#include <dbus/bus.h>
272863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi#include <dbus/object_proxy.h>
282863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
292863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi#include "tpm_manager/common/export.h"
302863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
312863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghinamespace tpm_manager {
322863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
33c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi// An implementation of TpmOwnershipInterface that forwards requests to
342863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi// tpm_managerd over D-Bus.
352863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi// Usage:
36c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi// std::unique_ptr<TpmOwnershipInterface> tpm_ = new TpmOwnershipDBusProxy();
37c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi// tpm_->GetTpmStatus(...);
38c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghiclass TPM_MANAGER_EXPORT TpmOwnershipDBusProxy : public TpmOwnershipInterface {
392863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi public:
40c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  TpmOwnershipDBusProxy() = default;
41c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  virtual ~TpmOwnershipDBusProxy();
422863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
43c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  // Performs initialization tasks. This method must be called before calling
44c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  // any other method in this class. Returns true on success.
45c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  bool Initialize();
46c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi
47c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  // TpmOwnershipInterface methods.
482863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi  void GetTpmStatus(const GetTpmStatusRequest& request,
492863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi                    const GetTpmStatusCallback& callback) override;
50f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn  void TakeOwnership(const TakeOwnershipRequest& request,
51f22a3bdbc5f53e4177608b591d5612da2512d070Darren Krahn                     const TakeOwnershipCallback& callback) override;
52bbdb1b1f93626766baf7e293c7a9e532933531c3Utkarsh Sanghi  void RemoveOwnerDependency(
53bbdb1b1f93626766baf7e293c7a9e532933531c3Utkarsh Sanghi      const RemoveOwnerDependencyRequest& request,
54bbdb1b1f93626766baf7e293c7a9e532933531c3Utkarsh Sanghi      const RemoveOwnerDependencyCallback& callback) override;
552863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
562863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi  void set_object_proxy(dbus::ObjectProxy* object_proxy) {
572863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi    object_proxy_ = object_proxy;
582863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi  }
592863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
602863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi private:
61644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi  // Template method to call a given |method_name| remotely via dbus.
62644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi  template<typename ReplyProtobufType,
63644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi           typename RequestProtobufType,
64644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi           typename CallbackType>
65644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi  void CallMethod(const std::string& method_name,
66644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi                  const RequestProtobufType& request,
67644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi                  const CallbackType& callback);
68644d8287015a0be315a49863b005f1237c280d6bUtkarsh Sanghi
692863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi  scoped_refptr<dbus::Bus> bus_;
702863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi  dbus::ObjectProxy* object_proxy_;
71c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi  DISALLOW_COPY_AND_ASSIGN(TpmOwnershipDBusProxy);
722863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi};
732863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
742863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi}  // namespace tpm_manager
752863c75955f0e50df2ad29587a29b4d5b06779bUtkarsh Sanghi
76c9429017d51d78d516ac40531ce83fe35c48524cUtkarsh Sanghi#endif  // TPM_MANAGER_CLIENT_TPM_OWNERSHIP_DBUS_PROXY_H_
77