/* Copyright (c) 2007-2021, The Tor Project, Inc. */
/* See LICENSE for licensing information */

/**
 * \file btrack.c
 * \brief Bootstrap trackers
 *
 * Initializes and shuts down the specific bootstrap trackers.  These
 * trackers help the reporting of bootstrap progress by maintaining
 * state information about various subsystems within tor.  When the
 * correct state changes happen, these trackers emit controller
 * events.
 *
 * These trackers avoid referring directly to the internals of state
 * objects of other subsystems.
 *
 * btrack_circuit.c contains the tracker for origin circuits.
 *
 * btrack_orconn.c contains the tracker for OR connections.
 *
 * Eventually there will be a tracker for directory downloads as well.
 **/

#include "feature/control/btrack_circuit.h"
#include "feature/control/btrack_orconn.h"
#include "feature/control/btrack_sys.h"
#include "lib/pubsub/pubsub.h"
#include "lib/subsys/subsys.h"

static int
btrack_init(void)
{
  if (btrack_orconn_init())
    return -1;

  return 0;
}

static void
btrack_fini(void)
{
  btrack_orconn_fini();
  btrack_circ_fini();
}

static int
btrack_add_pubsub(pubsub_connector_t *connector)
{
  if (btrack_orconn_add_pubsub(connector))
    return -1;
  if (btrack_circ_add_pubsub(connector))
    return -1;

  return 0;
}

const subsys_fns_t sys_btrack = {
  .name = "btrack",
  SUBSYS_DECLARE_LOCATION(),
  .supported = true,
  .level = 55,
  .initialize = btrack_init,
  .shutdown = btrack_fini,
  .add_pubsub = btrack_add_pubsub,
};
