diff options
| author | tv <tv@krebsco.de> | 2026-11-02 23:07:14 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-11-02 23:07:14 +0100 |
| commit | 0c096a524531c180798f0712bb7100f0b7557f76 (patch) | |
| tree | 9995d95a835e4daf32dcfc3ae0c83ef5c39e589e /src/swarm/topology | |
| parent | 22e539d9285626ed217c661e6a5e5d2adb12150c (diff) | |
swarm: relay links messages
Diffstat (limited to 'src/swarm/topology')
| -rw-r--r-- | src/swarm/topology/mod.rs | 12 |
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 { |
