Home | History | Annotate | Download | only in trunks
      1 //
      2 // Copyright (C) 2016 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 TRUNKS_TRUNKS_DBUS_SERVICE_H_
     18 #define TRUNKS_TRUNKS_DBUS_SERVICE_H_
     19 
     20 #include <memory>
     21 #include <string>
     22 
     23 #include <base/memory/weak_ptr.h>
     24 #include <brillo/daemons/dbus_daemon.h>
     25 #include <brillo/dbus/dbus_method_response.h>
     26 #include <brillo/dbus/dbus_object.h>
     27 
     28 #include "trunks/command_transceiver.h"
     29 #include "trunks/interface.pb.h"
     30 
     31 namespace trunks {
     32 
     33 // TrunksDBusService registers for and handles all incoming D-Bus messages for
     34 // the trunksd system daemon.
     35 //
     36 // Example Usage:
     37 //
     38 // TrunksDBusService service;
     39 // service.set_transceiver(&my_transceiver);
     40 // service.Run();
     41 class TrunksDBusService : public brillo::DBusServiceDaemon {
     42  public:
     43   TrunksDBusService();
     44   ~TrunksDBusService() override = default;
     45 
     46   // The |transceiver| will be the target of all incoming TPM commands. This
     47   // class does not take ownership of |transceiver|.
     48   void set_transceiver(CommandTransceiver* transceiver) {
     49     transceiver_ = transceiver;
     50   }
     51 
     52  protected:
     53   // Exports D-Bus methods.
     54   void RegisterDBusObjectsAsync(
     55       brillo::dbus_utils::AsyncEventSequencer* sequencer) override;
     56 
     57  private:
     58   // Handles calls to the 'SendCommand' method.
     59   void HandleSendCommand(
     60       std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<
     61           const SendCommandResponse&>> response_sender,
     62       const SendCommandRequest& request);
     63 
     64   base::WeakPtr<TrunksDBusService> GetWeakPtr() {
     65     return weak_factory_.GetWeakPtr();
     66   }
     67 
     68   std::unique_ptr<brillo::dbus_utils::DBusObject> trunks_dbus_object_;
     69   CommandTransceiver* transceiver_ = nullptr;
     70 
     71   // Declared last so weak pointers are invalidated first on destruction.
     72   base::WeakPtrFactory<TrunksDBusService> weak_factory_{this};
     73   DISALLOW_COPY_AND_ASSIGN(TrunksDBusService);
     74 };
     75 
     76 }  // namespace trunks
     77 
     78 
     79 #endif  // TRUNKS_TRUNKS_DBUS_SERVICE_H_
     80