more refactor
This commit is contained in:
@@ -7,7 +7,7 @@ use routing_table::*;
|
||||
|
||||
#[derive(Default, Debug)]
|
||||
struct DebugCache {
|
||||
imported_routes: Vec<TypedKeySet>,
|
||||
imported_routes: Vec<RouteId>,
|
||||
}
|
||||
|
||||
static DEBUG_CACHE: Mutex<DebugCache> = Mutex::new(DebugCache {
|
||||
@@ -30,12 +30,12 @@ fn get_string(text: &str) -> Option<String> {
|
||||
Some(text.to_owned())
|
||||
}
|
||||
|
||||
fn get_route_id(rss: RouteSpecStore) -> impl Fn(&str) -> Option<PublicKey> {
|
||||
fn get_route_id(rss: RouteSpecStore) -> impl Fn(&str) -> Option<RouteId> {
|
||||
return move |text: &str| {
|
||||
if text.is_empty() {
|
||||
return None;
|
||||
}
|
||||
match PublicKey::from_str(text).ok() {
|
||||
match RouteId::from_str(text).ok() {
|
||||
Some(key) => {
|
||||
let routes = rss.list_allocated_routes(|k, _| Some(*k));
|
||||
if routes.contains(&key) {
|
||||
@@ -128,38 +128,20 @@ fn get_destination(routing_table: RoutingTable) -> impl FnOnce(&str) -> Option<D
|
||||
}
|
||||
if &text[0..1] == "#" {
|
||||
// Private route
|
||||
let mut text = &text[1..];
|
||||
let opt_crypto_kind = if text.len() > 5 {
|
||||
let fcc = &text[0..4];
|
||||
if &text[4..5] != ":" {
|
||||
return None;
|
||||
}
|
||||
let ck = match FourCC::from_str(fcc) {
|
||||
Ok(v) => v,
|
||||
Err(_) => {
|
||||
return None;
|
||||
}
|
||||
};
|
||||
text = &text[5..];
|
||||
Some(ck)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let text = &text[1..];
|
||||
let n = get_number(text)?;
|
||||
let mut dc = DEBUG_CACHE.lock();
|
||||
let pr_pubkey = match opt_crypto_kind {
|
||||
Some(ck) => dc.imported_routes.get(n)?.get(ck)?,
|
||||
None => dc.imported_routes.get(n)?.best()?,
|
||||
};
|
||||
let private_route_id = dc.imported_routes.get(n)?.clone();
|
||||
|
||||
let rss = routing_table.route_spec_store();
|
||||
let Some(private_route) = rss.get_remote_private_route(&pr_pubkey.key) else {
|
||||
if !rss.is_valid_remote_private_route(&private_route_id) {
|
||||
// Remove imported route
|
||||
dc.imported_routes.remove(n);
|
||||
info!("removed dead imported route {}", n);
|
||||
return None;
|
||||
};
|
||||
Some(Destination::private_route(
|
||||
private_route,
|
||||
private_route_id,
|
||||
ss.unwrap_or(SafetySelection::Unsafe(Sequencing::default())),
|
||||
))
|
||||
} else {
|
||||
@@ -381,12 +363,19 @@ impl VeilidAPI {
|
||||
|
||||
async fn debug_entry(&self, args: String) -> Result<String, VeilidAPIError> {
|
||||
let args: Vec<String> = args.split_whitespace().map(|s| s.to_owned()).collect();
|
||||
let routing_table = self.network_manager()?.routing_table();
|
||||
|
||||
let node_id = get_debug_argument_at(&args, 0, "debug_entry", "node_id", get_typed_key)?;
|
||||
let node_ref = get_debug_argument_at(
|
||||
&args,
|
||||
0,
|
||||
"debug_entry",
|
||||
"node_id",
|
||||
get_node_ref(routing_table),
|
||||
)?;
|
||||
|
||||
// Dump routing table entry
|
||||
let routing_table = self.network_manager()?.routing_table();
|
||||
Ok(routing_table.debug_info_entry(node_id))
|
||||
Ok(routing_table.debug_info_entry(node_ref))
|
||||
}
|
||||
|
||||
async fn debug_nodeinfo(&self, _args: String) -> Result<String, VeilidAPIError> {
|
||||
@@ -655,10 +644,16 @@ impl VeilidAPI {
|
||||
let routing_table = netman.routing_table();
|
||||
let rss = routing_table.route_spec_store();
|
||||
|
||||
let route_id = get_debug_argument_at(&args, 1, "debug_route", "route_id", get_typed_key)?;
|
||||
let route_id = get_debug_argument_at(
|
||||
&args,
|
||||
1,
|
||||
"debug_route",
|
||||
"route_id",
|
||||
get_route_id(rss.clone()),
|
||||
)?;
|
||||
|
||||
// Release route
|
||||
let out = match rss.release_route(&route_id) {
|
||||
let out = match rss.release_route(route_id) {
|
||||
true => "Released".to_owned(),
|
||||
false => "Route does not exist".to_owned(),
|
||||
};
|
||||
@@ -671,7 +666,13 @@ impl VeilidAPI {
|
||||
let routing_table = netman.routing_table();
|
||||
let rss = routing_table.route_spec_store();
|
||||
|
||||
let route_id = get_debug_argument_at(&args, 1, "debug_route", "route_id", get_typed_key)?;
|
||||
let route_id = get_debug_argument_at(
|
||||
&args,
|
||||
1,
|
||||
"debug_route",
|
||||
"route_id",
|
||||
get_route_id(rss.clone()),
|
||||
)?;
|
||||
let full = {
|
||||
if args.len() > 2 {
|
||||
let full_val = get_debug_argument_at(&args, 2, "debug_route", "full", get_string)?
|
||||
@@ -687,13 +688,13 @@ impl VeilidAPI {
|
||||
};
|
||||
|
||||
// Publish route
|
||||
let out = match rss.assemble_private_route(&route_id, Some(!full)) {
|
||||
Ok(private_route) => {
|
||||
let out = match rss.assemble_private_routes(&route_id, Some(!full)) {
|
||||
Ok(private_routes) => {
|
||||
if let Err(e) = rss.mark_route_published(&route_id, true) {
|
||||
return Ok(format!("Couldn't mark route published: {}", e));
|
||||
}
|
||||
// Convert to blob
|
||||
let blob_data = RouteSpecStore::private_route_to_blob(&private_route)
|
||||
let blob_data = RouteSpecStore::private_routes_to_blob(&private_routes)
|
||||
.map_err(VeilidAPIError::internal)?;
|
||||
let out = BASE64URL_NOPAD.encode(&blob_data);
|
||||
info!(
|
||||
@@ -717,7 +718,13 @@ impl VeilidAPI {
|
||||
let routing_table = netman.routing_table();
|
||||
let rss = routing_table.route_spec_store();
|
||||
|
||||
let route_id = get_debug_argument_at(&args, 1, "debug_route", "route_id", get_public_key)?;
|
||||
let route_id = get_debug_argument_at(
|
||||
&args,
|
||||
1,
|
||||
"debug_route",
|
||||
"route_id",
|
||||
get_route_id(rss.clone()),
|
||||
)?;
|
||||
|
||||
// Unpublish route
|
||||
let out = if let Err(e) = rss.mark_route_published(&route_id, false) {
|
||||
@@ -733,7 +740,13 @@ impl VeilidAPI {
|
||||
let routing_table = netman.routing_table();
|
||||
let rss = routing_table.route_spec_store();
|
||||
|
||||
let route_id = get_debug_argument_at(&args, 1, "debug_route", "route_id", get_public_key)?;
|
||||
let route_id = get_debug_argument_at(
|
||||
&args,
|
||||
1,
|
||||
"debug_route",
|
||||
"route_id",
|
||||
get_route_id(rss.clone()),
|
||||
)?;
|
||||
|
||||
match rss.debug_route(&route_id) {
|
||||
Some(s) => Ok(s),
|
||||
@@ -771,14 +784,14 @@ impl VeilidAPI {
|
||||
.decode(blob.as_bytes())
|
||||
.map_err(VeilidAPIError::generic)?;
|
||||
let rss = self.routing_table()?.route_spec_store();
|
||||
let pr_pubkey = rss
|
||||
let route_id = rss
|
||||
.import_remote_private_route(blob_dec)
|
||||
.map_err(VeilidAPIError::generic)?;
|
||||
|
||||
let mut dc = DEBUG_CACHE.lock();
|
||||
let n = dc.imported_routes.len();
|
||||
let out = format!("Private route #{} imported: {}", n, pr_pubkey);
|
||||
dc.imported_routes.push(pr_pubkey);
|
||||
let out = format!("Private route #{} imported: {}", n, route_id);
|
||||
dc.imported_routes.push(route_id);
|
||||
|
||||
return Ok(out);
|
||||
}
|
||||
@@ -789,10 +802,16 @@ impl VeilidAPI {
|
||||
let routing_table = netman.routing_table();
|
||||
let rss = routing_table.route_spec_store();
|
||||
|
||||
let route_id = get_debug_argument_at(&args, 1, "debug_route", "route_id", get_typed_key)?;
|
||||
let route_id = get_debug_argument_at(
|
||||
&args,
|
||||
1,
|
||||
"debug_route",
|
||||
"route_id",
|
||||
get_route_id(rss.clone()),
|
||||
)?;
|
||||
|
||||
let success = rss
|
||||
.test_route(&route_id)
|
||||
.test_route(route_id)
|
||||
.await
|
||||
.map_err(VeilidAPIError::internal)?;
|
||||
|
||||
|
Reference in New Issue
Block a user