29#if defined(ENABLE_KOVPN)
30#include <openvpn/kovpn/kodevtun.hpp>
31#include <openvpn/kovpn/kostats.hpp>
32#include <openvpn/kovpn/kovpn.hpp>
33#include <openvpn/kovpn/rps_xps.hpp>
34#elif defined(ENABLE_OVPNDCO)
40#elif defined(ENABLE_OVPNDCOWIN)
46#error either ENABLE_KOVPN, ENABLE_OVPNDCO or ENABLE_OVPNDCOWIN must be defined
78 void finalize(
const bool disconnected)
override
80#if defined(ENABLE_OVPNDCOWIN)
82 tun.tun_persist.reset();
179 std::string &ip_addr)
const override
207 if (
state->vpn_ip4_addr.specified())
208 return state->vpn_ip4_addr.to_string();
215 if (
state->vpn_ip6_addr.specified())
216 return state->vpn_ip6_addr.to_string();
223 if (
state->vpn_ip4_gw.specified())
224 return state->vpn_ip4_gw.to_string();
231 if (
state->vpn_ip6_gw.specified())
232 return state->vpn_ip6_gw.to_string();
243 Client(openvpn_io::io_context &io_context_arg,
277#if defined(ENABLE_KOVPN)
278#include <openvpn/kovpn/kovpncli.hpp>
281 return KovpnClientConfig::new_controller();
289#elif defined(ENABLE_OVPNDCO)
291inline DCO::Ptr new_controller(TunBuilderBase *tb)
304 TransportClientParent *parent)
308#elif defined(ENABLE_OVPNDCOWIN)
310inline DCO::Ptr new_controller(TunBuilderBase *tb)
317 NTSTATUS status = BCryptOpenAlgorithmProvider(&h, L
"CHACHA20_POLY1305", NULL, 0);
318 if (BCRYPT_SUCCESS(status))
320 BCryptCloseAlgorithmProvider(h, 0);
329 TransportClientParent *parent)
static bool available(TunBuilderBase *tb)
void process_push(const OptionList &opt) override
TransportClient::Ptr new_transport_client_obj(openvpn_io::io_context &io_context, TransportClientParent *parent) override
DCO::TransportConfig transport
TunClientFactory::Ptr new_tun_factory(const DCO::TunConfig &conf, const OptionList &opt) override
RCPtr< ClientConfig > Ptr
TunClient::Ptr new_tun_client_obj(openvpn_io::io_context &io_context, TunClientParent &parent, TransportClient *transcli) override
void finalize(const bool disconnected) override
TransportClientFactory::Ptr new_transport_factory(const DCO::TransportConfig &conf) override
static DCO::Ptr new_controller(TunBuilderBase *tb)
bool supports_epoch_data() override
unsigned int ping_restart_override
void server_endpoint_info(std::string &host, std::string &port, std::string &proto, std::string &ip_addr) const override
std::string vpn_ip4() const override
void transport_stop_requeueing() override
void transport_reparent(TransportClientParent *parent_arg) override
int vpn_mtu() const override
size_t transport_send_queue_size() override
std::string vpn_gw6() const override
std::string vpn_ip6() const override
bool transport_send_queue_empty() override
ActionList::Ptr remove_cmds
void reset_align_adjust(const size_t align_adjust) override
openvpn_io::io_context & io_context
TransportClientParent * transport_parent
Client(openvpn_io::io_context &io_context_arg, ClientConfig *config_arg, TransportClientParent *parent_arg)
std::string vpn_gw4() const override
bool tun_send(BufferAllocated &buf) override
bool transport_has_send_queue() override
void set_disconnect() override
TunProp::State::Ptr state
TunClientParent * tun_parent
std::string to_string() const
T get_num(const std::string &name, const size_t idx, const T default_value) const
const Option * get_ptr(const std::string &name) const
const std::string & get(const size_t index, const size_t max_len) const
void process_push(const OptionList &opt)
TunBuilder methods, loosely based on the Android VpnService.Builder abstraction.
void allow_dc_algs(const std::list< Type > types)
std::array< Alg, Type::SIZE > algs
RemoteList::Ptr remote_list
RCPtr< TransportClientFactory > Ptr
RCPtr< TransportClient > Ptr
virtual IP::Addr server_endpoint_addr() const =0
virtual Protocol transport_protocol() const =0
RCPtr< TunClientFactory > Ptr