use Toggle instead of Option for mdns (#14667)

refs https://github.com/paritytech/substrate/pull/14429#discussion_r1272061153
This commit is contained in:
Anton
2023-07-31 11:36:08 +04:00
committed by GitHub
parent 6d5f0a1f1d
commit fb39893bb3
+43 -50
View File
@@ -249,14 +249,14 @@ impl DiscoveryConfig {
discovery_only_if_under_num, discovery_only_if_under_num,
mdns: if enable_mdns { mdns: if enable_mdns {
match TokioMdns::new(mdns::Config::default(), local_peer_id) { match TokioMdns::new(mdns::Config::default(), local_peer_id) {
Ok(mdns) => Some(mdns), Ok(mdns) => Toggle::from(Some(mdns)),
Err(err) => { Err(err) => {
warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err);
None Toggle::from(None)
}, },
} }
} else { } else {
None Toggle::from(None)
}, },
allow_non_globals_in_dht, allow_non_globals_in_dht,
known_external_addresses: LruHashSet::new( known_external_addresses: LruHashSet::new(
@@ -280,7 +280,7 @@ pub struct DiscoveryBehaviour {
/// it's always enabled in `NetworkWorker::new()`. /// it's always enabled in `NetworkWorker::new()`.
kademlia: Toggle<Kademlia<MemoryStore>>, kademlia: Toggle<Kademlia<MemoryStore>>,
/// Discovers nodes on the local network. /// Discovers nodes on the local network.
mdns: Option<TokioMdns>, mdns: Toggle<TokioMdns>,
/// Stream that fires when we need to perform the next random Kademlia query. `None` if /// Stream that fires when we need to perform the next random Kademlia query. `None` if
/// random walking is disabled. /// random walking is disabled.
next_kad_random_query: Option<Delay>, next_kad_random_query: Option<Delay>,
@@ -568,14 +568,12 @@ impl NetworkBehaviour for DiscoveryBehaviour {
effective_role, effective_role,
)?; )?;
if let Some(ref mut mdns) = self.mdns { list_to_filter.extend(self.mdns.handle_pending_outbound_connection(
list_to_filter.extend(mdns.handle_pending_outbound_connection( connection_id,
connection_id, maybe_peer,
maybe_peer, addresses,
addresses, effective_role,
effective_role, )?);
)?);
}
if !self.allow_private_ip { if !self.allow_private_ip {
list_to_filter.retain(|addr| match addr.iter().next() { list_to_filter.retain(|addr| match addr.iter().next() {
@@ -650,9 +648,7 @@ impl NetworkBehaviour for DiscoveryBehaviour {
FromSwarm::NewListenAddr(e) => { FromSwarm::NewListenAddr(e) => {
self.kademlia.on_swarm_event(FromSwarm::NewListenAddr(e)); self.kademlia.on_swarm_event(FromSwarm::NewListenAddr(e));
if let Some(ref mut mdns) = self.mdns { self.mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
mdns.on_swarm_event(FromSwarm::NewListenAddr(e));
}
}, },
FromSwarm::ExternalAddrConfirmed(e @ ExternalAddrConfirmed { addr }) => { FromSwarm::ExternalAddrConfirmed(e @ ExternalAddrConfirmed { addr }) => {
let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id)); let new_addr = addr.clone().with(Protocol::P2p(self.local_peer_id));
@@ -913,43 +909,40 @@ impl NetworkBehaviour for DiscoveryBehaviour {
} }
// Poll mDNS. // Poll mDNS.
if let Some(ref mut mdns) = self.mdns { while let Poll::Ready(ev) = self.mdns.poll(cx, params) {
while let Poll::Ready(ev) = mdns.poll(cx, params) { match ev {
match ev { ToSwarm::GenerateEvent(event) => match event {
ToSwarm::GenerateEvent(event) => match event { mdns::Event::Discovered(list) => {
mdns::Event::Discovered(list) => { if self.num_connections >= self.discovery_only_if_under_num {
if self.num_connections >= self.discovery_only_if_under_num { continue
continue }
}
self.pending_events.extend( self.pending_events.extend(
list.into_iter() list.into_iter().map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)),
.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id)), );
); if let Some(ev) = self.pending_events.pop_front() {
if let Some(ev) = self.pending_events.pop_front() { return Poll::Ready(ToSwarm::GenerateEvent(ev))
return Poll::Ready(ToSwarm::GenerateEvent(ev)) }
}
},
mdns::Event::Expired(_) => {},
}, },
ToSwarm::Dial { .. } => { mdns::Event::Expired(_) => {},
unreachable!("mDNS never dials!"); },
}, ToSwarm::Dial { .. } => {
ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */ unreachable!("mDNS never dials!");
// enum with no },
// variant ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */
ToSwarm::CloseConnection { peer_id, connection } => // enum with no
return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), // variant
ToSwarm::NewExternalAddrCandidate(observed) => ToSwarm::CloseConnection { peer_id, connection } =>
return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)), return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }),
ToSwarm::ExternalAddrConfirmed(addr) => ToSwarm::NewExternalAddrCandidate(observed) =>
return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)), return Poll::Ready(ToSwarm::NewExternalAddrCandidate(observed)),
ToSwarm::ExternalAddrExpired(addr) => ToSwarm::ExternalAddrConfirmed(addr) =>
return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)), return Poll::Ready(ToSwarm::ExternalAddrConfirmed(addr)),
ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }), ToSwarm::ExternalAddrExpired(addr) =>
ToSwarm::RemoveListener { id } => return Poll::Ready(ToSwarm::ExternalAddrExpired(addr)),
return Poll::Ready(ToSwarm::RemoveListener { id }), ToSwarm::ListenOn { opts } => return Poll::Ready(ToSwarm::ListenOn { opts }),
} ToSwarm::RemoveListener { id } =>
return Poll::Ready(ToSwarm::RemoveListener { id }),
} }
} }