mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-23 21:15:41 +00:00
use Toggle instead of Option for mdns (#14667)
refs https://github.com/paritytech/substrate/pull/14429#discussion_r1272061153
This commit is contained in:
@@ -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 }),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user