Home | History | Annotate | Download | only in server
      1 //
      2 // Copyright (C) 2015 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #ifndef TPM_MANAGER_SERVER_DBUS_SERVICE_H_
     18 #define TPM_MANAGER_SERVER_DBUS_SERVICE_H_
     19 
     20 #include <memory>
     21 
     22 #include <brillo/daemons/dbus_daemon.h>
     23 #include <brillo/dbus/dbus_method_response.h>
     24 #include <brillo/dbus/dbus_object.h>
     25 #include <dbus/bus.h>
     26 
     27 #include "tpm_manager/common/tpm_nvram_interface.h"
     28 #include "tpm_manager/common/tpm_ownership_interface.h"
     29 
     30 namespace tpm_manager {
     31 
     32 using brillo::dbus_utils::DBusMethodResponse;
     33 
     34 // Handles D-Bus communication with the TpmManager daemon.
     35 class DBusService : public brillo::DBusServiceDaemon {
     36  public:
     37   // Does not take ownership of |nvram_service| or |ownership_service|. The
     38   // services provided must be initialized, and must remain valid for the
     39   // lifetime of this instance.
     40   DBusService(TpmNvramInterface* nvram_service,
     41               TpmOwnershipInterface* ownership_service);
     42   // Used to inject a mock bus.
     43   DBusService(scoped_refptr<dbus::Bus> bus,
     44               TpmNvramInterface* nvram_service,
     45               TpmOwnershipInterface* ownership_service);
     46   virtual ~DBusService() = default;
     47 
     48   // Registers objects exported by this service.
     49   void RegisterDBusObjectsAsync(
     50       brillo::dbus_utils::AsyncEventSequencer* sequencer) override;
     51 
     52  private:
     53   friend class DBusServiceTest;
     54 
     55   template <typename RequestProtobufType,
     56             typename ReplyProtobufType,
     57             typename TpmInterface>
     58   using HandlerFunction = void (TpmInterface::*)(
     59       const RequestProtobufType&,
     60       const base::Callback<void(const ReplyProtobufType&)>&);
     61 
     62   // Templates to handle D-Bus calls.
     63   template <typename RequestProtobufType,
     64             typename ReplyProtobufType,
     65             DBusService::HandlerFunction<RequestProtobufType,
     66                                          ReplyProtobufType,
     67                                          TpmNvramInterface> func>
     68   void HandleNvramDBusMethod(
     69       std::unique_ptr<DBusMethodResponse<const ReplyProtobufType&>> response,
     70       const RequestProtobufType& request);
     71 
     72   template <typename RequestProtobufType,
     73             typename ReplyProtobufType,
     74             DBusService::HandlerFunction<RequestProtobufType,
     75                                          ReplyProtobufType,
     76                                          TpmOwnershipInterface> func>
     77   void HandleOwnershipDBusMethod(
     78       std::unique_ptr<DBusMethodResponse<const ReplyProtobufType&>> response,
     79       const RequestProtobufType& request);
     80 
     81   std::unique_ptr<brillo::dbus_utils::DBusObject> dbus_object_;
     82   TpmNvramInterface* nvram_service_;
     83   TpmOwnershipInterface* ownership_service_;
     84   DISALLOW_COPY_AND_ASSIGN(DBusService);
     85 };
     86 
     87 }  // namespace tpm_manager
     88 
     89 #endif  // TPM_MANAGER_SERVER_DBUS_SERVICE_H_
     90