MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / list_forwards

Function list_forwards

crates/openshell-core/src/forward.rs:478–521  ·  view source on GitHub ↗

List all tracked forwards.

()

Source from the content-addressed store, hash-verified

476
477/// List all tracked forwards.
478pub fn list_forwards() -> Result<Vec<ForwardInfo>> {
479 let Ok(dir) = forward_pid_dir() else {
480 return Ok(Vec::new());
481 };
482
483 let Ok(entries) = std::fs::read_dir(&dir) else {
484 return Ok(Vec::new());
485 };
486
487 let mut forwards = Vec::new();
488 for entry in entries.flatten() {
489 let file_name = entry.file_name();
490 let file_name = file_name.to_string_lossy().to_string();
491 if let Some(stem) = file_name.strip_suffix(".pid")
492 // Parse "<sandbox>-<port>" — the port is the last segment after '-'.
493 && let Some(dash_pos) = stem.rfind('-')
494 && let Ok(port) = stem[dash_pos + 1..].parse::<u16>()
495 && let Some(record) = read_forward_pid(&stem[..dash_pos], port)
496 {
497 // Revalidate ownership so PID reuse does not look like a live forward.
498 let validated_alive =
499 expected_sandbox_id_from_record(&record).is_some_and(|sandbox_id| {
500 pid_is_alive(record.pid)
501 && pid_matches_openshell_ssh_forward(record.pid, port, Some(sandbox_id))
502 });
503 forwards.push(ForwardInfo {
504 sandbox_name: stem[..dash_pos].to_string(),
505 port,
506 pid: record.pid,
507 validated_alive,
508 bind_addr: record
509 .bind_addr
510 .unwrap_or_else(|| ForwardSpec::DEFAULT_BIND_ADDR.to_string()),
511 });
512 }
513 }
514
515 forwards.sort_by(|a, b| {
516 a.sandbox_name
517 .cmp(&b.sandbox_name)
518 .then(a.port.cmp(&b.port))
519 });
520 Ok(forwards)
521}
522
523// ---------------------------------------------------------------------------
524// Forward spec parsing

Callers 5

refresh_sandboxesFunction · 0.85
mainFunction · 0.85
find_forward_by_portFunction · 0.85
check_port_availableFunction · 0.85

Calls 6

forward_pid_dirFunction · 0.85
read_forward_pidFunction · 0.85
pid_is_aliveFunction · 0.85
pushMethod · 0.80