1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use crate::args::Args; use crate::errors::*; use crate::utils; use libtor::{HiddenServiceVersion, Tor, TorAddress, TorFlag}; use std::path::PathBuf; pub fn run(args: Args, data_dir: PathBuf) -> Result<()> { let bind_addr = args.bind_addr()?; let hs_path = utils::path_to_string(data_dir.join("hs"))?; let data_dir = utils::path_to_string(data_dir)?; Tor::new() .flag(TorFlag::DataDirectory(data_dir)) .flag(TorFlag::SocksPort(0)) .flag(TorFlag::HiddenServiceDir(hs_path)) .flag(TorFlag::HiddenServiceVersion(HiddenServiceVersion::V3)) .flag(TorFlag::HiddenServicePort( TorAddress::Port(80), Some(bind_addr).into(), )) .start() .context("Failed to start tor")?; warn!("Tor thread has terminated"); Ok(()) }