14#ifndef OPENVPN_TUN_WIN_CLIENT_TUNCLI_H
15#define OPENVPN_TUN_WIN_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,
90 openvpn_io::post(
io_context, [self =
Ptr(
this), opt, &transcli]
94 self->tun_start(opt, transcli, c); });
144 std::ostringstream os;
145 auto os_print =
Cleanup([&os]()
154 if (
tun_persist->persist_tun_state(ts, {state, nullptr}))
155 OPENVPN_LOG(
"TunPersist: saving tun context:" << std::endl
159 tun_setup->set_service_fail_handler([self =
Ptr(
this)]()
187 catch (
const std::exception &e)
216 if (
state->vpn_ip4_addr.specified())
217 return state->vpn_ip4_addr.to_string();
224 if (
state->vpn_ip6_addr.specified())
225 return state->vpn_ip6_addr.to_string();
232 if (
state->vpn_ip4_gw.specified())
233 return state->vpn_ip4_gw.to_string();
240 if (
state->vpn_ip6_gw.specified())
241 return state->vpn_ip6_gw.to_string();
265 Client(openvpn_io::io_context &io_context_arg,
285 return impl->write(buf);
289#ifdef OPENVPN_DEBUG_TAPWIN
298#ifdef OPENVPN_DEBUG_TAPWIN
304 const openvpn_io::error_code *error)
333 return stream->native_handle();
356 catch (
const std::exception &e)
366 l2_timer.async_wait([self =
Ptr(
this)](
const openvpn_io::error_code &error)
369 if (!error && !self->halt)
370 self->layer_2_timer_callback(); });
383 std::ostringstream os;
396 catch (
const std::exception &e)
429 throw tun_win_error(
"unsupported tun driver");
#define OPENVPN_ASYNC_HANDLER
std::size_t expires_after(const Time::Duration &d)
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
TunWrapAsioStream< TunPersist > * stream
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)
TunClient::Ptr new_tun_client_obj(openvpn_io::io_context &io_context, TunClientParent &parent, TransportClient *transcli) override
TunWin::SetupBase::Ptr tun_setup
Frame::Context & frame_context
std::string tun_name() const override
TunProp::State::Ptr state
std::string vpn_ip6() const override
std::string vpn_ip4() const override
TunPersist::Ptr tun_persist
std::string vpn_gw6() const override
void apply_push_update(const OptionList &opt, TransportClient &transcli) override
Notifies tun client about received PUSH_UPDATE control channel message.
std::string vpn_gw4() const override
void layer_2_timer_callback()
void tun_read_handler(PacketFrom::SPtr &pfp)
void tap_process_logging()
std::unique_ptr< DHCPCapture > dhcp_capture
Client(openvpn_io::io_context &io_context_arg, ClientConfig *config_arg, TunClientParent &parent_arg)
Tun< Client *, TunPersist > TunImpl
void dhcp_inspect(Buffer &buf)
int vpn_mtu() const override
void layer_2_schedule_timer(const unsigned int seconds)
void tun_start(const OptionList &opt, TransportClient &transcli, CryptoDCSettings &) override
bool tun_send(BufferAllocated &buf) override
void set_disconnect() override
openvpn_io::io_context & io_context
void tun_error_handler(const Error::Type errtype, const openvpn_io::error_code *error)
TunIO< ReadHandler, PacketFrom, TunWrapAsioStream< TunPersist > > Base
Tun(const typename TunPersist::Ptr &tun_persist, const std::string &name, const bool retain_stream, ReadHandler read_handler, const Frame::Ptr &frame, const SessionStats::Ptr &stats)
#define OPENVPN_EXCEPTION(C)
#define OPENVPN_LOG(args)
#define OPENVPN_LOG_STRING(str)
void tap_process_logging(HANDLE th)
DNS utilities for Windows.
openvpn_io::windows::stream_handle TAPStream
TunPersistTemplate< ScopedTAPStream, TunPersistState< RingBuffer::Ptr > > TunPersist
bool defined(HANDLE handle)
std::wstring module_name()
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