• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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