diff --git a/easytier/src/common/global_ctx.rs b/easytier/src/common/global_ctx.rs index d574311..3e5c5d5 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 f4ddeff..721b476 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 00dc688..c58ca02 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?; }