// // Copyright (C) 2016 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. // #ifndef TPM_MANAGER_SERVER_BINDER_SERVICE_H_ #define TPM_MANAGER_SERVER_BINDER_SERVICE_H_ #include #include #include "android/tpm_manager/BnTpmNvram.h" #include "android/tpm_manager/BnTpmOwnership.h" #include "tpm_manager/common/tpm_nvram_interface.h" #include "tpm_manager/common/tpm_ownership_interface.h" namespace tpm_manager { // BinderService registers for and handles all incoming binder calls for the // tpm_managerd system daemon. // // Example Usage: // // BinderService service(&nvram_service, &ownership_service); // service.Run(); class BinderService : public brillo::Daemon { public: BinderService(TpmNvramInterface* nvram_service, TpmOwnershipInterface* ownership_service); ~BinderService() override = default; // Does basic setup but does not register with the binder subsystem. void InitForTesting(); // Getters for binder interfaces. Callers do not take ownership. These should // only be used for testing. android::tpm_manager::ITpmNvram* GetITpmNvram(); android::tpm_manager::ITpmOwnership* GetITpmOwnership(); protected: int OnInit() override; private: friend class NvramServiceInternal; class NvramServiceInternal : public android::tpm_manager::BnTpmNvram { public: explicit NvramServiceInternal(TpmNvramInterface* service); ~NvramServiceInternal() override = default; // ITpmNvram interface. android::binder::Status DefineSpace( const std::vector& command_proto, const android::sp& client) override; android::binder::Status DestroySpace( const std::vector& command_proto, const android::sp& client) override; android::binder::Status WriteSpace( const std::vector& command_proto, const android::sp& client) override; android::binder::Status ReadSpace( const std::vector& command_proto, const android::sp& client) override; android::binder::Status ListSpaces( const std::vector& command_proto, const android::sp& client) override; android::binder::Status GetSpaceInfo( const std::vector& command_proto, const android::sp& client) override; android::binder::Status LockSpace( const std::vector& command_proto, const android::sp& client) override; private: TpmNvramInterface* nvram_service_; }; friend class OwnershipServiceInternal; class OwnershipServiceInternal : public android::tpm_manager::BnTpmOwnership { public: explicit OwnershipServiceInternal(TpmOwnershipInterface* service); ~OwnershipServiceInternal() override = default; // ITpmOwnership interface. android::binder::Status GetTpmStatus( const std::vector& command_proto, const android::sp& client) override; android::binder::Status TakeOwnership( const std::vector& command_proto, const android::sp& client) override; android::binder::Status RemoveOwnerDependency( const std::vector& command_proto, const android::sp& client) override; private: TpmOwnershipInterface* ownership_service_; }; brillo::BinderWatcher watcher_; android::sp nvram_binder_; android::sp ownership_binder_; TpmNvramInterface* nvram_service_; TpmOwnershipInterface* ownership_service_; DISALLOW_COPY_AND_ASSIGN(BinderService); }; } // namespace tpm_manager #endif // TPM_MANAGER_SERVER_BINDER_SERVICE_H_