mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-25 05:55:42 +00:00
* Fix #2403 * Apply suggestions from code review Co-Authored-By: tomaka <pierre.krieger1708@gmail.com>
This commit is contained in:
committed by
Bastian Köcher
parent
39197f58f4
commit
9d7a72027c
@@ -612,31 +612,25 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn inject_connected(&mut self, peer_id: PeerId, connected_point: ConnectedPoint) {
|
fn inject_connected(&mut self, peer_id: PeerId, connected_point: ConnectedPoint) {
|
||||||
match (self.peers.entry(peer_id), connected_point) {
|
match (self.peers.entry(peer_id.clone()).or_insert(PeerState::Poisoned), connected_point) {
|
||||||
(Entry::Occupied(mut entry), connected_point) => {
|
(st @ &mut PeerState::Requested, connected_point) |
|
||||||
match mem::replace(entry.get_mut(), PeerState::Poisoned) {
|
(st @ &mut PeerState::PendingRequest { .. }, connected_point) => {
|
||||||
PeerState::Requested | PeerState::PendingRequest { .. } |
|
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Connection \
|
||||||
PeerState::Banned { .. } => {
|
requested by PSM (through {:?})", peer_id, connected_point
|
||||||
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Connection \
|
);
|
||||||
requested by PSM (through {:?})", entry.key(), connected_point);
|
debug!(target: "sub-libp2p", "Handler({:?}) <= Enable", peer_id);
|
||||||
debug!(target: "sub-libp2p", "Handler({:?}) <= Enable", entry.key());
|
self.events.push(NetworkBehaviourAction::SendEvent {
|
||||||
self.events.push(NetworkBehaviourAction::SendEvent {
|
peer_id: peer_id.clone(),
|
||||||
peer_id: entry.key().clone(),
|
event: CustomProtoHandlerIn::Enable(connected_point.clone().into()),
|
||||||
event: CustomProtoHandlerIn::Enable(connected_point.clone().into()),
|
});
|
||||||
});
|
*st = PeerState::Enabled { open: false, connected_point };
|
||||||
*entry.into_mut() = PeerState::Enabled { open: false, connected_point };
|
|
||||||
}
|
|
||||||
st @ _ => {
|
|
||||||
// This is a serious bug either in this state machine or in libp2p.
|
|
||||||
error!(target: "sub-libp2p", "Received inject_connected for \
|
|
||||||
already-connected node; state is {:?}", st);
|
|
||||||
*entry.into_mut() = st;
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
(Entry::Vacant(entry), connected_point @ ConnectedPoint::Listener { .. }) => {
|
// Note: it may seem weird that "Banned" nodes get treated as if there were absent.
|
||||||
|
// This is because the word "Banned" means "temporarily prevent outgoing connections to
|
||||||
|
// this node", and not "banned" in the sense that we would refuse the node altogether.
|
||||||
|
(st @ &mut PeerState::Poisoned, connected_point @ ConnectedPoint::Listener { .. }) |
|
||||||
|
(st @ &mut PeerState::Banned { .. }, connected_point @ ConnectedPoint::Listener { .. }) => {
|
||||||
let incoming_id = self.next_incoming_index.clone();
|
let incoming_id = self.next_incoming_index.clone();
|
||||||
self.next_incoming_index.0 = match self.next_incoming_index.0.checked_add(1) {
|
self.next_incoming_index.0 = match self.next_incoming_index.0.checked_add(1) {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
@@ -646,27 +640,40 @@ where
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Incoming connection",
|
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Incoming connection",
|
||||||
entry.key());
|
peer_id);
|
||||||
debug!(target: "sub-libp2p", "PSM <= Incoming({:?}, {:?}): Through {:?}",
|
debug!(target: "sub-libp2p", "PSM <= Incoming({:?}, {:?}): Through {:?}",
|
||||||
incoming_id, entry.key(), connected_point);
|
incoming_id, peer_id, connected_point);
|
||||||
self.peerset.incoming(entry.key().clone(), incoming_id);
|
self.peerset.incoming(peer_id.clone(), incoming_id);
|
||||||
self.incoming.push(IncomingPeer {
|
self.incoming.push(IncomingPeer {
|
||||||
peer_id: entry.key().clone(),
|
peer_id: peer_id.clone(),
|
||||||
alive: true,
|
alive: true,
|
||||||
incoming_id,
|
incoming_id,
|
||||||
});
|
});
|
||||||
entry.insert(PeerState::Incoming { connected_point });
|
*st = PeerState::Incoming { connected_point };
|
||||||
}
|
}
|
||||||
|
|
||||||
(Entry::Vacant(entry), connected_point) => {
|
(st @ &mut PeerState::Poisoned, connected_point) |
|
||||||
|
(st @ &mut PeerState::Banned { .. }, connected_point) => {
|
||||||
|
let banned_until = if let PeerState::Banned { until } = st {
|
||||||
|
Some(*until)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Requested by something \
|
debug!(target: "sub-libp2p", "Libp2p => Connected({:?}): Requested by something \
|
||||||
else than PSM, disabling", entry.key());
|
else than PSM, disabling", peer_id);
|
||||||
debug!(target: "sub-libp2p", "Handler({:?}) <= Disable", entry.key());
|
debug!(target: "sub-libp2p", "Handler({:?}) <= Disable", peer_id);
|
||||||
self.events.push(NetworkBehaviourAction::SendEvent {
|
self.events.push(NetworkBehaviourAction::SendEvent {
|
||||||
peer_id: entry.key().clone(),
|
peer_id: peer_id.clone(),
|
||||||
event: CustomProtoHandlerIn::Disable,
|
event: CustomProtoHandlerIn::Disable,
|
||||||
});
|
});
|
||||||
entry.insert(PeerState::Disabled { open: false, connected_point, banned_until: None });
|
*st = PeerState::Disabled { open: false, connected_point, banned_until };
|
||||||
|
}
|
||||||
|
|
||||||
|
st => {
|
||||||
|
// This is a serious bug either in this state machine or in libp2p.
|
||||||
|
error!(target: "sub-libp2p", "Received inject_connected for \
|
||||||
|
already-connected node; state is {:?}", st
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user