lokinet/include/llarp.hpp
Jeff Becker 4103908a8d
system layer manager (llarp::sys::service_manager)
the win32 and sd_notify components provided a disjointed set of
similar high level functionality so we consolidate these duplicate
code paths into one that has the same lifecycle regardless of platform
to reduce complexity of this feature.

this new component is responsible for reporting state changes to the
system layer and optionally propagating state change to lokinet
requested by the system layer (used by windows service).
2022-11-01 11:04:58 -04:00

121 lines
2.2 KiB
C++

#ifndef LLARP_HPP
#define LLARP_HPP
#include <future>
#include <iostream>
#include <map>
#include <memory>
#include <string>
#include <vector>
namespace llarp
{
namespace vpn
{
class Platform;
}
class EventLoop;
struct Config;
struct RouterContact;
struct Config;
struct Crypto;
struct CryptoManager;
struct AbstractRouter;
class NodeDB;
namespace thread
{
class ThreadPool;
}
struct RuntimeOptions
{
bool showBanner = true;
bool debug = false;
bool isSNode = false;
};
struct Context
{
std::shared_ptr<Crypto> crypto = nullptr;
std::shared_ptr<CryptoManager> cryptoManager = nullptr;
std::shared_ptr<AbstractRouter> router = nullptr;
std::shared_ptr<EventLoop> loop = nullptr;
std::shared_ptr<NodeDB> nodedb = nullptr;
std::string nodedb_dir;
Context();
virtual ~Context() = default;
void
Setup(const RuntimeOptions& opts);
int
Run(const RuntimeOptions& opts);
void
HandleSignal(int sig);
/// Configure given the specified config.
void
Configure(std::shared_ptr<Config> conf);
/// handle SIGHUP
void
Reload();
bool
IsUp() const;
bool
LooksAlive() const;
bool
IsStopping() const;
/// close async
void
CloseAsync();
/// wait until closed and done
void
Wait();
/// call a function in logic thread
/// return true if queued for calling
/// return false if not queued for calling
bool
CallSafe(std::function<void(void)> f);
/// Creates a router. Can be overridden to allow a different class of router
/// to be created instead. Defaults to llarp::Router.
virtual std::shared_ptr<AbstractRouter>
makeRouter(const std::shared_ptr<EventLoop>& loop);
/// create the nodedb given our current configs
virtual std::shared_ptr<NodeDB>
makeNodeDB();
/// create the vpn platform for use in creating network interfaces
virtual std::shared_ptr<llarp::vpn::Platform>
makeVPNPlatform();
int androidFD = -1;
protected:
std::shared_ptr<Config> config = nullptr;
private:
void
SigINT();
void
Close();
std::unique_ptr<std::promise<void>> closeWaiter;
};
} // namespace llarp
#endif