diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2023-09-18 13:32:07 +0100 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2023-09-18 13:37:06 +0100 |
commit | 40bf8fb6f9c6b76b3119709f06959a1b1e35dd28 (patch) | |
tree | 9d1b99faedb6b1176e7187eaecc332af4cd3c237 | |
parent | 286371d9a1c4e79195b6791827eb52a6d0fcda8a (diff) | |
download | arti-40bf8fb6f9c6b76b3119709f06959a1b1e35dd28.tar.gz arti-40bf8fb6f9c6b76b3119709f06959a1b1e35dd28.zip |
tor-hsservice: ipt mgr: Instruct Establisher to start accepting
-rw-r--r-- | crates/tor-hsservice/src/ipt_mgr.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/crates/tor-hsservice/src/ipt_mgr.rs b/crates/tor-hsservice/src/ipt_mgr.rs index 7ba842482..c1ab1944e 100644 --- a/crates/tor-hsservice/src/ipt_mgr.rs +++ b/crates/tor-hsservice/src/ipt_mgr.rs @@ -853,7 +853,9 @@ impl<R: Runtime, M: Mockable<R>> IptManager<R, M> { *publish_set = if let Some(lifetime) = publish_lifetime { let selected = self.publish_set_select(); - // TODO HSS tell all the being-published IPTs to start accepting introductions + for ipt in &selected { + self.state.mockable.start_accepting(&ipt.establisher); + } Some(Self::make_publish_set(selected, now, lifetime)?) } else { None @@ -1131,6 +1133,9 @@ pub(crate) trait Mockable<R>: Debug + Send + Sync + Sized + 'static { imm: &Immutable<R>, params: IptParameters, ) -> Result<(Self::IptEstablisher, watch::Receiver<IptStatus>), FatalError>; + + /// Call `IptEstablisher::start_accepting` + fn start_accepting(&self, establisher: &ErasedIptEstablisher); } impl<R: Runtime> Mockable<R> for Real<R> { @@ -1151,6 +1156,12 @@ impl<R: Runtime> Mockable<R> for Real<R> { ) -> Result<(Self::IptEstablisher, watch::Receiver<IptStatus>), FatalError> { IptEstablisher::new(imm.runtime.clone(), params, self.circ_pool.clone()) } + + fn start_accepting(&self, establisher: &ErasedIptEstablisher) { + let establisher: &IptEstablisher = <dyn Any>::downcast_ref(establisher) + .expect("upcast failure, ErasedIptEstablisher is not IptEstablisher!"); + establisher.start_accepting(); + } } /// Joins two iterators, by keys, one of which is a subset of the other |