use std::net::{IpAddr, Ipv4Addr, SocketAddr};
use crate::{HostAddress, HostSocketParams, JumpHostAuthParams};
const LOCAL_OS_CHOSEN_PORT: u16 = 0;
#[derive(Clone, Debug)]
pub struct SshTunnelParams<'tunnel> {
pub jump_host: HostSocketParams<'tunnel>,
pub jump_host_auth_params: JumpHostAuthParams<'tunnel>,
pub local_socket: SocketAddr,
pub target_socket: HostSocketParams<'tunnel>,
}
impl<'tunnel> SshTunnelParams<'tunnel> {
pub fn new(
jump_host: HostAddress<'tunnel>,
jump_host_auth_params: JumpHostAuthParams<'tunnel>,
target_socket: HostSocketParams<'tunnel>,
) -> Self {
let local_socket = SocketAddr::new(
IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)),
LOCAL_OS_CHOSEN_PORT,
);
let jump_host_params: HostSocketParams = HostSocketParams {
address: jump_host,
port: 22,
};
SshTunnelParams {
jump_host: jump_host_params,
jump_host_auth_params,
local_socket,
target_socket,
}
}
pub fn with_local_ip(mut self, ip: IpAddr) -> Self {
self.local_socket.set_ip(ip);
self
}
pub fn with_local_port(mut self, port: u16) -> Self {
self.local_socket.set_port(port);
self
}
pub fn with_jump_host_port(mut self, port: u16) -> Self {
self.jump_host.port = port;
self
}
}