@@ -102,6 +102,13 @@ struct Peer {
102
102
pending_read_buffer : Vec < u8 > ,
103
103
pending_read_buffer_pos : usize ,
104
104
pending_read_is_header : bool ,
105
+ sync_status : msgs:: InitSyncTracker ,
106
+ }
107
+
108
+ impl Peer {
109
+ pub fn require_sync ( & self ) ->bool {
110
+ if let msgs:: InitSyncTracker :: Sync ( i) = self . sync_status { i} else { false }
111
+ }
105
112
}
106
113
107
114
struct PeerHolder < Descriptor : SocketDescriptor > {
@@ -221,6 +228,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
221
228
pending_read_buffer : pending_read_buffer,
222
229
pending_read_buffer_pos : 0 ,
223
230
pending_read_is_header : false ,
231
+ sync_status : msgs:: InitSyncTracker :: Sync ( false ) ,
224
232
} ) . is_some ( ) {
225
233
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
226
234
} ;
@@ -255,22 +263,47 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
255
263
pending_read_buffer : pending_read_buffer,
256
264
pending_read_buffer_pos : 0 ,
257
265
pending_read_is_header : false ,
266
+ sync_status : msgs:: InitSyncTracker :: Sync ( false ) ,
258
267
} ) . is_some ( ) {
259
268
panic ! ( "PeerManager driver duplicated descriptors!" ) ;
260
269
} ;
261
270
Ok ( ( ) )
262
271
}
263
272
264
- fn do_attempt_write_data ( descriptor : & mut Descriptor , peer : & mut Peer ) {
273
+ fn do_attempt_write_data ( & self , descriptor : & mut Descriptor , peer : & mut Peer ) {
274
+ macro_rules! encode_and_send_msg {
275
+ ( $msg: expr, $msg_code: expr) => {
276
+ {
277
+ log_trace!( self , "Encoding and sending message of type {} to {}" , $msg_code, log_pubkey!( peer. their_node_id. unwrap( ) ) ) ;
278
+ peer. pending_outbound_buffer. push_back( peer. channel_encryptor. encrypt_message( & encode_msg!( $msg, $msg_code) [ ..] ) ) ;
279
+ }
280
+ }
281
+ }
265
282
while !peer. awaiting_write_event {
266
283
if {
284
+ let should_be_reading = peer. pending_outbound_buffer . len ( ) < 10 ;
285
+ if ( peer. require_sync ( ) ) &&( should_be_reading) {
286
+ match peer. sync_status {
287
+ msgs:: InitSyncTracker :: ChannelCounter ( _c) => {
288
+ let all_messages_tuple = self . message_handler . route_handler . get_next_channel_announcements ( & mut peer. sync_status , ( 10 -peer. pending_outbound_buffer . len ( ) ) as u8 ) ;
289
+ for tuple in all_messages_tuple. iter ( ) {
290
+ encode_and_send_msg ! ( tuple. 0 , 256 ) ;
291
+ encode_and_send_msg ! ( tuple. 1 , 258 ) ;
292
+ encode_and_send_msg ! ( tuple. 2 , 258 ) ;
293
+ }
294
+ } ,
295
+ _=>{ let all_messages = self . message_handler . route_handler . get_next_node_announcements ( & mut peer. sync_status , ( 10 -peer. pending_outbound_buffer . len ( ) ) as u8 ) ;
296
+ for message in all_messages. iter ( ) {
297
+ encode_and_send_msg ! ( message, 256 ) ;
298
+ } } ,
299
+ } ;
300
+ }
267
301
let next_buff = match peer. pending_outbound_buffer . front ( ) {
268
302
None => return ,
269
303
Some ( buff) => buff,
270
304
} ;
271
- let should_be_reading = peer. pending_outbound_buffer . len ( ) < 10 ;
272
305
273
- let data_sent = descriptor. send_data ( next_buff, peer. pending_outbound_buffer_first_msg_offset , should_be_reading) ;
306
+ let data_sent = descriptor. send_data ( & next_buff, peer. pending_outbound_buffer_first_msg_offset , should_be_reading) ;
274
307
peer. pending_outbound_buffer_first_msg_offset += data_sent;
275
308
if peer. pending_outbound_buffer_first_msg_offset == next_buff. len ( ) { true } else { false }
276
309
} {
@@ -297,7 +330,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
297
330
None => panic ! ( "Descriptor for write_event is not already known to PeerManager" ) ,
298
331
Some ( peer) => {
299
332
peer. awaiting_write_event = false ;
300
- Self :: do_attempt_write_data ( descriptor, peer) ;
333
+ self . do_attempt_write_data ( descriptor, peer) ;
301
334
}
302
335
} ;
303
336
Ok ( ( ) )
@@ -522,6 +555,10 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
522
555
if msg. local_features. supports_unknown_bits( ) { "present" } else { "none" } ,
523
556
if msg. global_features. supports_unknown_bits( ) { "present" } else { "none" } ) ;
524
557
558
+ if msg. local_features . initial_routing_sync ( ) {
559
+ peer. sync_status = msgs:: InitSyncTracker :: Sync ( true ) ;
560
+ peers. peers_needing_send . insert ( peer_descriptor. clone ( ) ) ;
561
+ }
525
562
peer. their_global_features = Some ( msg. global_features ) ;
526
563
peer. their_local_features = Some ( msg. local_features ) ;
527
564
@@ -531,6 +568,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
531
568
self . initial_syncs_sent . fetch_add ( 1 , Ordering :: AcqRel ) ;
532
569
local_features. set_initial_routing_sync ( ) ;
533
570
}
571
+
534
572
encode_and_send_msg ! ( msgs:: Init {
535
573
global_features: msgs:: GlobalFeatures :: new( ) ,
536
574
local_features,
@@ -678,7 +716,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
678
716
}
679
717
}
680
718
681
- Self :: do_attempt_write_data ( peer_descriptor, peer) ;
719
+ self . do_attempt_write_data ( peer_descriptor, peer) ;
682
720
683
721
peer. pending_outbound_buffer . len ( ) > 10 // pause_read
684
722
}
@@ -735,7 +773,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
735
773
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
736
774
} ) ;
737
775
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 33 ) ) ) ;
738
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
776
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
739
777
} ,
740
778
MessageSendEvent :: SendOpenChannel { ref node_id, ref msg } => {
741
779
log_trace ! ( self , "Handling SendOpenChannel event in peer_handler for node {} for channel {}" ,
@@ -745,7 +783,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
745
783
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
746
784
} ) ;
747
785
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 32 ) ) ) ;
748
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
786
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
749
787
} ,
750
788
MessageSendEvent :: SendFundingCreated { ref node_id, ref msg } => {
751
789
log_trace ! ( self , "Handling SendFundingCreated event in peer_handler for node {} for channel {} (which becomes {})" ,
@@ -757,7 +795,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
757
795
//they should just throw away this funding transaction
758
796
} ) ;
759
797
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 34 ) ) ) ;
760
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
798
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
761
799
} ,
762
800
MessageSendEvent :: SendFundingSigned { ref node_id, ref msg } => {
763
801
log_trace ! ( self , "Handling SendFundingSigned event in peer_handler for node {} for channel {}" ,
@@ -768,7 +806,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
768
806
//they should just throw away this funding transaction
769
807
} ) ;
770
808
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 35 ) ) ) ;
771
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
809
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
772
810
} ,
773
811
MessageSendEvent :: SendFundingLocked { ref node_id, ref msg } => {
774
812
log_trace ! ( self , "Handling SendFundingLocked event in peer_handler for node {} for channel {}" ,
@@ -778,7 +816,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
778
816
//TODO: Do whatever we're gonna do for handling dropped messages
779
817
} ) ;
780
818
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 36 ) ) ) ;
781
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
819
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
782
820
} ,
783
821
MessageSendEvent :: SendAnnouncementSignatures { ref node_id, ref msg } => {
784
822
log_trace ! ( self , "Handling SendAnnouncementSignatures event in peer_handler for node {} for channel {})" ,
@@ -789,7 +827,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
789
827
//they should just throw away this funding transaction
790
828
} ) ;
791
829
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 259 ) ) ) ;
792
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
830
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
793
831
} ,
794
832
MessageSendEvent :: UpdateHTLCs { ref node_id, updates : msgs:: CommitmentUpdate { ref update_add_htlcs, ref update_fulfill_htlcs, ref update_fail_htlcs, ref update_fail_malformed_htlcs, ref update_fee, ref commitment_signed } } => {
795
833
log_trace ! ( self , "Handling UpdateHTLCs event in peer_handler for node {} with {} adds, {} fulfills, {} fails for channel {}" ,
@@ -817,7 +855,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
817
855
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 134 ) ) ) ;
818
856
}
819
857
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( commitment_signed, 132 ) ) ) ;
820
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
858
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
821
859
} ,
822
860
MessageSendEvent :: SendRevokeAndACK { ref node_id, ref msg } => {
823
861
log_trace ! ( self , "Handling SendRevokeAndACK event in peer_handler for node {} for channel {}" ,
@@ -827,7 +865,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
827
865
//TODO: Do whatever we're gonna do for handling dropped messages
828
866
} ) ;
829
867
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 133 ) ) ) ;
830
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
868
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
831
869
} ,
832
870
MessageSendEvent :: SendClosingSigned { ref node_id, ref msg } => {
833
871
log_trace ! ( self , "Handling SendClosingSigned event in peer_handler for node {} for channel {}" ,
@@ -837,7 +875,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
837
875
//TODO: Do whatever we're gonna do for handling dropped messages
838
876
} ) ;
839
877
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 39 ) ) ) ;
840
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
878
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
841
879
} ,
842
880
MessageSendEvent :: SendShutdown { ref node_id, ref msg } => {
843
881
log_trace ! ( self , "Handling Shutdown event in peer_handler for node {} for channel {}" ,
@@ -847,7 +885,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
847
885
//TODO: Do whatever we're gonna do for handling dropped messages
848
886
} ) ;
849
887
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 38 ) ) ) ;
850
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
888
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
851
889
} ,
852
890
MessageSendEvent :: SendChannelReestablish { ref node_id, ref msg } => {
853
891
log_trace ! ( self , "Handling SendChannelReestablish event in peer_handler for node {} for channel {}" ,
@@ -857,7 +895,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
857
895
//TODO: Do whatever we're gonna do for handling dropped messages
858
896
} ) ;
859
897
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 136 ) ) ) ;
860
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
898
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
861
899
} ,
862
900
MessageSendEvent :: BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
863
901
log_trace ! ( self , "Handling BroadcastChannelAnnouncement event in peer_handler for short channel id {}" , msg. contents. short_channel_id) ;
@@ -879,7 +917,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
879
917
}
880
918
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encoded_msg[ ..] ) ) ;
881
919
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encoded_update_msg[ ..] ) ) ;
882
- Self :: do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , peer) ;
920
+ self . do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , peer) ;
883
921
}
884
922
}
885
923
} ,
@@ -893,7 +931,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
893
931
continue
894
932
}
895
933
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encoded_msg[ ..] ) ) ;
896
- Self :: do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , peer) ;
934
+ self . do_attempt_write_data ( & mut ( * descriptor) . clone ( ) , peer) ;
897
935
}
898
936
}
899
937
} ,
@@ -914,7 +952,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
914
952
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 17 ) ) ) ;
915
953
// This isn't guaranteed to work, but if there is enough free
916
954
// room in the send buffer, put the error message there...
917
- Self :: do_attempt_write_data ( & mut descriptor, & mut peer) ;
955
+ self . do_attempt_write_data ( & mut descriptor, & mut peer) ;
918
956
} else {
919
957
log_trace ! ( self , "Handling DisconnectPeer HandleError event in peer_handler for node {} with no message" , log_pubkey!( node_id) ) ;
920
958
}
@@ -932,7 +970,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
932
970
//TODO: Do whatever we're gonna do for handling dropped messages
933
971
} ) ;
934
972
peer. pending_outbound_buffer . push_back ( peer. channel_encryptor . encrypt_message ( & encode_msg ! ( msg, 17 ) ) ) ;
935
- Self :: do_attempt_write_data ( & mut descriptor, peer) ;
973
+ self . do_attempt_write_data ( & mut descriptor, peer) ;
936
974
} ,
937
975
}
938
976
} else {
@@ -944,7 +982,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
944
982
945
983
for mut descriptor in peers. peers_needing_send . drain ( ) {
946
984
match peers. peers . get_mut ( & descriptor) {
947
- Some ( peer) => Self :: do_attempt_write_data ( & mut descriptor, peer) ,
985
+ Some ( peer) => self . do_attempt_write_data ( & mut descriptor, peer) ,
948
986
None => panic ! ( "Inconsistent peers set state!" ) ,
949
987
}
950
988
}
0 commit comments