aboutsummaryrefslogtreecommitdiffstats
path: root/src/bin
diff options
context:
space:
mode:
authormurilo ijanc2026-03-25 22:19:39 -0300
committermurilo ijanc2026-03-25 22:19:39 -0300
commit4214189961d59b9de15e221a9c4b229c0d646e78 (patch)
treec96c719d8e861f7f4c726eee7818deb673d587b2 /src/bin
parent24c3402c9d27fc26bd3afe8c05276f52338514f8 (diff)
downloadtesseras-paste-4214189961d59b9de15e221a9c4b229c0d646e78.tar.gz
Add automatic re-join and -v flag for verbose logging
When the routing table drops to zero peers, the daemon now re-joins bootstrap nodes every 60s, unbanning their addresses first so replies are not silently discarded. Both tp and tpd accept -v for debug-level output without needing RUST_LOG environment variable.
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/tp.rs16
-rw-r--r--src/bin/tpd.rs24
2 files changed, 29 insertions, 11 deletions
diff --git a/src/bin/tp.rs b/src/bin/tp.rs
index 5c4c473..fbfc872 100644
--- a/src/bin/tp.rs
+++ b/src/bin/tp.rs
@@ -18,7 +18,7 @@ fn default_socket() -> PathBuf {
}
fn usage() {
- eprintln!("usage: tp [-s sock] <command> [args]");
+ eprintln!("usage: tp [-s sock] [-v] <command> [args]");
eprintln!();
eprintln!("commands:");
eprintln!(" put [-t ttl] [-p] read stdin, store paste");
@@ -30,6 +30,7 @@ fn usage() {
eprintln!(" status show daemon status");
eprintln!();
eprintln!(" -s sock Unix socket path");
+ eprintln!(" -v verbose output");
eprintln!(" -t ttl time-to-live (e.g. 24h 30m 3600)");
}
@@ -52,6 +53,7 @@ fn main() {
let args: Vec<String> = std::env::args().collect();
let mut sock_path = default_socket();
+ let mut verbose = false;
let mut cmd_start = 1;
// Parse global options before command
@@ -67,6 +69,10 @@ fn main() {
});
cmd_start = i + 1;
}
+ "-v" => {
+ verbose = true;
+ cmd_start = i + 1;
+ }
"-h" | "--help" => {
usage();
return;
@@ -177,6 +183,11 @@ fn main() {
sandbox::unveil_lock();
sandbox::do_pledge("stdio unix rpath");
+ if verbose {
+ eprintln!("socket: {}", sock_path.display());
+ eprintln!(">> {}", request.trim());
+ }
+
let stream = match UnixStream::connect(&sock_path) {
Ok(s) => s,
Err(e) => {
@@ -202,6 +213,9 @@ fn main() {
Ok(l) => l,
Err(_) => break,
};
+ if verbose {
+ eprintln!("<< {}", line);
+ }
if let Some(data) = line.strip_prefix("OK ") {
if is_get {
// Decode base58 → raw bytes → stdout
diff --git a/src/bin/tpd.rs b/src/bin/tpd.rs
index e1ebc7b..c18d88b 100644
--- a/src/bin/tpd.rs
+++ b/src/bin/tpd.rs
@@ -49,25 +49,18 @@ fn usage() {
eprintln!(" -g global NAT (public server)");
eprintln!(" -n no auto-bootstrap (skip DNS SRV)");
eprintln!(" -b host:port bootstrap peer (repeatable)");
+ eprintln!(" -v verbose (debug logging)");
eprintln!(" -h show this help");
}
fn main() {
- env_logger::Builder::from_env(
- env_logger::Env::default().default_filter_or("info"),
- )
- .format(|buf, record| {
- use std::io::Write;
- writeln!(buf, "[{}]: {}", record.level(), record.args())
- })
- .init();
-
let mut port: u16 = 0;
let mut dir = default_dir();
let mut sock: Option<PathBuf> = None;
let mut http_port: Option<u16> = None;
let mut global = false;
let mut no_auto_bootstrap = false;
+ let mut verbose = false;
let mut bootstrap: Vec<String> = Vec::new();
let args: Vec<String> = std::env::args().collect();
@@ -111,6 +104,7 @@ fn main() {
}
"-g" => global = true,
"-n" => no_auto_bootstrap = true,
+ "-v" => verbose = true,
"-b" => {
i += 1;
if let Some(addr) = args.get(i) {
@@ -133,6 +127,16 @@ fn main() {
i += 1;
}
+ let default_level = if verbose { "debug" } else { "info" };
+ env_logger::Builder::from_env(
+ env_logger::Env::default().default_filter_or(default_level),
+ )
+ .format(|buf, record| {
+ use std::io::Write;
+ writeln!(buf, "[{}]: {}", record.level(), record.args())
+ })
+ .init();
+
let sock_path = sock.unwrap_or_else(|| dir.join("daemon.sock"));
// Ensure directories exist
@@ -288,7 +292,7 @@ fn main() {
})
});
- daemon::run_daemon(&mut node, &store, &rx, &shutdown);
+ daemon::run_daemon(&mut node, &store, &rx, &shutdown, &bootstrap);
let _ = std::fs::remove_file(&sock_path);
let _ = handle.join();