#pragma once #include "policy.hpp" #include #include #include namespace llarp::exit { /// owner of all the exit endpoints struct Context { Context(Router* r); ~Context(); void Tick(llarp_time_t now); void clear_all_endpoints(); util::StatusObject ExtractStatus() const; /// send close to all exit sessions and remove all sessions void stop(); void add_exit_endpoint( const std::string& name, const NetworkConfig& networkConfig, const DnsConfig& dnsConfig); bool obtain_new_exit(const PubKey& remote, const PathID_t& path, bool permitInternet); exit::Endpoint* find_endpoint_for_path(const PathID_t& path) const; /// calculate (pk, tx, rx) for all exit traffic using TrafficStats = std::unordered_map>; void calculate_exit_traffic(TrafficStats& stats); std::shared_ptr get_exit_endpoint(std::string name) const; private: Router* router; std::unordered_map> _exits; std::list> _closed; }; } // namespace llarp::exit