Compare commits

..

No commits in common. "3bb115bd2d727fb1f7eaa539ce6bc18a8a9ae935" and "90a8c11acb23acfbded723b393d6277cb148e611" have entirely different histories.

8 changed files with 20 additions and 60 deletions

View File

@ -48,8 +48,6 @@ pub(crate) struct ConnectArgs {
#[arg(long, help = "Same as the '--csd-wrapper' option in the openconnect command")] #[arg(long, help = "Same as the '--csd-wrapper' option in the openconnect command")]
csd_wrapper: Option<String>, csd_wrapper: Option<String>,
#[arg(long, default_value = "300", help = "Reconnection retry timeout in seconds")]
reconnect_timeout: u32,
#[arg(short, long, help = "Request MTU from server (legacy servers only)")] #[arg(short, long, help = "Request MTU from server (legacy servers only)")]
mtu: Option<u32>, mtu: Option<u32>,
#[arg(long, help = "Do not ask for IPv6 connectivity")] #[arg(long, help = "Do not ask for IPv6 connectivity")]
@ -219,7 +217,6 @@ impl<'a> ConnectHandler<'a> {
.user_agent(self.args.user_agent.clone()) .user_agent(self.args.user_agent.clone())
.csd_uid(csd_uid) .csd_uid(csd_uid)
.csd_wrapper(csd_wrapper) .csd_wrapper(csd_wrapper)
.reconnect_timeout(self.args.reconnect_timeout)
.mtu(mtu) .mtu(mtu)
.disable_ipv6(self.args.disable_ipv6) .disable_ipv6(self.args.disable_ipv6)
.build()?; .build()?;

View File

@ -38,11 +38,10 @@ impl VpnTaskContext {
let vpn = match Vpn::builder(req.gateway().server(), args.cookie()) let vpn = match Vpn::builder(req.gateway().server(), args.cookie())
.script(args.vpnc_script()) .script(args.vpnc_script())
.user_agent(args.user_agent()) .user_agent(args.user_agent())
.os(args.openconnect_os())
.csd_uid(args.csd_uid()) .csd_uid(args.csd_uid())
.csd_wrapper(args.csd_wrapper()) .csd_wrapper(args.csd_wrapper())
.reconnect_timeout(args.reconnect_timeout())
.mtu(args.mtu()) .mtu(args.mtu())
.os(args.openconnect_os())
.disable_ipv6(args.disable_ipv6()) .disable_ipv6(args.disable_ipv6())
.build() .build()
{ {

View File

@ -118,41 +118,28 @@ impl WsServer {
} }
pub async fn start(&self, shutdown_tx: mpsc::Sender<()>) { pub async fn start(&self, shutdown_tx: mpsc::Sender<()>) {
let listener = match self.start_tcp_server().await { if let Ok(listener) = TcpListener::bind("127.0.0.1:0").await {
Ok(listener) => listener, let local_addr = listener.local_addr().unwrap();
Err(err) => {
warn!("Failed to start WS server: {}", err);
let _ = shutdown_tx.send(()).await;
return;
},
};
tokio::select! { self.lock_file.lock(local_addr.port().to_string()).unwrap();
_ = watch_vpn_state(self.ctx.vpn_state_rx(), Arc::clone(&self.ctx)) => {
info!("VPN state watch task completed"); info!("WS server listening on port: {}", local_addr.port());
}
_ = start_server(listener, self.ctx.clone()) => { tokio::select! {
info!("WS server stopped"); _ = watch_vpn_state(self.ctx.vpn_state_rx(), Arc::clone(&self.ctx)) => {
} info!("VPN state watch task completed");
_ = self.cancel_token.cancelled() => { }
info!("WS server cancelled"); _ = start_server(listener, self.ctx.clone()) => {
info!("WS server stopped");
}
_ = self.cancel_token.cancelled() => {
info!("WS server cancelled");
}
} }
} }
let _ = shutdown_tx.send(()).await; let _ = shutdown_tx.send(()).await;
} }
async fn start_tcp_server(&self) -> anyhow::Result<TcpListener> {
let listener = TcpListener::bind("127.0.0.1:0").await?;
let local_addr = listener.local_addr()?;
let port = local_addr.port();
info!("WS server listening on port: {}", port);
self.lock_file.lock(port.to_string())?;
Ok(listener)
}
} }
async fn watch_vpn_state(mut vpn_state_rx: watch::Receiver<VpnState>, ctx: Arc<WsServerContext>) { async fn watch_vpn_state(mut vpn_state_rx: watch::Receiver<VpnState>, ctx: Arc<WsServerContext>) {

View File

@ -32,11 +32,10 @@ pub struct ConnectArgs {
cookie: String, cookie: String,
vpnc_script: Option<String>, vpnc_script: Option<String>,
user_agent: Option<String>, user_agent: Option<String>,
os: Option<ClientOs>,
csd_uid: u32, csd_uid: u32,
csd_wrapper: Option<String>, csd_wrapper: Option<String>,
reconnect_timeout: u32,
mtu: u32, mtu: u32,
os: Option<ClientOs>,
disable_ipv6: bool, disable_ipv6: bool,
} }
@ -49,7 +48,6 @@ impl ConnectArgs {
os: None, os: None,
csd_uid: 0, csd_uid: 0,
csd_wrapper: None, csd_wrapper: None,
reconnect_timeout: 300,
mtu: 0, mtu: 0,
disable_ipv6: false, disable_ipv6: false,
} }
@ -79,10 +77,6 @@ impl ConnectArgs {
self.csd_wrapper.clone() self.csd_wrapper.clone()
} }
pub fn reconnect_timeout(&self) -> u32 {
self.reconnect_timeout
}
pub fn mtu(&self) -> u32 { pub fn mtu(&self) -> u32 {
self.mtu self.mtu
} }
@ -131,11 +125,6 @@ impl ConnectRequest {
self self
} }
pub fn with_reconnect_timeout(mut self, reconnect_timeout: u32) -> Self {
self.args.reconnect_timeout = reconnect_timeout;
self
}
pub fn with_mtu(mut self, mtu: u32) -> Self { pub fn with_mtu(mut self, mtu: u32) -> Self {
self.args.mtu = mtu; self.args.mtu = mtu;
self self

View File

@ -19,7 +19,6 @@ pub(crate) struct ConnectOptions {
pub csd_uid: u32, pub csd_uid: u32,
pub csd_wrapper: *const c_char, pub csd_wrapper: *const c_char,
pub reconnect_timeout: u32,
pub mtu: u32, pub mtu: u32,
pub disable_ipv6: u32, pub disable_ipv6: u32,
} }

View File

@ -63,7 +63,6 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
INFO("OS: %s", options->os); INFO("OS: %s", options->os);
INFO("CSD_USER: %d", options->csd_uid); INFO("CSD_USER: %d", options->csd_uid);
INFO("CSD_WRAPPER: %s", options->csd_wrapper); INFO("CSD_WRAPPER: %s", options->csd_wrapper);
INFO("RECONNECT_TIMEOUT: %d", options->reconnect_timeout);
INFO("MTU: %d", options->mtu); INFO("MTU: %d", options->mtu);
INFO("DISABLE_IPV6: %d", options->disable_ipv6); INFO("DISABLE_IPV6: %d", options->disable_ipv6);
@ -138,7 +137,7 @@ int vpn_connect(const vpn_options *options, vpn_connected_callback callback)
while (1) while (1)
{ {
int ret = openconnect_mainloop(vpninfo, options->reconnect_timeout, 10); int ret = openconnect_mainloop(vpninfo, 300, 10);
if (ret) if (ret)
{ {

View File

@ -20,8 +20,8 @@ typedef struct vpn_options
const uid_t csd_uid; const uid_t csd_uid;
const char *csd_wrapper; const char *csd_wrapper;
const int reconnect_timeout;
const int mtu; const int mtu;
const int disable_ipv6; const int disable_ipv6;
} vpn_options; } vpn_options;

View File

@ -23,7 +23,6 @@ pub struct Vpn {
csd_uid: u32, csd_uid: u32,
csd_wrapper: Option<CString>, csd_wrapper: Option<CString>,
reconnect_timeout: u32,
mtu: u32, mtu: u32,
disable_ipv6: bool, disable_ipv6: bool,
@ -69,7 +68,6 @@ impl Vpn {
csd_uid: self.csd_uid, csd_uid: self.csd_uid,
csd_wrapper: Self::option_to_ptr(&self.csd_wrapper), csd_wrapper: Self::option_to_ptr(&self.csd_wrapper),
reconnect_timeout: self.reconnect_timeout,
mtu: self.mtu, mtu: self.mtu,
disable_ipv6: self.disable_ipv6 as u32, disable_ipv6: self.disable_ipv6 as u32,
} }
@ -113,7 +111,6 @@ pub struct VpnBuilder {
csd_uid: u32, csd_uid: u32,
csd_wrapper: Option<String>, csd_wrapper: Option<String>,
reconnect_timeout: u32,
mtu: u32, mtu: u32,
disable_ipv6: bool, disable_ipv6: bool,
} }
@ -131,7 +128,6 @@ impl VpnBuilder {
csd_uid: 0, csd_uid: 0,
csd_wrapper: None, csd_wrapper: None,
reconnect_timeout: 300,
mtu: 0, mtu: 0,
disable_ipv6: false, disable_ipv6: false,
} }
@ -162,11 +158,6 @@ impl VpnBuilder {
self self
} }
pub fn reconnect_timeout(mut self, reconnect_timeout: u32) -> Self {
self.reconnect_timeout = reconnect_timeout;
self
}
pub fn mtu(mut self, mtu: u32) -> Self { pub fn mtu(mut self, mtu: u32) -> Self {
self.mtu = mtu; self.mtu = mtu;
self self
@ -205,7 +196,6 @@ impl VpnBuilder {
csd_uid: self.csd_uid, csd_uid: self.csd_uid,
csd_wrapper: self.csd_wrapper.as_deref().map(Self::to_cstring), csd_wrapper: self.csd_wrapper.as_deref().map(Self::to_cstring),
reconnect_timeout: self.reconnect_timeout,
mtu: self.mtu, mtu: self.mtu,
disable_ipv6: self.disable_ipv6, disable_ipv6: self.disable_ipv6,