mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-20 21:36:31 +00:00
protocols/identify: Extend log message on second identify push (#2726)
Print remote peer ID when seeing a second identify push stream coming in.
This commit is contained in:
@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
- Update to `libp2p-swarm` `v0.37.0`.
|
- Update to `libp2p-swarm` `v0.37.0`.
|
||||||
|
|
||||||
|
- Extend log message on second identify push stream with peer ID.
|
||||||
|
|
||||||
# 0.36.1
|
# 0.36.1
|
||||||
|
|
||||||
- Allow at most one inbound identify push stream.
|
- Allow at most one inbound identify push stream.
|
||||||
|
@ -27,20 +27,48 @@ use futures::prelude::*;
|
|||||||
use futures_timer::Delay;
|
use futures_timer::Delay;
|
||||||
use libp2p_core::either::{EitherError, EitherOutput};
|
use libp2p_core::either::{EitherError, EitherOutput};
|
||||||
use libp2p_core::upgrade::{EitherUpgrade, InboundUpgrade, OutboundUpgrade, SelectUpgrade};
|
use libp2p_core::upgrade::{EitherUpgrade, InboundUpgrade, OutboundUpgrade, SelectUpgrade};
|
||||||
|
use libp2p_core::{ConnectedPoint, PeerId};
|
||||||
use libp2p_swarm::{
|
use libp2p_swarm::{
|
||||||
ConnectionHandler, ConnectionHandlerEvent, ConnectionHandlerUpgrErr, KeepAlive,
|
ConnectionHandler, ConnectionHandlerEvent, ConnectionHandlerUpgrErr, IntoConnectionHandler,
|
||||||
NegotiatedSubstream, SubstreamProtocol,
|
KeepAlive, NegotiatedSubstream, SubstreamProtocol,
|
||||||
};
|
};
|
||||||
use log::warn;
|
use log::warn;
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::{io, pin::Pin, task::Context, task::Poll, time::Duration};
|
use std::{io, pin::Pin, task::Context, task::Poll, time::Duration};
|
||||||
|
|
||||||
|
pub struct IdentifyHandlerProto {
|
||||||
|
initial_delay: Duration,
|
||||||
|
interval: Duration,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IdentifyHandlerProto {
|
||||||
|
pub fn new(initial_delay: Duration, interval: Duration) -> Self {
|
||||||
|
IdentifyHandlerProto {
|
||||||
|
initial_delay,
|
||||||
|
interval,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoConnectionHandler for IdentifyHandlerProto {
|
||||||
|
type Handler = IdentifyHandler;
|
||||||
|
|
||||||
|
fn into_handler(self, remote_peer_id: &PeerId, _endpoint: &ConnectedPoint) -> Self::Handler {
|
||||||
|
IdentifyHandler::new(self.initial_delay, self.interval, *remote_peer_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn inbound_protocol(&self) -> <Self::Handler as ConnectionHandler>::InboundProtocol {
|
||||||
|
SelectUpgrade::new(IdentifyProtocol, IdentifyPushProtocol::inbound())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Protocol handler for sending and receiving identification requests.
|
/// Protocol handler for sending and receiving identification requests.
|
||||||
///
|
///
|
||||||
/// Outbound requests are sent periodically. The handler performs expects
|
/// Outbound requests are sent periodically. The handler performs expects
|
||||||
/// at least one identification request to be answered by the remote before
|
/// at least one identification request to be answered by the remote before
|
||||||
/// permitting the underlying connection to be closed.
|
/// permitting the underlying connection to be closed.
|
||||||
pub struct IdentifyHandler {
|
pub struct IdentifyHandler {
|
||||||
|
remote_peer_id: PeerId,
|
||||||
inbound_identify_push: Option<BoxFuture<'static, Result<IdentifyInfo, UpgradeError>>>,
|
inbound_identify_push: Option<BoxFuture<'static, Result<IdentifyInfo, UpgradeError>>>,
|
||||||
/// Pending events to yield.
|
/// Pending events to yield.
|
||||||
events: SmallVec<
|
events: SmallVec<
|
||||||
@ -81,8 +109,9 @@ pub struct IdentifyPush(pub IdentifyInfo);
|
|||||||
|
|
||||||
impl IdentifyHandler {
|
impl IdentifyHandler {
|
||||||
/// Creates a new `IdentifyHandler`.
|
/// Creates a new `IdentifyHandler`.
|
||||||
pub fn new(initial_delay: Duration, interval: Duration) -> Self {
|
pub fn new(initial_delay: Duration, interval: Duration, remote_peer_id: PeerId) -> Self {
|
||||||
IdentifyHandler {
|
IdentifyHandler {
|
||||||
|
remote_peer_id,
|
||||||
inbound_identify_push: Default::default(),
|
inbound_identify_push: Default::default(),
|
||||||
events: SmallVec::new(),
|
events: SmallVec::new(),
|
||||||
trigger_next_identify: Delay::new(initial_delay),
|
trigger_next_identify: Delay::new(initial_delay),
|
||||||
@ -120,8 +149,9 @@ impl ConnectionHandler for IdentifyHandler {
|
|||||||
EitherOutput::Second(fut) => {
|
EitherOutput::Second(fut) => {
|
||||||
if self.inbound_identify_push.replace(fut).is_some() {
|
if self.inbound_identify_push.replace(fut).is_some() {
|
||||||
warn!(
|
warn!(
|
||||||
"New inbound identify push stream while still upgrading previous one. \
|
"New inbound identify push stream from {} while still \
|
||||||
Replacing previous with new.",
|
upgrading previous one. Replacing previous with new.",
|
||||||
|
self.remote_peer_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
use crate::handler::{IdentifyHandler, IdentifyHandlerEvent, IdentifyPush};
|
use crate::handler::{IdentifyHandlerEvent, IdentifyHandlerProto, IdentifyPush};
|
||||||
use crate::protocol::{IdentifyInfo, ReplySubstream, UpgradeError};
|
use crate::protocol::{IdentifyInfo, ReplySubstream, UpgradeError};
|
||||||
use futures::prelude::*;
|
use futures::prelude::*;
|
||||||
use libp2p_core::{
|
use libp2p_core::{
|
||||||
@ -54,7 +54,7 @@ pub struct Identify {
|
|||||||
/// Pending replies to send.
|
/// Pending replies to send.
|
||||||
pending_replies: VecDeque<Reply>,
|
pending_replies: VecDeque<Reply>,
|
||||||
/// Pending events to be emitted when polled.
|
/// Pending events to be emitted when polled.
|
||||||
events: VecDeque<NetworkBehaviourAction<IdentifyEvent, IdentifyHandler>>,
|
events: VecDeque<NetworkBehaviourAction<IdentifyEvent, IdentifyHandlerProto>>,
|
||||||
/// Peers to which an active push with current information about
|
/// Peers to which an active push with current information about
|
||||||
/// the local peer should be sent.
|
/// the local peer should be sent.
|
||||||
pending_push: HashSet<PeerId>,
|
pending_push: HashSet<PeerId>,
|
||||||
@ -208,11 +208,11 @@ impl Identify {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl NetworkBehaviour for Identify {
|
impl NetworkBehaviour for Identify {
|
||||||
type ConnectionHandler = IdentifyHandler;
|
type ConnectionHandler = IdentifyHandlerProto;
|
||||||
type OutEvent = IdentifyEvent;
|
type OutEvent = IdentifyEvent;
|
||||||
|
|
||||||
fn new_handler(&mut self) -> Self::ConnectionHandler {
|
fn new_handler(&mut self) -> Self::ConnectionHandler {
|
||||||
IdentifyHandler::new(self.config.initial_delay, self.config.interval)
|
IdentifyHandlerProto::new(self.config.initial_delay, self.config.interval)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn inject_connection_established(
|
fn inject_connection_established(
|
||||||
@ -296,7 +296,7 @@ impl NetworkBehaviour for Identify {
|
|||||||
&mut self,
|
&mut self,
|
||||||
peer_id: PeerId,
|
peer_id: PeerId,
|
||||||
connection: ConnectionId,
|
connection: ConnectionId,
|
||||||
event: <Self::ConnectionHandler as ConnectionHandler>::OutEvent,
|
event: <<Self::ConnectionHandler as IntoConnectionHandler>::Handler as ConnectionHandler>::OutEvent,
|
||||||
) {
|
) {
|
||||||
match event {
|
match event {
|
||||||
IdentifyHandlerEvent::Identified(mut info) => {
|
IdentifyHandlerEvent::Identified(mut info) => {
|
||||||
|
Reference in New Issue
Block a user