/* This file is part of DarkFi (https://dark.fi)
*
* Copyright (C) 2020-2025 Dyne.org foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
use structopt::StructOpt;
#[derive(Clone, Debug)]
pub struct DhtSettings {
/// Number of nodes in a bucket
pub k: usize,
/// Number of lookup requests in a burst
pub alpha: usize,
/// Maximum number of parallel lookup requests
pub concurrency: usize,
/// Timeout in seconds
pub timeout: u64,
/// Timeout in seconds for inbound connections
pub inbound_timeout: u64,
}
impl Default for DhtSettings {
fn default() -> Self {
Self { k: 16, alpha: 4, concurrency: 10, timeout: 5, inbound_timeout: 30 }
}
}
#[derive(Clone, Debug, serde::Deserialize, structopt::StructOpt, structopt_toml::StructOptToml)]
#[structopt()]
#[serde(rename = "dht")]
pub struct DhtSettingsOpt {
/// Number of nodes in a DHT bucket
#[structopt(long)]
pub dht_k: Option,
/// Number of DHT lookup requests in a burst
#[structopt(long)]
pub dht_alpha: Option,
/// Maximum number of parallel DHT lookup requests
#[structopt(long)]
pub dht_concurrency: Option,
/// Timeout in seconds
#[structopt(long)]
pub dht_timeout: Option,
/// Timeout in seconds for inbound connections
#[structopt(long)]
pub dht_inbound_timeout: Option,
}
impl From for DhtSettings {
fn from(opt: DhtSettingsOpt) -> Self {
let def = DhtSettings::default();
Self {
k: opt.dht_k.unwrap_or(def.k),
alpha: opt.dht_alpha.unwrap_or(def.alpha),
concurrency: opt.dht_concurrency.unwrap_or(def.concurrency),
timeout: opt.dht_timeout.unwrap_or(def.timeout),
inbound_timeout: opt.dht_inbound_timeout.unwrap_or(def.inbound_timeout),
}
}
}