blob: b5d0b48166bd35a0dd74f01c3f3652c3dec18230 [file] [log] [blame]
// 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 SendProbeResult(const ProbeResult& reply,
dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender);
// Handler of org.chromium.ProbeCategories method calls.
void ProbeCategories(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_