Skip to content

Commit 4577cae

Browse files
committed
Handle-initial_routing_sync-requests-from-peers-in-their-Init-messages
1 parent b297d5b commit 4577cae

File tree

4 files changed

+167
-39
lines changed

4 files changed

+167
-39
lines changed

src/ln/msgs.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ pub struct AnnouncementSignatures {
333333
}
334334

335335
/// An address which can be used to connect to a remote peer
336-
#[derive(Clone)]
336+
#[derive(Clone, PartialEq)]
337337
pub enum NetAddress {
338338
/// An IPv4 address/port on which the peer is listenting.
339339
IPv4 {
@@ -380,7 +380,7 @@ impl NetAddress {
380380
}
381381
}
382382
}
383-
383+
#[derive(Clone, PartialEq)]
384384
// Only exposed as broadcast of node_announcement should be filtered by node_id
385385
/// The unsigned part of a node_announcement
386386
pub struct UnsignedNodeAnnouncement {
@@ -397,6 +397,7 @@ pub struct UnsignedNodeAnnouncement {
397397
pub(crate) excess_address_data: Vec<u8>,
398398
pub(crate) excess_data: Vec<u8>,
399399
}
400+
#[derive(Clone, PartialEq)]
400401
/// A node_announcement message to be sent or received from a peer
401402
pub struct NodeAnnouncement {
402403
pub(crate) signature: Signature,
@@ -585,6 +586,9 @@ pub trait RoutingMessageHandler : Send + Sync {
585586
fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, HandleError>;
586587
/// Handle some updates to the route graph that we learned due to an outbound failed payment.
587588
fn handle_htlc_fail_channel_update(&self, update: &HTLCFailChannelUpdate);
589+
///Gets a subset of the messages required to dump our routing table to a remote node, starting at the short_channel_id indicated by starting_point and including batch_amount entries
590+
/// This function will start iterating at 0 if the starting_point is < 0.
591+
fn get_next_announcements(&self, starting_point: i64, batch_amount: u8)->(Vec<(ChannelAnnouncement, ChannelUpdate, NodeAnnouncement, NodeAnnouncement)>, i64);
588592
}
589593

590594
pub(crate) struct OnionRealm0HopData {

src/ln/peer_handler.rs

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ struct Peer {
102102
pending_read_buffer: Vec<u8>,
103103
pending_read_buffer_pos: usize,
104104
pending_read_is_header: bool,
105+
last_synced_channel : i64,
105106
}
106107

107108
struct PeerHolder<Descriptor: SocketDescriptor> {
@@ -221,6 +222,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
221222
pending_read_buffer: pending_read_buffer,
222223
pending_read_buffer_pos: 0,
223224
pending_read_is_header: false,
225+
last_synced_channel : -1,
224226
}).is_some() {
225227
panic!("PeerManager driver duplicated descriptors!");
226228
};
@@ -255,22 +257,41 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
255257
pending_read_buffer: pending_read_buffer,
256258
pending_read_buffer_pos: 0,
257259
pending_read_is_header: false,
260+
last_synced_channel : -1,
258261
}).is_some() {
259262
panic!("PeerManager driver duplicated descriptors!");
260263
};
261264
Ok(())
262265
}
263266

