Federated relay tier: peer flooding, per-member isolation, registry admission and relay discovery

This commit is contained in:
George Coles
2026-09-15 06:49:43 -04:00
parent d30e612be8
commit 2c97fd523f
11 changed files with 759 additions and 177 deletions
+33 -2
View File
@@ -70,6 +70,16 @@ enum Command {
listen: String,
#[arg(long, default_value_t = relay::DEFAULT_CAPACITY)]
capacity: usize,
#[arg(long = "peer")]
peers: Vec<String>,
#[arg(long)]
url: Option<String>,
#[arg(long)]
registry: Option<String>,
#[arg(long)]
ma_key: Option<String>,
#[arg(long, default_value_t = 3)]
max_hops: usize,
},
Status,
Member {
@@ -147,6 +157,10 @@ enum RegistryCommand {
id: String,
},
List,
SetRelays {
#[arg(required = true)]
relays: Vec<String>,
},
Show,
Serve {
#[arg(long, default_value = "127.0.0.1:7800")]
@@ -231,10 +245,26 @@ async fn main() -> Result<()> {
println!("control API POST http://{}/v1/local/query", handle.addr);
tokio::signal::ctrl_c().await?;
}
Command::Relay { listen, capacity } => {
Command::Relay {
listen,
capacity,
peers,
url,
registry,
ma_key,
max_hops,
} => {
let options = relay::RelayOptions {
capacity,
peers,
url,
registry,
ma_key,
max_hops,
};
let (listener, addr) = relay::bind(&listen).await?;
println!("relay listening on http://{addr} (capacity {capacity})");
relay::run(listener, capacity).await?;
relay::run(listener, options).await?;
}
Command::Status => commands::status(&cli.config).await?,
Command::Member { command } => match command {
@@ -271,6 +301,7 @@ async fn main() -> Result<()> {
}
RegistryCommand::Remove { id } => commands::registry_remove(&dir, &id)?,
RegistryCommand::List => commands::registry_list(&dir)?,
RegistryCommand::SetRelays { relays } => commands::registry_set_relays(&dir, &relays)?,
RegistryCommand::Show => commands::registry_show(&dir)?,
RegistryCommand::Serve { listen } => commands::registry_serve(&dir, &listen).await?,
},