deaddrop-app 2.6.0

DeadDrop CLI, daemon, relay, simulator, and examples
Documentation
use clap::Parser;
use deaddrop_core::config::Config;
use deaddrop_net::Node;
use std::net::SocketAddr;
use std::path::PathBuf;

#[derive(Parser)]
struct Args {
    #[arg(long, env = "DEADDROP_HOME")]
    data_dir: Option<PathBuf>,
    #[arg(long, default_value = "0.0.0.0:7947")]
    listen: SocketAddr,
    #[arg(long = "peer")]
    peers: Vec<SocketAddr>,
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    #[cfg(unix)]
    unsafe {
        libc::signal(libc::SIGHUP, libc::SIG_IGN);
    }
    tracing_subscriber::fmt().init();
    let args = Args::parse();
    let dir = args
        .data_dir
        .unwrap_or_else(|| std::env::temp_dir().join("deaddrop"));
    std::fs::create_dir_all(&dir)?;
    let node = Node::open(&dir, Config::load(&dir.join("deaddrop.toml"))?)?;
    println!(
        "dd-daemon {} TCP {}",
        node.identity.peer_id.short(),
        args.listen
    );
    node.serve(args.listen, args.peers).await?;
    Ok(())
}