14#ifndef OPENVPN_CLIENT_CLIEMUEXR_H
15#define OPENVPN_CLIENT_CLIEMUEXR_H
69 rl.emplace_back(server_addr, server_addr.
size());
72 tempExcludeList.emplace_back(server_addr, server_addr.
size());
73 excludedRoutes = &tempExcludeList;
77 if (excludedRoutes->empty())
89 if (rt.version() & ip_ver_flags)
92 throw emulate_exclude_route_error(
"tun_builder_add_route failed");
104 throw emulate_exclude_route_error(
"tun_builder_add_route failed");
121 for (
const auto &incRoute :
include)
123 if (incRoute.contains(r))
125 if (!bestroute || bestroute->
prefix_len < incRoute.prefix_len)
126 bestroute = &incRoute;
135 for (
const auto &exclRoute : excludedRoutes)
137 if (exclRoute.contains(r) && exclRoute.prefix_len > bestroute->
prefix_len)
RCPtr< EmulateExcludeRouteFactoryImpl > Ptr
EmulateExcludeRouteFactoryImpl(const bool exclude_server_address)
const bool exclude_server_address_
EmulateExcludeRoute::Ptr new_obj() const override
OPENVPN_EXCEPTION(emulate_exclude_route_error)
void add_default_routes(bool ipv4, bool ipv6) override
void emulate(TunBuilderBase *tb, IPVerFlags &ipv, const IP::Addr &server_addr) const override
EmulateExcludeRouteImpl(const bool exclude_server_address)
bool check_route_should_be_installed(const IP::Route &r, const IP::RouteList &excludedRoutes) const
RCPtr< EmulateExcludeRouteImpl > Ptr
const bool exclude_server_address_
void add_route(const bool add, const IP::Addr &addr, const int prefix_len) override
bool enabled(const IPVerFlags &ipv) const override
IP::Addr::VersionMask ip_ver_flags() const
void set_emulate_exclude_routes()
unsigned int size() const
static VersionMask version_mask(const Version ver)
static Addr from_zero(const Version v)
TunBuilder methods, loosely based on the Android VpnService.Builder abstraction.
virtual bool tun_builder_add_route(const std::string &address, int prefix_length, int metric, bool ipv6)
Callback to add a route to the VPN interface.
RCPtr< EmulateExcludeRoute > Ptr
bool contains(const R &c) const
int prefix_len(const IPv4::Addr::base_type mask)
static void add(const Time &t1, const Time::Duration &d1)