14#ifndef OPENVPN_TUN_LINUX_CLIENT_TUNCLI_H
15#define OPENVPN_TUN_LINUX_CLIENT_TUNCLI_H
29 typedef std::unique_ptr<PacketFrom>
SPtr;
33template <
typename ReadHandler>
34class Tun :
public TunIO<ReadHandler, PacketFrom, openvpn_io::posix::stream_descriptor>
41 Tun(openvpn_io::io_context &io_context,
42 ReadHandler read_handler_arg,
46 const std::string &
name)
47 :
Base(read_handler_arg, frame_arg, stats_arg)
51 Base::stream =
new openvpn_io::posix::stream_descriptor(io_context, socket);
142 OPENVPN_LOG(
"TunPersist: long-term session scope");
147 OPENVPN_LOG(
"TunPersist: short-term connection scope");
199 std::ostringstream
os;
202 sd =
tun_setup->establish(*po, &tsconf,
nullptr,
os);
205#if defined(HAVE_JSON)
206 if (
config->generate_tun_builder_capture_event)
233 catch (
const std::exception &e)
259 if (
state->vpn_ip4_addr.specified())
260 return state->vpn_ip4_addr.to_string();
267 if (
state->vpn_ip6_addr.specified())
268 return state->vpn_ip6_addr.to_string();
275 if (
state->vpn_ip4_gw.specified())
276 return state->vpn_ip4_gw.to_string();
283 if (
state->vpn_ip6_gw.specified())
284 return state->vpn_ip6_gw.to_string();
317 openvpn_io::post(
io_context, [self =
Ptr(
this), opt, &transcli]
321 self->tun_start(opt, transcli, c); });
325 Client(openvpn_io::io_context &io_context_arg,
339 return impl->write(buf);
350 const openvpn_io::error_code *error)
#define OPENVPN_ASYNC_HANDLER
const Option * get_ptr(const std::string &name) const
const std::string & get(const size_t index, const size_t max_len) const
void reset() noexcept
Points this RCPtr<T> to nullptr safely.
T * get() const noexcept
Returns the raw pointer to the object T, or nullptr.
Json::Value to_json() const
Serializes the tunnel configuration to a JSON object.
std::string to_string() const
Converts the tunnel configuration to a human-readable string representation.
openvpn_io::posix::stream_descriptor * stream
void load(const OptionList &opt)
TunBuilderSetup::Base::Ptr new_setup_obj()
bool supports_epoch_data() override
RCPtr< ClientConfig > Ptr
TunPersist::Ptr tun_persist
TunClient::Ptr new_tun_client_obj(openvpn_io::io_context &io_context, TunClientParent &parent, TransportClient *transcli) override
TunBuilderSetup::Factory::Ptr tun_setup_factory
bool generate_tun_builder_capture_event
Client(openvpn_io::io_context &io_context_arg, ClientConfig *config_arg, TunClientParent &parent_arg)
std::string tun_name() const override
void tun_error_handler(const Error::Type errtype, const openvpn_io::error_code *error)
TunProp::State::Ptr state
TunBuilderSetup::Base::Ptr tun_setup
void apply_push_update(const OptionList &opt, TransportClient &transcli) override
Notifies tun client about received PUSH_UPDATE control channel message.
bool tun_send(BufferAllocated &buf) override
void set_disconnect() override
std::string vpn_ip6() const override
void tun_read_handler(PacketFrom::SPtr &pfp)
TunPersist::Ptr tun_persist
void tun_start(const OptionList &opt, TransportClient &transcli, CryptoDCSettings &) override
openvpn_io::io_context & io_context
std::string vpn_gw4() const override
int vpn_mtu() const override
std::string vpn_gw6() const override
std::string vpn_ip4() const override
TunIO< ReadHandler, PacketFrom, openvpn_io::posix::stream_descriptor > Base
Tun(openvpn_io::io_context &io_context, ReadHandler read_handler_arg, const Frame::Ptr &frame_arg, const SessionStats::Ptr &stats_arg, const int socket, const std::string &name)
static void configure_builder(TunBuilderBase *tb, State *state, SessionStats *stats, const IP::Addr &server_addr, const Config &config, const OptionList &opt, const EmulateExcludeRouteFactory *eer_factory, const bool quiet)
#define OPENVPN_LOG(args)
#define OPENVPN_LOG_STRING(str)
TunPersistTemplate< ScopedFD > TunPersist
CleanupType< F > Cleanup(F method) noexcept
virtual IP::Addr server_endpoint_addr() const =0
virtual void tun_error(const Error::Type fatal_err, const std::string &err_text)=0
virtual void tun_event(ClientEvent::Base::Ptr ev)
virtual void tun_connected()=0
virtual void tun_pre_tun_config()=0
virtual void tun_recv(BufferAllocated &buf)=0
bool add_bypass_routes_on_establish
std::unique_ptr< PacketFrom > SPtr
#define OPENVPN_LOG_TUN(x)