14#ifndef OPENVPN_TUN_MAC_CLIENT_TUNCLI_H
15#define OPENVPN_TUN_MAC_CLIENT_TUNCLI_H
43 typedef std::unique_ptr<PacketFrom>
SPtr;
48template <
typename ReadHandler,
typename TunPersist>
49class Tun :
public TunIO<ReadHandler, PacketFrom, TunWrapAsioStream<TunPersist>>
57 const std::string &
name,
73typedef openvpn_io::posix::stream_descriptor
TUNStream;
121#if defined(MAC_TUNTAP_FALLBACK)
151 OPENVPN_LOG(
"TunPersist: long-term session scope");
156 OPENVPN_LOG(
"TunPersist: short-term connection scope");
214 std::ostringstream
os;
227 OPENVPN_LOG(
"TunPersist: saving tun context:" << std::endl
247 catch (
const std::exception &e)
276 if (
state->vpn_ip4_addr.specified())
277 return state->vpn_ip4_addr.to_string();
284 if (
state->vpn_ip6_addr.specified())
285 return state->vpn_ip6_addr.to_string();
292 if (
state->vpn_ip4_gw.specified())
293 return state->vpn_ip4_gw.to_string();
300 if (
state->vpn_ip6_gw.specified())
301 return state->vpn_ip6_gw.to_string();
335 [self =
Ptr(
this), opt, &cli]
339 self->tun_start(opt, cli, c);
344 Client(openvpn_io::io_context &io_context_arg,
358 return impl->write(buf);
369 const openvpn_io::error_code *error)
#define OPENVPN_ASYNC_HANDLER
bool code_defined() 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.
std::string to_string() const
Converts the tunnel configuration to a human-readable string representation.
TunWrapAsioStream< TunPersist > * stream
TunClient::Ptr new_tun_client_obj(openvpn_io::io_context &io_context, TunClientParent &parent, TransportClient *transcli) override
bool layer_2_supported() const override
TunBuilderSetup::Base::Ptr new_setup_obj()
bool supports_epoch_data() override
TunBuilderSetup::Factory::Ptr tun_setup_factory
TunPersist::Ptr tun_persist
void finalize(const bool disconnected) override
RCPtr< ClientConfig > Ptr
bool tun_send(BufferAllocated &buf) override
std::string vpn_ip4() const override
TunProp::State::Ptr state
void tun_start(const OptionList &opt, TransportClient &transcli, CryptoDCSettings &) override
std::string vpn_ip6() const override
void tun_read_handler(PacketFrom::SPtr &pfp)
TunBuilderSetup::Base::Ptr tun_setup
void apply_push_update(const OptionList &opt, TransportClient &cli) override
Notifies tun client about received PUSH_UPDATE control channel message.
Tun< Client *, TunPersist > TunImpl
Client(openvpn_io::io_context &io_context_arg, ClientConfig *config_arg, TunClientParent &parent_arg)
std::string vpn_gw6() const override
openvpn_io::io_context & io_context
std::string tun_name() const override
int vpn_mtu() const override
std::string vpn_gw4() const override
void tun_error_handler(const Error::Type errtype, const openvpn_io::error_code *error)
void set_disconnect() override
TunPersist::Ptr tun_persist
TunIO< ReadHandler, PacketFrom, TunWrapAsioStream< TunPersist > > Base
Tun(const typename TunPersist::Ptr &tun_persist, const std::string &name, const bool retain_stream, const bool tun_prefix, ReadHandler read_handler, const Frame::Ptr &frame, const SessionStats::Ptr &stats)
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_EXCEPTION(C)
#define OPENVPN_LOG(args)
#define OPENVPN_LOG_STRING(str)
ScopedAsioStream< TUNStream > ScopedTUNStream
openvpn_io::posix::stream_descriptor TUNStream
TunPersistTemplate< ScopedTUNStream > 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_connected()=0
virtual void tun_pre_tun_config()=0
virtual void tun_recv(BufferAllocated &buf)=0
std::unique_ptr< PacketFrom > SPtr