#ifndef LLARP_HPP #define LLARP_HPP #include #include #include #include #include #include #include namespace llarp { namespace vpn { class Platform; } class Logic; struct Config; struct RouterContact; struct Config; struct Crypto; struct CryptoManager; struct AbstractRouter; struct EventLoop; class NodeDB; namespace thread { class ThreadPool; } struct RuntimeOptions { bool background = false; bool debug = false; bool isRouter = false; }; struct Context { std::shared_ptr crypto = nullptr; std::shared_ptr cryptoManager = nullptr; std::shared_ptr router = nullptr; std::shared_ptr logic = nullptr; std::shared_ptr nodedb = nullptr; std::shared_ptr mainloop; std::string nodedb_dir; virtual ~Context() = default; void Close(); void Setup(const RuntimeOptions& opts); int Run(const RuntimeOptions& opts); void HandleSignal(int sig); /// Configure given the specified config. void Configure(std::shared_ptr conf); /// handle SIGHUP void Reload(); bool IsUp() const; bool LooksAlive() 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 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 makeRouter(std::shared_ptr __netloop, std::shared_ptr logic); /// create the vpn platform for use in creating network interfaces virtual std::shared_ptr makeVPNPlatform(); #ifdef ANDROID int androidFD = -1; int GetUDPSocket(); #endif protected: std::shared_ptr config = nullptr; private: void SigINT(); std::unique_ptr> closeWaiter; }; } // namespace llarp #endif