aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/topology
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-02 23:07:14 +0100
committertv <tv@krebsco.de>2026-11-02 23:07:14 +0100
commit0c096a524531c180798f0712bb7100f0b7557f76 (patch)
tree9995d95a835e4daf32dcfc3ae0c83ef5c39e589e /src/swarm/topology
parent22e539d9285626ed217c661e6a5e5d2adb12150c (diff)
swarm: relay links messages
Diffstat (limited to 'src/swarm/topology')
-rw-r--r--src/swarm/topology/mod.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/swarm/topology/mod.rs b/src/swarm/topology/mod.rs
index 946fc33..df75f46 100644
--- a/src/swarm/topology/mod.rs
+++ b/src/swarm/topology/mod.rs
@@ -152,6 +152,18 @@ pub(crate) fn neighbours_of(state: &AppState, member: &str) -> Option<BTreeSet<S
.then(|| view.neighbours_of(state.local_id(), member))
}
+/// The transports `member` is on, by the member list (the schemes of its addresses);
+/// ours as we are on them. None known: empty.
+pub(crate) fn transports_of(state: &AppState, member: &str) -> BTreeSet<String> {
+ let view = state.neighbours.read_or_recover();
+ match view.as_ref() {
+ Some(view) if member == state.local_id() => view.local_transports.clone(),
+ Some(view) => view.transports.get(member).cloned().unwrap_or_default(),
+ None if member == state.local_id() => state.transport.transports().into_iter().collect(),
+ None => BTreeSet::new(),
+ }
+}
+
impl NeighbourView {
fn neighbours_of(&self, local: &str, member: &str) -> BTreeSet<String> {
if member == local {