264-
fn do_attempt_write_data(descriptor: &mut Descriptor, peer: &mut Peer) {
267+
fn do_attempt_write_data(&self, descriptor: &mut Descriptor, peer: &mut Peer) {
268+
macro_rules! encode_and_send_msg {
269+
($msg: expr, $msg_code: expr) => {
270+
{
271+
log_trace!(self, "Encoding and sending message of type {} to {}", $msg_code, log_pubkey!(peer.their_node_id.unwrap()));
272+
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!($msg, $msg_code)[..]));
273+
}
274+
}
275+
}
265276
while !peer.awaiting_write_event {
266277
if {
278+
let should_be_reading = peer.pending_outbound_buffer.len() < 10;
279+
if (peer.last_synced_channel > -1) &&(should_be_reading){
280+
let all_messages_tuple = self.message_handler.route_handler.get_next_announcements(peer.last_synced_channel,(peer.pending_outbound_buffer.len()-10) as u8);
281+
for i in 0..all_messages_tuple.0.len(){
282+
encode_and_send_msg!(all_messages_tuple.0[i].0.clone(), 256);
283+
encode_and_send_msg!(all_messages_tuple.0[i].2.clone(), 257);
284+
encode_and_send_msg!(all_messages_tuple.0[i].3.clone(), 257);
285+
encode_and_send_msg!(all_messages_tuple.0[i].1.clone(), 258);
286+
}
287+
peer.last_synced_channel = all_messages_tuple.1;
288+
}
267289
let next_buff = match peer.pending_outbound_buffer.front() {
268290
None => return,
269291
Some(buff) => buff,
270292
};
271-
let should_be_reading = peer.pending_outbound_buffer.len() < 10;
272293

273-
let data_sent = descriptor.send_data(next_buff, peer.pending_outbound_buffer_first_msg_offset, should_be_reading);
294+
let data_sent = descriptor.send_data(&next_buff, peer.pending_outbound_buffer_first_msg_offset, should_be_reading);
274295
peer.pending_outbound_buffer_first_msg_offset += data_sent;
275296
if peer.pending_outbound_buffer_first_msg_offset == next_buff.len() { true } else { false }
276297
} {
@@ -297,7 +318,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
297318
None => panic!("Descriptor for write_event is not already known to PeerManager"),
298319
Some(peer) => {
299320
peer.awaiting_write_event = false;
300-
Self::do_attempt_write_data(descriptor, peer);
321+
self.do_attempt_write_data(descriptor, peer);
301322
}
302323
};
303324
Ok(())
@@ -511,6 +532,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
511532
if msg.local_features.supports_unknown_bits() { "present" } else { "none" },
512533
if msg.global_features.supports_unknown_bits() { "present" } else { "none" });
513534

535+
let do_they_require_sync = msg.local_features.initial_routing_sync();
514536
peer.their_global_features = Some(msg.global_features);
515537
peer.their_local_features = Some(msg.local_features);
516538

@@ -520,6 +542,10 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
520542
self.initial_syncs_sent.fetch_add(1, Ordering::AcqRel);
521543
local_features.set_initial_routing_sync();
522544
}
545+
546+
if do_they_require_sync {
547+
peer.last_synced_channel = 0; //set to larger than -1, means next sent message will trigger slow trickle of sync data
548+
}
523549
encode_and_send_msg!(msgs::Init {
524550
global_features: msgs::GlobalFeatures::new(),
525551
local_features,
@@ -667,7 +693,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
667693
}
668694
}
669695

670-
Self::do_attempt_write_data(peer_descriptor, peer);
696+
self.do_attempt_write_data(peer_descriptor, peer);
671697

