mirror of
https://github.com/OpenVPN/openvpn3.git
synced 2024-09-20 12:12:15 +02:00
[OVPN3-354] cli.cpp: support for round-robin DNS and redirect gw
This takes into use new TunSetup API which enables to create bypass routes before establishing connection. Signed-off-by: Lev Stipakov <lev@openvpn.net>
This commit is contained in:
parent
8a502f3b61
commit
dfcc4bc437
@ -127,6 +127,8 @@ public:
|
|||||||
|
|
||||||
TUN_CLASS_SETUP::Config config;
|
TUN_CLASS_SETUP::Config config;
|
||||||
config.layer = Layer(Layer::Type::OSI_LAYER_3);
|
config.layer = Layer(Layer::Type::OSI_LAYER_3);
|
||||||
|
// no need to add bypass routes on establish since we do it on socket_protect
|
||||||
|
config.add_bypass_routes_on_establish = false;
|
||||||
return tun->establish(tbc, &config, nullptr, std::cout);
|
return tun->establish(tbc, &config, nullptr, std::cout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,16 +172,38 @@ public:
|
|||||||
return tbc.tun_builder_add_dns_server(address, ipv6);
|
return tbc.tun_builder_add_dns_server(address, ipv6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tun_builder_teardown(bool disconnect) override
|
||||||
|
{
|
||||||
|
std::ostringstream os;
|
||||||
|
auto os_print = Cleanup([&os](){ OPENVPN_LOG_STRING(os.str()); });
|
||||||
|
tun->destroy(os);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool socket_protect(int socket, std::string remote, bool ipv6) override
|
||||||
|
{
|
||||||
|
(void)socket;
|
||||||
|
std::ostringstream os;
|
||||||
|
auto os_print = Cleanup([&os](){ OPENVPN_LOG_STRING(os.str()); });
|
||||||
|
return tun->add_bypass_route(remote, ipv6, os);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TUN_CLASS_SETUP::Ptr tun;
|
TUN_CLASS_SETUP::Ptr tun = new TUN_CLASS_SETUP();
|
||||||
TunBuilderCapture tbc;
|
TunBuilderCapture tbc;
|
||||||
};
|
};
|
||||||
#define CLIENTBASE ClientBase
|
|
||||||
#else // USE_TUN_BUILDER
|
#else // USE_TUN_BUILDER
|
||||||
#define CLIENTBASE ClientAPI::OpenVPNClient
|
class ClientBase : public ClientAPI::OpenVPNClient
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool socket_protect(int socket, std::string remote, bool ipv6) override
|
||||||
|
{
|
||||||
|
std::cout << "NOT IMPLEMENTED: *** socket_protect " << socket << " " << remote << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Client : public CLIENTBASE
|
class Client : public ClientBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum ClockTickAction {
|
enum ClockTickAction {
|
||||||
@ -234,13 +258,6 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool socket_protect(int socket, std::string remote, bool ipv6) override
|
|
||||||
{
|
|
||||||
std::cout << "*** socket_protect " << socket << " "
|
|
||||||
<< remote << std::endl;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void event(const ClientAPI::Event& ev) override
|
virtual void event(const ClientAPI::Event& ev) override
|
||||||
{
|
{
|
||||||
std::cout << date_time() << " EVENT: " << ev.name;
|
std::cout << date_time() << " EVENT: " << ev.name;
|
||||||
|
Loading…
Reference in New Issue
Block a user