// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef RUNTIME_PROBE_DAEMON_H_
#define RUNTIME_PROBE_DAEMON_H_

#include <brillo/daemons/dbus_daemon.h>
#include <dbus/exported_object.h>

#include "runtime_probe/proto_bindings/runtime_probe.pb.h"

namespace dbus {
class MethodCall;
}  // namespace dbus

namespace runtime_probe {

class Daemon : public brillo::DBusDaemon {
 public:
  Daemon();
  ~Daemon() override;

 protected:
  // brillo::DBusDaemon:
  int OnInit() override;

 private:
  // This function initializes the D-Bus service. Since we expect requests
  // from client occurs as soon as the D-Bus channel is up, this
  // initialization should be the last thing that happens in Daemon::OnInit().
  void InitDBus();

  // Sugar wrapper for packing protocol buffer with error handling.
  void SendMessage(const google::protobuf::Message& reply,
                   dbus::MethodCall* method_call,
                   dbus::ExportedObject::ResponseSender response_sender);

  // Handler of org.chromium.RuntimeProbe.ProbeCategories method calls.
  void ProbeCategories(dbus::MethodCall* method_call,
                       dbus::ExportedObject::ResponseSender response_sender);

  // Handler of org.chromium.RuntimeProbe.GetKnownComponents method calls.
  // Get known components from probe config.
  void GetKnownComponents(dbus::MethodCall* method_call,
                          dbus::ExportedObject::ResponseSender response_sender);

  // Schedule an asynchronous D-Bus shutdown and exit the daemon.
  void PostQuitTask();

  // Underlying function that performs D-Bus shutdown. This QuitDaemonInternal()
  // is *not* expected to be invoked while we're still processing the method
  // call, because it will create racing on variable |bus_| (i.e.: freed before
  // other usage depends on it.)
  void QuitDaemonInternal();

  // Because members are destructed in reverse-order that they appear in the
  // class definition. Member variables should appear before the WeakPtrFactory,
  // to ensure hat any WeakPtrs are invalidated before its members variable's
  // destructors are executed, making them invalid.
  base::WeakPtrFactory<Daemon> weak_ptr_factory_{this};
};

}  // namespace runtime_probe
#endif  // RUNTIME_PROBE_DAEMON_H_
