diff --git a/src/net/transport/mod.rs b/src/net/transport/mod.rs index 127fcfa2b..182e14eb1 100644 --- a/src/net/transport/mod.rs +++ b/src/net/transport/mod.rs @@ -375,8 +375,12 @@ impl Listener { } } - pub fn endpoint(&self) -> &Url { - &self.endpoint + pub async fn endpoint(&self) -> Url { + match &self.variant { + #[cfg(feature = "p2p-tor")] + ListenerVariant::Tor(listener) => listener.endpoint.lock().await.clone().unwrap(), + _ => self.endpoint.clone(), + } } } diff --git a/src/net/transport/tor.rs b/src/net/transport/tor.rs index 748e4d9ae..c244b516a 100644 --- a/src/net/transport/tor.rs +++ b/src/net/transport/tor.rs @@ -154,12 +154,13 @@ impl TorDialer { #[derive(Clone, Debug)] pub struct TorListener { datastore: Option, + pub endpoint: Arc>>, } impl TorListener { /// Instantiate a new [`TorListener`] pub async fn new(datastore: Option) -> io::Result { - Ok(Self { datastore }) + Ok(Self { datastore, endpoint: Arc::new(Mutex::new(None)) }) } /// Internal listen function @@ -223,6 +224,10 @@ impl TorListener { onion_service.onion_name().unwrap(), port, ); + *self.endpoint.lock().await = Some( + Url::parse(&format!("tor://{}:{}", onion_service.onion_name().unwrap(), port)).unwrap(), + ); + Ok(TorListenerIntern { port, _onion_service: onion_service,