15#include <sshpp/config.hpp>
19#include <sshpp/export.hpp>
52 std::uint64_t connections = 0;
53 std::uint64_t bytes_out = 0;
54 std::uint64_t bytes_in = 0;
55 std::uint64_t rejected = 0;
79 explicit operator
bool() const noexcept {
return core_ !=
nullptr; }
80 std::uint16_t
bound_port() const noexcept {
return bound_port_; }
88 : core_(
std::move(core)), bind_address_(
std::move(bind_address)), bound_port_(bound_port) {}
90 detail::SessionCorePtr core_;
91 std::string bind_address_;
92 std::uint16_t bound_port_ = 0;
93 bool cancelled_ =
false;
103 std::size_t buffer_size = 64 * 1024;
114 void stop() noexcept;
115 bool running() const noexcept {
return running_.load(); }
120 Result<
void> try_run_until_stopped();
123 Result<
void> bind_listener();
125 void pump_one_connection(
int client_fd);
130 std::uint16_t bound_port_ = 0;
131 std::atomic<
bool> running_{
false};
132 std::atomic<bool> stop_requested_{
false};
134 mutable std::mutex stats_mutex_;
142 std::string bind_address =
"localhost";
143 std::uint16_t remote_port = 0;
156 void stop() noexcept;
157 std::uint16_t remote_port() const noexcept {
return listener_.bound_port(); }
167 std::atomic<
bool> stop_requested_{
false};
169 mutable std::mutex stats_mutex_;
173#if SSHPP_HAS_CONNECTOR
176class SSHPP_API Connector {
178 explicit Connector(Session&);
180 Connector(Connector&&) noexcept;
181 Connector& operator=(Connector&&) noexcept;
182 Connector(const Connector&) = delete;
184 Result<
void> try_set_in_channel(Channel&, Stream = Stream::stdout_);
185 Result<
void> try_set_out_channel(Channel&, Stream = Stream::stdout_);
186 Result<
void> try_set_in_fd(
int) noexcept;
187 Result<
void> try_set_out_fd(
int) noexcept;
189 native_connector native_handle() const noexcept {
return native_; }
211 void stop() noexcept;
212 bool finished() const noexcept {
return finished_.load(); }
213 std::pair<std::uint64_t, std::uint64_t> byte_counts() const noexcept;
218 std::
size_t buffer_size_;
219 std::atomic<
bool> stop_requested_{
false};
220 std::atomic<bool> finished_{
false};
221 mutable std::mutex stats_mutex_;
244 bool trusted =
false;
258 void stop() noexcept;
266 std::atomic<
bool> stop_requested_{
false};
284 bool allow_socks4 =
false;
285 std::size_t max_connections = 128;
286 std::size_t buffer_size = 64 * 1024;
299 void stop() noexcept;
300 bool running() const noexcept {
return running_.load(); }
305 Result<
void> bind_listener();
307 void serve_one_connection(
int client_fd);
312 std::uint16_t bound_port_ = 0;
313 std::atomic<
bool> running_{
false};
314 std::atomic<bool> stop_requested_{
false};
316 mutable std::mutex stats_mutex_;
Definition forwarding.hpp:202
BidirectionalPump & operator=(const BidirectionalPump &)=delete
BidirectionalPump(const BidirectionalPump &)=delete
Definition channel.hpp:36
Definition forwarding.hpp:98
LocalForward(const LocalForward &)=delete
LocalForward & operator=(const LocalForward &)=delete
Definition forwarding.hpp:66
RemoteForwardListener()=default
std::uint16_t bound_port() const noexcept
Definition forwarding.hpp:80
ssh -R equivalent: accept loop that connects each inbound channel to a local endpoint.
Definition forwarding.hpp:139
RemoteForward & operator=(const RemoteForward &)=delete
RemoteForward(const RemoteForward &)=delete
Definition session.hpp:41
Definition forwarding.hpp:280
SocksProxy & operator=(const SocksProxy &)=delete
TcpEndpoint local_endpoint() const noexcept
Definition forwarding.hpp:301
SocksProxy(const SocksProxy &)=delete
Definition forwarding.hpp:239
std::shared_ptr< SessionCore > SessionCorePtr
Definition session_core.hpp:43
SSHPP_INLINE Result< Channel > open_direct(Session &session, const ForwardTarget &remote, TcpEndpoint origin)
Definition forwarding.ipp:187
std::variant< TcpEndpoint, UnixEndpoint > ForwardTarget
Definition forwarding.hpp:44
::ssh_connector_struct * native_connector
Definition native_fwd.hpp:35
Definition forwarding.hpp:51
ssh -R originator/listener primitive: server listens, hands us inbound channels.
Definition forwarding.hpp:59
TcpEndpoint originator
Attacker-controlled: the server reports this, never use it for authorization.
Definition forwarding.hpp:63
std::uint16_t bound_port
Definition forwarding.hpp:61
Channel channel
Definition forwarding.hpp:60
Definition forwarding.hpp:100
ForwardTarget target
Definition forwarding.hpp:102
std::function< void(const ErrorInfo &)> on_error
Definition forwarding.hpp:105
std::function< bool(const TcpEndpoint &peer)> accept_filter
Definition forwarding.hpp:104
Definition forwarding.hpp:141
std::function< bool(const TcpEndpoint &originator)> accept_filter
Definition forwarding.hpp:145
ForwardTarget local_target
Definition forwarding.hpp:144
std::function< void(const ErrorInfo &)> on_error
Definition forwarding.hpp:146
Definition forwarding.hpp:282
std::function< void(const ErrorInfo &)> on_error
Definition forwarding.hpp:289
std::function< bool(const ForwardTarget &)> allow
Called with the requested destination; return false to refuse.
Definition forwarding.hpp:288
Definition forwarding.hpp:37
std::string host
Definition forwarding.hpp:38
std::uint16_t port
Definition forwarding.hpp:39
Definition forwarding.hpp:42
std::string path
Definition forwarding.hpp:42
Definition forwarding.hpp:241
X11Request request
Definition forwarding.hpp:242
ForwardTarget display_target
Definition forwarding.hpp:243
Definition forwarding.hpp:227
std::string auth_cookie
Definition forwarding.hpp:230
std::string auth_protocol
Definition forwarding.hpp:229
std::uint32_t screen_number
Definition forwarding.hpp:231
bool single_connection
Definition forwarding.hpp:228