You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/llarp/router/route_poker.hpp

73 lines
1.3 KiB
C++

#pragma once
#include <llarp/net/net_int.hpp>
#include <external/oxen-libquic/include/quic.hpp>
#include <unordered_map>
#include <string>
#include <memory>
#include <optional>
namespace llarp
{
struct Router;
struct RoutePoker : public std::enable_shared_from_this<RoutePoker>
{
RoutePoker(Router& r) : router{r}
{}
void
add_route(oxen::quic::Address ip);
void
delete_route(oxen::quic::Address ip);
void
start();
~RoutePoker();
/// explicitly put routes up
void
put_up();
/// explicitly put routes down
void
put_down();
/// set dns resolver
/// pass in if we are using exit node mode right now as a bool
void
set_dns_mode(bool using_exit_mode) const;
private:
void
update();
bool
is_enabled() const;
void
delete_all_routes();
void
disable_all_routes();
void
refresh_all_routes();
void
enable_route(oxen::quic::Address ip, oxen::quic::Address gateway);
void
disable_route(oxen::quic::Address ip, oxen::quic::Address gateway);
std::unordered_map<oxen::quic::Address, oxen::quic::Address> poked_routes;
std::optional<oxen::quic::Address> current_gateway;
Router& router;
bool is_up{false};
};
} // namespace llarp