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