mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-12 09:31:20 +00:00
swarm/src/behaviour: Merge inject_* paired methods (#2445)
Co-authored-by: Max Inden <mail@max-inden.de>
This commit is contained in:
@ -205,6 +205,7 @@ impl NetworkBehaviour for Relay {
|
||||
connection_id: &ConnectionId,
|
||||
_: &ConnectedPoint,
|
||||
_: Option<&Vec<Multiaddr>>,
|
||||
other_established: usize,
|
||||
) {
|
||||
let is_first = self
|
||||
.connected_peers
|
||||
@ -238,69 +239,61 @@ impl NetworkBehaviour for Relay {
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_connected(&mut self, peer_id: &PeerId) {
|
||||
assert!(
|
||||
self.connected_peers
|
||||
.get(peer_id)
|
||||
.map(|cs| !cs.is_empty())
|
||||
.unwrap_or(false),
|
||||
"Expect to be connected to peer with at least one connection."
|
||||
);
|
||||
if other_established == 0 {
|
||||
if let Some(reqs) = self.outgoing_relay_reqs.dialing.remove(peer) {
|
||||
for req in reqs {
|
||||
let OutgoingDialingRelayReq {
|
||||
request_id,
|
||||
src_peer_id,
|
||||
relay_addr: _,
|
||||
dst_addr,
|
||||
dst_peer_id,
|
||||
send_back,
|
||||
} = req;
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: *peer,
|
||||
handler: NotifyHandler::Any,
|
||||
event: RelayHandlerIn::OutgoingRelayReq {
|
||||
src_peer_id,
|
||||
request_id,
|
||||
dst_peer_id,
|
||||
dst_addr: dst_addr.clone(),
|
||||
},
|
||||
});
|
||||
|
||||
if let Some(reqs) = self.outgoing_relay_reqs.dialing.remove(peer_id) {
|
||||
for req in reqs {
|
||||
let OutgoingDialingRelayReq {
|
||||
request_id,
|
||||
src_peer_id,
|
||||
relay_addr: _,
|
||||
dst_addr,
|
||||
dst_peer_id,
|
||||
send_back,
|
||||
} = req;
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: *peer_id,
|
||||
handler: NotifyHandler::Any,
|
||||
event: RelayHandlerIn::OutgoingRelayReq {
|
||||
src_peer_id,
|
||||
request_id,
|
||||
dst_peer_id,
|
||||
dst_addr: dst_addr.clone(),
|
||||
},
|
||||
});
|
||||
|
||||
self.outgoing_relay_reqs
|
||||
.upgrading
|
||||
.insert(request_id, OutgoingUpgradingRelayReq { send_back });
|
||||
self.outgoing_relay_reqs
|
||||
.upgrading
|
||||
.insert(request_id, OutgoingUpgradingRelayReq { send_back });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ask the newly-opened connection to be used as destination if relevant.
|
||||
if let Some(reqs) = self.incoming_relay_reqs.remove(peer_id) {
|
||||
for req in reqs {
|
||||
let IncomingRelayReq::DialingDst {
|
||||
src_peer_id,
|
||||
src_addr,
|
||||
src_connection_id,
|
||||
request_id,
|
||||
incoming_relay_req,
|
||||
} = req;
|
||||
let event = RelayHandlerIn::OutgoingDstReq {
|
||||
src_peer_id,
|
||||
src_addr,
|
||||
src_connection_id,
|
||||
request_id,
|
||||
incoming_relay_req,
|
||||
};
|
||||
// Ask the newly-opened connection to be used as destination if relevant.
|
||||
if let Some(reqs) = self.incoming_relay_reqs.remove(peer) {
|
||||
for req in reqs {
|
||||
let IncomingRelayReq::DialingDst {
|
||||
src_peer_id,
|
||||
src_addr,
|
||||
src_connection_id,
|
||||
request_id,
|
||||
incoming_relay_req,
|
||||
} = req;
|
||||
let event = RelayHandlerIn::OutgoingDstReq {
|
||||
src_peer_id,
|
||||
src_addr,
|
||||
src_connection_id,
|
||||
request_id,
|
||||
incoming_relay_req,
|
||||
};
|
||||
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: *peer_id,
|
||||
handler: NotifyHandler::Any,
|
||||
event,
|
||||
});
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: *peer,
|
||||
handler: NotifyHandler::Any,
|
||||
event,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -360,6 +353,7 @@ impl NetworkBehaviour for Relay {
|
||||
connection: &ConnectionId,
|
||||
_: &ConnectedPoint,
|
||||
_: <Self::ProtocolsHandler as IntoProtocolsHandler>::Handler,
|
||||
remaining_established: usize,
|
||||
) {
|
||||
// Remove connection from the set of connections for the given peer. In case the set is
|
||||
// empty it will be removed in `inject_disconnected`.
|
||||
@ -414,6 +408,28 @@ impl NetworkBehaviour for Relay {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if remaining_established == 0 {
|
||||
self.connected_peers.remove(peer);
|
||||
|
||||
if let Some(reqs) = self.incoming_relay_reqs.remove(peer) {
|
||||
for req in reqs {
|
||||
let IncomingRelayReq::DialingDst {
|
||||
src_peer_id,
|
||||
incoming_relay_req,
|
||||
..
|
||||
} = req;
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: src_peer_id,
|
||||
handler: NotifyHandler::Any,
|
||||
event: RelayHandlerIn::DenyIncomingRelayReq(
|
||||
incoming_relay_req.deny(circuit_relay::Status::HopCantDialDst),
|
||||
),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_listener_error(&mut self, _id: ListenerId, _err: &(dyn std::error::Error + 'static)) {
|
||||
@ -421,28 +437,6 @@ impl NetworkBehaviour for Relay {
|
||||
|
||||
fn inject_listener_closed(&mut self, _id: ListenerId, _reason: Result<(), &std::io::Error>) {}
|
||||
|
||||
fn inject_disconnected(&mut self, id: &PeerId) {
|
||||
self.connected_peers.remove(id);
|
||||
|
||||
if let Some(reqs) = self.incoming_relay_reqs.remove(id) {
|
||||
for req in reqs {
|
||||
let IncomingRelayReq::DialingDst {
|
||||
src_peer_id,
|
||||
incoming_relay_req,
|
||||
..
|
||||
} = req;
|
||||
self.outbox_to_swarm
|
||||
.push_back(NetworkBehaviourAction::NotifyHandler {
|
||||
peer_id: src_peer_id,
|
||||
handler: NotifyHandler::Any,
|
||||
event: RelayHandlerIn::DenyIncomingRelayReq(
|
||||
incoming_relay_req.deny(circuit_relay::Status::HopCantDialDst),
|
||||
),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn inject_event(
|
||||
&mut self,
|
||||
event_source: PeerId,
|
||||
|
@ -129,6 +129,7 @@ impl NetworkBehaviour for Client {
|
||||
connection_id: &ConnectionId,
|
||||
endpoint: &ConnectedPoint,
|
||||
_failed_addresses: Option<&Vec<Multiaddr>>,
|
||||
_other_established: usize,
|
||||
) {
|
||||
if !endpoint.is_relayed() {
|
||||
self.directly_connected_peers
|
||||
@ -144,6 +145,7 @@ impl NetworkBehaviour for Client {
|
||||
connection_id: &ConnectionId,
|
||||
endpoint: &ConnectedPoint,
|
||||
_handler: Either<handler::Handler, DummyProtocolsHandler>,
|
||||
_remaining_established: usize,
|
||||
) {
|
||||
if !endpoint.is_relayed() {
|
||||
match self.directly_connected_peers.entry(*peer_id) {
|
||||
|
@ -213,6 +213,7 @@ impl NetworkBehaviour for Relay {
|
||||
connection: &ConnectionId,
|
||||
_: &ConnectedPoint,
|
||||
_handler: Either<handler::Handler, DummyProtocolsHandler>,
|
||||
_remaining_established: usize,
|
||||
) {
|
||||
if let hash_map::Entry::Occupied(mut peer) = self.reservations.entry(*peer) {
|
||||
peer.get_mut().remove(&connection);
|
||||
|
Reference in New Issue
Block a user