Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit 1d13511

Browse files
authored
use Toggle instead of Option for mdns (#14667)
refs #14429 (comment)
1 parent 115af33 commit 1d13511

File tree

1 file changed

+43
-50
lines changed

1 file changed

+43
-50
lines changed

client/network/src/discovery.rs

Lines changed: 43 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -249,14 +249,14 @@ impl DiscoveryConfig {
249249
discovery_only_if_under_num,
250250
mdns: if enable_mdns {
251251
match TokioMdns::new(mdns::Config::default(), local_peer_id) {
252-
Ok(mdns) => Some(mdns),
252+
Ok(mdns) => Toggle::from(Some(mdns)),
253253
Err(err) => {
254254
warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err);
255-
None
255+
Toggle::from(None)
256256
},
257257
}
258258
} else {
259-
None
259+
Toggle::from(None)
260260
},
261261
allow_non_globals_in_dht,
262262
known_external_addresses: LruHashSet::new(
@@ -280,7 +280,7 @@ pub struct DiscoveryBehaviour {
280280
/// it's always enabled in `NetworkWorker::new()`.
281281
kademlia: Toggle<Kademlia<MemoryStore>>,
282282
/// Discovers nodes on the local network.
283-
mdns: Option<TokioMdns>,
283+
mdns: Toggle<TokioMdns>,
284284
/// Stream that fires when we need to perform the next random Kademlia query. `None` if
285285
/// random walking is disabled.
286286
next_kad_random_query: Option<Delay>,
@@ -568,14 +568,12 @@ impl NetworkBehaviour for DiscoveryBehaviour {
568568
effective_role,
569569
)?;
570570

571-
if let Some(ref mut mdns) = self.mdns {
572-
list_to_filter.extend(mdns.handle_pending_outbound_connection(
573-
connection_id,
574-
maybe_peer,
575-
addresses,
576-
effective_role,
577-
)?);
578-
}
571+
list_to_filter.extend(self.mdns.handle_pending_outbound_connection(
572+
connection_id,
573+
maybe_peer,
574+
addresses,
575+
effective_role,
576+
)?);
579577

580578
if !self.allow_private_ip {
581579
list_to_filter.retain(|addr| match addr.iter().next() {
@@ -650,9 +648,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
650648
FromSwarm::NewListenAddr(e) => {
651649
self.kademlia.on_swarm_event(FromSwarm::NewListenAddr(e));
652650

653-
if let Some(ref mut mdns) = self.mdns {
654-
mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
655-
}
651+
self.mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
656652
},
657653
FromSwarm::ExternalAddrConfirmed(e @ ExternalAddrConfirmed { addr }) => {
658654
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id));
@@ -913,43 +909,40 @@ impl NetworkBehaviour for DiscoveryBehaviour {
913909
}
914910

915911
// Poll mDNS.
916-
if let Some(ref mut mdns) = self.mdns {
917-
while let Poll::Ready(ev) = mdns.poll(cx, params) {
918-
match ev {
919-
ToSwarm::GenerateEvent(event) => match event {
920-
mdns::Event::Discovered(list) => {
921-
if self.num_connections >= self.discovery_only_if_under_num {
922-
continue
923-
}
912+
while let Poll::Ready(ev) = self.mdns.poll(cx, params) {
913+
match ev {
914+
ToSwarm::GenerateEvent(event) => match event {
915+
mdns::Event::Discovered(list) => {
916+
if self.num_connections >= self.discovery_only_if_under_num {
917+
continue
918+
}
924919

925-
self.pending_events.extend(
926-
list.into_iter()
927-
.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)),
928-
);
929-
if let Some(ev) = self.pending_events.pop_front() {
930-
return Poll::Ready(ToSwarm::GenerateEvent(ev))
931-
}
932-
},
933-
mdns::Event::Expired(_) => {},
934-
},
935-
ToSwarm::Dial { .. } => {
936-
unreachable!("mDNS never dials!");
920+
self.pending_events.extend(
921+
list.into_iter().map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)),
922+
);
923+
if let Some(ev) = self.pending_events.pop_front() {
924+
return Poll::Ready(ToSwarm::GenerateEvent(ev))
925+
}
937926
},
938-
ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */
939-
// enum with no
940-
// variant
941-
ToSwarm::CloseConnection { peer_id, connection } =>
942-
return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }),
943-
ToSwarm::NewExternalAddrCandidate(observed) =>
944-
return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)),
945-
ToSwarm::ExternalAddrConfirmed(addr) =>
946-
return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)),
947-
ToSwarm::ExternalAddrExpired(addr) =>
948-
return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)),
949-
ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }),
950-
ToSwarm::RemoveListener { id } =>
951-
return Poll::Ready(ToSwarm::RemoveListener { id }),
952-
}
927+
mdns::Event::Expired(_) => {},
928+
},
929+
ToSwarm::Dial { .. } => {
930+
unreachable!("mDNS never dials!");
931+
},
932+
ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */
933+
// enum with no
934+
// variant
935+
ToSwarm::CloseConnection { peer_id, connection } =>
936+
return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }),
937+
ToSwarm::NewExternalAddrCandidate(observed) =>
938+
return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)),
939+
ToSwarm::ExternalAddrConfirmed(addr) =>
940+
return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)),
941+
ToSwarm::ExternalAddrExpired(addr) =>
942+
return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)),
943+
ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }),
944+
ToSwarm::RemoveListener { id } =>
945+
return Poll::Ready(ToSwarm::RemoveListener { id }),
953946
}
954947
}
955948

0 commit comments

Comments
 (0)