672698
peer.pending_outbound_buffer.len() > 10 // pause_read
673699
}
@@ -724,7 +750,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
724750
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
725751
});
726752
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 33)));
727-
Self::do_attempt_write_data(&mut descriptor, peer);
753+
self.do_attempt_write_data(&mut descriptor, peer);
728754
},
729755
MessageSendEvent::SendOpenChannel { ref node_id, ref msg } => {
730756
log_trace!(self, "Handling SendOpenChannel event in peer_handler for node {} for channel {}",
@@ -734,7 +760,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
734760
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
735761
});
736762
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 32)));
737-
Self::do_attempt_write_data(&mut descriptor, peer);
763+
self.do_attempt_write_data(&mut descriptor, peer);
738764
},
739765
MessageSendEvent::SendFundingCreated { ref node_id, ref msg } => {
740766
log_trace!(self, "Handling SendFundingCreated event in peer_handler for node {} for channel {} (which becomes {})",
@@ -746,7 +772,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
746772
//they should just throw away this funding transaction
747773
});
748774
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 34)));
749-
Self::do_attempt_write_data(&mut descriptor, peer);
775+
self.do_attempt_write_data(&mut descriptor, peer);
750776
},
751777
MessageSendEvent::SendFundingSigned { ref node_id, ref msg } => {
752778
log_trace!(self, "Handling SendFundingSigned event in peer_handler for node {} for channel {}",
@@ -757,7 +783,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
757783
//they should just throw away this funding transaction
758784
});
759785
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 35)));
760-
Self::do_attempt_write_data(&mut descriptor, peer);
786+
self.do_attempt_write_data(&mut descriptor, peer);
761787
},
762788
MessageSendEvent::SendFundingLocked { ref node_id, ref msg } => {
763789
log_trace!(self, "Handling SendFundingLocked event in peer_handler for node {} for channel {}",
@@ -767,7 +793,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
767793
//TODO: Do whatever we're gonna do for handling dropped messages
768794
});
769795
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 36)));
770-
Self::do_attempt_write_data(&mut descriptor, peer);
796+
self.do_attempt_write_data(&mut descriptor, peer);
771797
},
772798
MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
773799
log_trace!(self, "Handling SendAnnouncementSignatures event in peer_handler for node {} for channel {})",
@@ -778,7 +804,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
778804
//they should just throw away this funding transaction
779805
});
780806
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 259)));
781-
Self::do_attempt_write_data(&mut descriptor, peer);
807+
self.do_attempt_write_data(&mut descriptor, peer);
782808
},
783809
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 } } => {
784810
log_trace!(self, "Handling UpdateHTLCs event in peer_handler for node {} with {} adds, {} fulfills, {} fails for channel {}",
@@ -806,7 +832,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
806832
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 134)));
807833
}
808834
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(commitment_signed, 132)));
809-
Self::do_attempt_write_data(&mut descriptor, peer);
835+
self.do_attempt_write_data(&mut descriptor, peer);
810836
},
811837
MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
812838
log_trace!(self, "Handling SendRevokeAndACK event in peer_handler for node {} for channel {}",
@@ -816,7 +842,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
816842
//TODO: Do whatever we're gonna do for handling dropped messages
817843
});
818844
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 133)));
819-
Self::do_attempt_write_data(&mut descriptor, peer);
845+
self.do_attempt_write_data(&mut descriptor, peer);
820846
},
821847
MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
822848
log_trace!(self, "Handling SendClosingSigned event in peer_handler for node {} for channel {}",
@@ -826,7 +852,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
826852
//TODO: Do whatever we're gonna do for handling dropped messages
827853
});
828854
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 39)));
829-
Self::do_attempt_write_data(&mut descriptor, peer);
855+
self.do_attempt_write_data(&mut descriptor, peer);
830856
},
831857
MessageSendEvent::SendShutdown { ref node_id, ref msg } => {
832858
log_trace!(self, "Handling Shutdown event in peer_handler for node {} for channel {}",
@@ -836,7 +862,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
836862
//TODO: Do whatever we're gonna do for handling dropped messages
837863
});
838864
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 38)));
839-
Self::do_attempt_write_data(&mut descriptor, peer);
865+
self.do_attempt_write_data(&mut descriptor, peer);
840866
},
841867
MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } => {
842868
log_trace!(self, "Handling SendChannelReestablish event in peer_handler for node {} for channel {}",
@@ -846,7 +872,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
846872
//TODO: Do whatever we're gonna do for handling dropped messages
847873
});
848874
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 136)));
849-
Self::do_attempt_write_data(&mut descriptor, peer);
875+
self.do_attempt_write_data(&mut descriptor, peer);
850876
},
851877
MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
852878
log_trace!(self, "Handling BroadcastChannelAnnouncement event in peer_handler for short channel id {}", msg.contents.short_channel_id);
@@ -868,7 +894,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
868894
}
869895
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_msg[..]));
870896
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_update_msg[..]));
871-
Self::do_attempt_write_data(&mut (*descriptor).clone(), peer);
897+
self.do_attempt_write_data(&mut (*descriptor).clone(), peer);
872898
}
873899
}
874900
},
@@ -882,7 +908,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
882908
continue
883909
}
884910
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_msg[..]));
885-
Self::do_attempt_write_data(&mut (*descriptor).clone(), peer);
911+
self.do_attempt_write_data(&mut (*descriptor).clone(), peer);
886912
}
887913
}
888914
},
@@ -903,7 +929,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
903929
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 17)));
904930
// This isn't guaranteed to work, but if there is enough free
905931
// room in the send buffer, put the error message there...
906-
Self::do_attempt_write_data(&mut descriptor, &mut peer);
932+
self.do_attempt_write_data(&mut descriptor, &mut peer);
907933
} else {
908934
log_trace!(self, "Handling DisconnectPeer HandleError event in peer_handler for node {} with no message", log_pubkey!(node_id));
909935
}
@@ -921,7 +947,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
921947
//TODO: Do whatever we're gonna do for handling dropped messages
922948
});
923949
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 17)));
924-
Self::do_attempt_write_data(&mut descriptor, peer);
950+
self.do_attempt_write_data(&mut descriptor, peer);
925951
},
926952
}
927953
} else {
@@ -933,7 +959,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
933959

934960
for mut descriptor in peers.peers_needing_send.drain() {
935961
match peers.peers.get_mut(&descriptor) {
936-
Some(peer) => Self::do_attempt_write_data(&mut descriptor, peer),
962+
Some(peer) => self.do_attempt_write_data(&mut descriptor, peer),
937963
None => panic!("Inconsistent peers set state!"),
938964
}
939965
}

0 commit comments

Comments
 (0)