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
commit173005a254f04e22c2a7049032fe5e993ac28a74 (patch)
tree34bc85959ddd3783ef21fc5932b96a25d9807c35 /src/swarm/topology
parentf76a4e835071d8c88b7db49641d5b5e35a6dcdd8 (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 {