@@ -33,7 +33,7 @@ use crate::{
3333 message:: { BlockSyncMessage , TransactionSyncMessage , WillDisconnectMessage } ,
3434 net:: {
3535 default_backend:: types:: { BackendEvent , PeerEvent } ,
36- types:: PeerManagerMessageOrTag ,
36+ types:: PeerManagerMessageExt ,
3737 } ,
3838 protocol:: { choose_common_protocol_version, ProtocolVersion , SupportedProtocolVersion } ,
3939 types:: peer_id:: PeerId ,
@@ -83,6 +83,10 @@ pub struct Peer<T: TransportSocket> {
8383
8484 /// Time getter
8585 time_getter : TimeGetter ,
86+
87+ /// Will be set to true once at least one BlockSyncMessage or TransactionSyncMessage has been
88+ /// received from the peer.
89+ sync_message_received : bool ,
8690}
8791
8892impl < T > Peer < T >
@@ -115,6 +119,7 @@ where
115119 node_protocol_version,
116120 time_getter,
117121 common_protocol_version : None ,
122+ sync_message_received : false ,
118123 }
119124 }
120125
@@ -393,17 +398,17 @@ where
393398 // Note: the channels used by this function to propagate messages to other parts of p2p
394399 // must be bounded; this is important to prevent DoS attacks.
395400 async fn handle_socket_msg (
401+ & mut self ,
396402 peer_id : PeerId ,
397403 msg : Message ,
398- peer_event_sender : & mut mpsc:: Sender < PeerEvent > ,
399- block_sync_msg_sender : & mut mpsc:: Sender < BlockSyncMessage > ,
400- transaction_sync_msg_sender : & mut mpsc:: Sender < TransactionSyncMessage > ,
404+ block_sync_msg_sender : & mpsc:: Sender < BlockSyncMessage > ,
405+ transaction_sync_msg_sender : & mpsc:: Sender < TransactionSyncMessage > ,
401406 ) -> crate :: Result < ( ) > {
402407 match msg. categorize ( ) {
403408 CategorizedMessage :: Handshake ( _) => {
404409 log:: error!( "Peer {peer_id} sent unexpected handshake message" ) ;
405410
406- peer_event_sender
411+ self . peer_event_sender
407412 . send ( PeerEvent :: Misbehaved {
408413 error : P2pError :: ProtocolError ( ProtocolError :: UnexpectedMessage (
409414 "Unexpected handshake message" . to_owned ( ) ,
@@ -412,29 +417,35 @@ where
412417 . await ?;
413418 }
414419 CategorizedMessage :: PeerManagerMessage ( msg) => {
415- peer_event_sender
420+ self . peer_event_sender
416421 . send ( PeerEvent :: MessageReceived (
417- PeerManagerMessageOrTag :: PeerManagerMessage ( msg) ,
422+ PeerManagerMessageExt :: PeerManagerMessage ( msg) ,
418423 ) )
419424 . await ?
420425 }
421426 CategorizedMessage :: BlockSyncMessage ( msg) => {
422- peer_event_sender
423- . send ( PeerEvent :: MessageReceived (
424- PeerManagerMessageOrTag :: BlockSyncMessage ( ( & msg) . into ( ) ) ,
425- ) )
426- . await ?;
427-
428- block_sync_msg_sender. send ( msg) . await ?
427+ block_sync_msg_sender. send ( msg) . await ?;
428+
429+ if !self . sync_message_received {
430+ self . peer_event_sender
431+ . send ( PeerEvent :: MessageReceived (
432+ PeerManagerMessageExt :: FirstSyncMessageReceived ,
433+ ) )
434+ . await ?;
435+ self . sync_message_received = true ;
436+ }
429437 }
430438 CategorizedMessage :: TransactionSyncMessage ( msg) => {
431- peer_event_sender
432- . send ( PeerEvent :: MessageReceived (
433- PeerManagerMessageOrTag :: TransactionSyncMessage ( ( & msg) . into ( ) ) ,
434- ) )
435- . await ?;
436-
437- transaction_sync_msg_sender. send ( msg) . await ?
439+ transaction_sync_msg_sender. send ( msg) . await ?;
440+
441+ if !self . sync_message_received {
442+ self . peer_event_sender
443+ . send ( PeerEvent :: MessageReceived (
444+ PeerManagerMessageExt :: FirstSyncMessageReceived ,
445+ ) )
446+ . await ?;
447+ self . sync_message_received = true ;
448+ }
438449 }
439450 }
440451
@@ -507,12 +518,11 @@ where
507518 event = self . socket. recv( ) , if sync_msg_senders_opt. is_some( ) => match event {
508519 Ok ( message) => {
509520 let sync_msg_senders = sync_msg_senders_opt. as_mut( ) . expect( "sync_msg_senders_opt is some" ) ;
510- Self :: handle_socket_msg(
521+ self . handle_socket_msg(
511522 self . peer_id,
512523 message,
513- & mut self . peer_event_sender,
514- & mut sync_msg_senders. 0 ,
515- & mut sync_msg_senders. 1 ,
524+ & sync_msg_senders. 0 ,
525+ & sync_msg_senders. 1 ,
516526 ) . await ?;
517527 }
518528 Err ( err) => {
0 commit comments