#pragma once #include #include #include #include #include namespace llarp { struct AbstractRouter; struct RoutePoker : public std::enable_shared_from_this { void AddRoute(net::ipv4addr_t ip); void DelRoute(net::ipv4addr_t ip); void Start(AbstractRouter* router); ~RoutePoker(); /// explicitly put routes up void Up(); /// explicitly put routes down void Down(); /// set dns resolver /// pass in if we are using exit node mode right now as a bool void SetDNSMode(bool using_exit_mode) const; private: void Update(); bool IsEnabled() const; void DeleteAllRoutes(); void DisableAllRoutes(); void RefreshAllRoutes(); void EnableRoute(net::ipv4addr_t ip, net::ipv4addr_t gateway); void DisableRoute(net::ipv4addr_t ip, net::ipv4addr_t gateway); std::unordered_map m_PokedRoutes; std::optional m_CurrentGateway; AbstractRouter* m_Router = nullptr; }; } // namespace llarp