From 29d8d4ba87478e31719b06cad8f09a8e277b129e Mon Sep 17 00:00:00 2001 From: "sijie.sun" Date: Sat, 11 May 2024 22:49:48 +0800 Subject: [PATCH] correctly handle listener add fail --- easytier/src/common/global_ctx.rs | 3 ++- easytier/src/easytier-core.rs | 7 +++++++ easytier/src/instance/listeners.rs | 9 +++++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/easytier/src/common/global_ctx.rs b/easytier/src/common/global_ctx.rs index d574311e..3e5c5d5f 100644 --- a/easytier/src/common/global_ctx.rs +++ b/easytier/src/common/global_ctx.rs @@ -27,7 +27,8 @@ pub enum GlobalCtxEvent { PeerConnRemoved(PeerConnInfo), ListenerAdded(url::Url), - ConnectionAccepted(String, String), // (local url, remote url) + ListenerAddFailed(url::Url, String), // (url, error message) + ConnectionAccepted(String, String), // (local url, remote url) ConnectionError(String, String, String), // (local url, remote url, error message) Connecting(url::Url), diff --git a/easytier/src/easytier-core.rs b/easytier/src/easytier-core.rs index f4ddeff9..721b4768 100644 --- a/easytier/src/easytier-core.rs +++ b/easytier/src/easytier-core.rs @@ -374,6 +374,13 @@ pub async fn async_main(cli: Cli) { )); } + GlobalCtxEvent::ListenerAddFailed(p, msg) => { + print_event(format!( + "listener add failed. listener: {}, msg: {}", + p, msg + )); + } + GlobalCtxEvent::ListenerAdded(p) => { if p.scheme() == "ring" { continue; diff --git a/easytier/src/instance/listeners.rs b/easytier/src/instance/listeners.rs index 00dc688d..c58ca02f 100644 --- a/easytier/src/instance/listeners.rs +++ b/easytier/src/instance/listeners.rs @@ -45,7 +45,7 @@ pub fn get_listener_by_url( Box::new(WSTunnelListener::new(l.clone())) } _ => { - unreachable!("unsupported listener uri"); + return Err(Error::InvalidUrl(l.to_string())); } }) } @@ -101,7 +101,12 @@ impl ListenerManage .await?; for l in self.global_ctx.config.get_listener_uris().iter() { - let lis = get_listener_by_url(l, self.global_ctx.clone())?; + let Ok(lis) = get_listener_by_url(l, self.global_ctx.clone()) else { + let msg = format!("failed to get listener by url: {}, maybe not supported", l); + self.global_ctx + .issue_event(GlobalCtxEvent::ListenerAddFailed(l.clone(), msg)); + continue; + }; self.add_listener(lis, true).await?; }