tor_hsservice/pow/
v1_stub.rs

1//! Stub; `v1` proof of work scheme has been disabled at compile time
2
3use std::marker::PhantomData;
4use std::sync::Arc;
5
6use futures::channel::mpsc;
7use serde::{Deserialize, Serialize};
8use tor_hscrypto::time::TimePeriod;
9use tor_keymgr::KeyMgr;
10use tor_persist::{
11    hsnickname::HsNickname,
12    state_dir::{InstanceRawSubdir, StorageHandle},
13};
14use tor_rtcompat::Runtime;
15
16use crate::{RendRequest, StartupError};
17
18use super::NewPowManager;
19
20#[derive(Clone)]
21/// Stub for PoW management code, does nothing.
22pub(crate) struct PowManager<R> {
23    /// We hold this here so that the channel isn't closed
24    publisher_update_tx: mpsc::Sender<TimePeriod>,
25    /// PhantomData since our stub doesn't actually care about what runtime we use.
26    runtime: PhantomData<R>,
27}
28
29#[derive(Serialize, Deserialize, Debug)]
30pub(crate) struct PowManagerStateRecord;
31
32impl<R: Runtime> PowManager<R> {
33    pub(crate) fn new(
34        _runtime: R,
35        _nickname: HsNickname,
36        _instance_dir: InstanceRawSubdir,
37        _keymgr: Arc<KeyMgr>,
38        _storage_handle: StorageHandle<PowManagerStateRecord>,
39    ) -> Result<NewPowManager<R>, StartupError> {
40        let (rend_req_tx, rend_req_rx) = super::make_rend_queue();
41        let (publisher_update_tx, publisher_update_rx) = mpsc::channel(1);
42
43        Ok(NewPowManager {
44            pow_manager: Arc::new(PowManager {
45                publisher_update_tx,
46                runtime: PhantomData,
47            }),
48            rend_req_tx,
49            rend_req_rx: Box::pin(rend_req_rx),
50            publisher_update_rx,
51        })
52    }
53
54    pub(crate) fn launch(self: Arc<Self>) -> Result<(), StartupError> {
55        Ok(())
56    }
57}