@@ -102,6 +102,7 @@ struct Peer {
102
102
pending_read_buffer : Vec < u8 > ,
103
103
pending_read_buffer_pos : usize ,
104
104
pending_read_is_header : bool ,
105
+ last_synced_channel : i64 ,
105
106
}
106
107
107
108
struct PeerHolder < Descriptor : SocketDescriptor > {
@@ -221,6 +222,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
221
222
pending_read_buffer : pending_read_buffer,
222
223
pending_read_buffer_pos : 0 ,
223
224
pending_read_is_header : false ,
225
+ last_synced_channel : -1 ,
224
226
} ) . is_some ( ) {
225
227
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
226
228
} ;
@@ -255,6 +257,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
255
257
pending_read_buffer : pending_read_buffer,
256
258
pending_read_buffer_pos : 0 ,
257
259
pending_read_is_header : false ,
260
+ last_synced_channel : -1 ,
258
261
} ) . is_some ( ) {
259
262
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
260
263
} ;
@@ -348,6 +351,22 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
348
351
peer. pending_read_buffer_pos = 0 ;
349
352
350
353
macro_rules! encode_and_send_msg {
354
+ ( $msg: expr, $msg_code: expr) => {
355
+ {
356
+ encode_and_send_actual_msg!( $msg, $msg_code) ;
357
+ if peer. last_synced_channel > -1 {
358
+ let all_messages_tuple = self . message_handler. route_handler. get_next_announcements( peer. last_synced_channel, 5 ) ;
359
+ for i in 0 ..all_messages_tuple. 0 . len( ) {
360
+ encode_and_send_actual_msg!( all_messages_tuple. 0 [ i] . 0 . clone( ) , 256 ) ;
361
+ encode_and_send_actual_msg!( all_messages_tuple. 0 [ i] . 2 . clone( ) , 257 ) ;
362
+ encode_and_send_actual_msg!( all_messages_tuple. 0 [ i] . 3 . clone( ) , 257 ) ;
363
+ encode_and_send_actual_msg!( all_messages_tuple. 0 [ i] . 1 . clone( ) , 258 ) ;
364
+ }
365
+ peer. last_synced_channel = all_messages_tuple. 1 ;
366
+ }
367
+ }
368
+ }
369
+ } macro_rules! encode_and_send_actual_msg {
351
370
( $msg: expr, $msg_code: expr) => {
352
371
{
353
372
log_trace!( self , "Encoding and sending message of type {} to {}" , $msg_code, log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
@@ -511,6 +530,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
511
530
if msg. local_features. supports_unknown_bits( ) { "present" } else { "none" } ,
512
531
if msg. global_features. supports_unknown_bits( ) { "present" } else { "none" } ) ;
513
532
533
+ let do_they_require_sync = msg. local_features . initial_routing_sync ( ) ;
514
534
peer. their_global_features = Some ( msg. global_features ) ;
515
535
peer. their_local_features = Some ( msg. local_features ) ;
516
536
@@ -520,6 +540,10 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
520
540
self . initial_syncs_sent . fetch_add ( 1 , Ordering :: AcqRel ) ;
521
541
local_features. set_initial_routing_sync ( ) ;
522
542
}
543
+
544
+ if do_they_require_sync {
545
+ peer. last_synced_channel = 0 ; //set to larger than -1, means next sent message will trigger slow trickle of sync data
546
+ }
523
547
encode_and_send_msg ! ( msgs:: Init {
524
548
global_features: msgs:: GlobalFeatures :: new( ) ,
525
549
local_features,
0 commit comments