aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2023-09-18 13:32:07 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2023-09-18 13:37:06 +0100
commit40bf8fb6f9c6b76b3119709f06959a1b1e35dd28 (patch)
tree9d1b99faedb6b1176e7187eaecc332af4cd3c237
parent286371d9a1c4e79195b6791827eb52a6d0fcda8a (diff)
downloadarti-40bf8fb6f9c6b76b3119709f06959a1b1e35dd28.tar.gz
arti-40bf8fb6f9c6b76b3119709f06959a1b1e35dd28.zip
tor-hsservice: ipt mgr: Instruct Establisher to start accepting
-rw-r--r--crates/tor-hsservice/src/ipt_mgr.rs13
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