Skip to content

Commit 244ad7e

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

File tree

4 files changed

+176
-37
lines changed

4 files changed

+176
-37
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: u64, batch_amount: u8)->(Vec<(ChannelAnnouncement, NodeAnnouncement, NodeAnnouncement,ChannelUpdate,ChannelUpdate)>, i64);
588592
}
589593

590594
pub(crate) struct OnionRealm0HopData {

src/ln/peer_handler.rs

Lines changed: 48 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,42 @@ 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 as u64,(10-peer.pending_outbound_buffer.len()) as u8);
281+
for tuple in all_messages_tuple.0.iter(){
282+
encode_and_send_msg!(tuple.0, 256);
283+
encode_and_send_msg!(tuple.1, 257);
284+
encode_and_send_msg!(tuple.2, 257);
285+
encode_and_send_msg!(tuple.3, 258);
286+
encode_and_send_msg!(tuple.4, 258);
287+
}
288+
peer.last_synced_channel = all_messages_tuple.1;
289+
}
267290
let next_buff = match peer.pending_outbound_buffer.front() {
268291
None => return,
269292
Some(buff) => buff,
270293
};
271-
let should_be_reading = peer.pending_outbound_buffer.len() < 10;
272294

273-
let data_sent = descriptor.send_data(next_buff, peer.pending_outbound_buffer_first_msg_offset, should_be_reading);
295+
let data_sent = descriptor.send_data(&next_buff, peer.pending_outbound_buffer_first_msg_offset, should_be_reading);
274296
peer.pending_outbound_buffer_first_msg_offset += data_sent;
275297
if peer.pending_outbound_buffer_first_msg_offset == next_buff.len() { true } else { false }
276298
} {
@@ -297,7 +319,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
297319
None => panic!("Descriptor for write_event is not already known to PeerManager"),
298320
Some(peer) => {
299321
peer.awaiting_write_event = false;
300-
Self::do_attempt_write_data(descriptor, peer);
322+
self.do_attempt_write_data(descriptor, peer);
301323
}
302324
};
303325
Ok(())
@@ -511,6 +533,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
511533
if msg.local_features.supports_unknown_bits() { "present" } else { "none" },
512534
if msg.global_features.supports_unknown_bits() { "present" } else { "none" });
513535

536+
let do_they_require_sync = msg.local_features.initial_routing_sync();
514537
peer.their_global_features = Some(msg.global_features);
515538
peer.their_local_features = Some(msg.local_features);
516539

@@ -520,6 +543,10 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
520543
self.initial_syncs_sent.fetch_add(1, Ordering::AcqRel);
521544
local_features.set_initial_routing_sync();
522545
}
546+
547+
if do_they_require_sync {
548+
peer.last_synced_channel = 0; //set to larger than -1, means next sent message will trigger slow trickle of sync data
549+
}
523550
encode_and_send_msg!(msgs::Init {
524551
global_features: msgs::GlobalFeatures::new(),
525552
local_features,
@@ -667,7 +694,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
667694
}
668695
}
669696

670-
Self::do_attempt_write_data(peer_descriptor, peer);
697+
self.do_attempt_write_data(peer_descriptor, peer);
671698

672699
peer.pending_outbound_buffer.len() > 10 // pause_read
673700
}
@@ -724,7 +751,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
724751
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
725752
});
726753
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 33)));
727-
Self::do_attempt_write_data(&mut descriptor, peer);
754+
self.do_attempt_write_data(&mut descriptor, peer);
728755
},
729756
MessageSendEvent::SendOpenChannel { ref node_id, ref msg } => {
730757
log_trace!(self, "Handling SendOpenChannel event in peer_handler for node {} for channel {}",
@@ -734,7 +761,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
734761
//TODO: Drop the pending channel? (or just let it timeout, but that sucks)
735762
});
736763
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 32)));
737-
Self::do_attempt_write_data(&mut descriptor, peer);
764+
self.do_attempt_write_data(&mut descriptor, peer);
738765
},
739766
MessageSendEvent::SendFundingCreated { ref node_id, ref msg } => {
740767
log_trace!(self, "Handling SendFundingCreated event in peer_handler for node {} for channel {} (which becomes {})",
@@ -746,7 +773,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
746773
//they should just throw away this funding transaction
747774
});
748775
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 34)));
749-
Self::do_attempt_write_data(&mut descriptor, peer);
776+
self.do_attempt_write_data(&mut descriptor, peer);
750777
},
751778
MessageSendEvent::SendFundingSigned { ref node_id, ref msg } => {
752779
log_trace!(self, "Handling SendFundingSigned event in peer_handler for node {} for channel {}",
@@ -757,7 +784,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
757784
//they should just throw away this funding transaction
758785
});
759786
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 35)));
760-
Self::do_attempt_write_data(&mut descriptor, peer);
787+
self.do_attempt_write_data(&mut descriptor, peer);
761788
},
762789
MessageSendEvent::SendFundingLocked { ref node_id, ref msg } => {
763790
log_trace!(self, "Handling SendFundingLocked event in peer_handler for node {} for channel {}",
@@ -767,7 +794,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
767794
//TODO: Do whatever we're gonna do for handling dropped messages
768795
});
769796
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 36)));
770-
Self::do_attempt_write_data(&mut descriptor, peer);
797+
self.do_attempt_write_data(&mut descriptor, peer);
771798
},
772799
MessageSendEvent::SendAnnouncementSignatures { ref node_id, ref msg } => {
773800
log_trace!(self, "Handling SendAnnouncementSignatures event in peer_handler for node {} for channel {})",
@@ -778,7 +805,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
778805
//they should just throw away this funding transaction
779806
});
780807
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 259)));
781-
Self::do_attempt_write_data(&mut descriptor, peer);
808+
self.do_attempt_write_data(&mut descriptor, peer);
782809
},
783810
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 } } => {
784811
log_trace!(self, "Handling UpdateHTLCs event in peer_handler for node {} with {} adds, {} fulfills, {} fails for channel {}",
@@ -806,7 +833,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
806833
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 134)));
807834
}
808835
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);
836+
self.do_attempt_write_data(&mut descriptor, peer);
810837
},
811838
MessageSendEvent::SendRevokeAndACK { ref node_id, ref msg } => {
812839
log_trace!(self, "Handling SendRevokeAndACK event in peer_handler for node {} for channel {}",
@@ -816,7 +843,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
816843
//TODO: Do whatever we're gonna do for handling dropped messages
817844
});
818845
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 133)));
819-
Self::do_attempt_write_data(&mut descriptor, peer);
846+
self.do_attempt_write_data(&mut descriptor, peer);
820847
},
821848
MessageSendEvent::SendClosingSigned { ref node_id, ref msg } => {
822849
log_trace!(self, "Handling SendClosingSigned event in peer_handler for node {} for channel {}",
@@ -826,7 +853,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
826853
//TODO: Do whatever we're gonna do for handling dropped messages
827854
});
828855
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 39)));
829-
Self::do_attempt_write_data(&mut descriptor, peer);
856+
self.do_attempt_write_data(&mut descriptor, peer);
830857
},
831858
MessageSendEvent::SendShutdown { ref node_id, ref msg } => {
832859
log_trace!(self, "Handling Shutdown event in peer_handler for node {} for channel {}",
@@ -836,7 +863,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
836863
//TODO: Do whatever we're gonna do for handling dropped messages
837864
});
838865
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 38)));
839-
Self::do_attempt_write_data(&mut descriptor, peer);
866+
self.do_attempt_write_data(&mut descriptor, peer);
840867
},
841868
MessageSendEvent::SendChannelReestablish { ref node_id, ref msg } => {
842869
log_trace!(self, "Handling SendChannelReestablish event in peer_handler for node {} for channel {}",
@@ -846,7 +873,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
846873
//TODO: Do whatever we're gonna do for handling dropped messages
847874
});
848875
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 136)));
849-
Self::do_attempt_write_data(&mut descriptor, peer);
876+
self.do_attempt_write_data(&mut descriptor, peer);
850877
},
851878
MessageSendEvent::BroadcastChannelAnnouncement { ref msg, ref update_msg } => {
852879
log_trace!(self, "Handling BroadcastChannelAnnouncement event in peer_handler for short channel id {}", msg.contents.short_channel_id);
@@ -868,7 +895,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
868895
}
869896
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_msg[..]));
870897
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_update_msg[..]));
871-
Self::do_attempt_write_data(&mut (*descriptor).clone(), peer);
898+
self.do_attempt_write_data(&mut (*descriptor).clone(), peer);
872899
}
873900
}
874901
},
@@ -882,7 +909,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
882909
continue
883910
}
884911
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encoded_msg[..]));
885-
Self::do_attempt_write_data(&mut (*descriptor).clone(), peer);
912+
self.do_attempt_write_data(&mut (*descriptor).clone(), peer);
886913
}
887914
}
888915
},
@@ -903,7 +930,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
903930
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 17)));
904931
// This isn't guaranteed to work, but if there is enough free
905932
// room in the send buffer, put the error message there...
906-
Self::do_attempt_write_data(&mut descriptor, &mut peer);
933+
self.do_attempt_write_data(&mut descriptor, &mut peer);
907934
} else {
908935
log_trace!(self, "Handling DisconnectPeer HandleError event in peer_handler for node {} with no message", log_pubkey!(node_id));
909936
}
@@ -921,7 +948,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
921948
//TODO: Do whatever we're gonna do for handling dropped messages
922949
});
923950
peer.pending_outbound_buffer.push_back(peer.channel_encryptor.encrypt_message(&encode_msg!(msg, 17)));
924-
Self::do_attempt_write_data(&mut descriptor, peer);
951+
self.do_attempt_write_data(&mut descriptor, peer);
925952
},
926953
}
927954
} else {
@@ -933,7 +960,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
933960

934961
for mut descriptor in peers.peers_needing_send.drain() {
935962
match peers.peers.get_mut(&descriptor) {
936-
Some(peer) => Self::do_attempt_write_data(&mut descriptor, peer),
963+
Some(peer) => self.do_attempt_write_data(&mut descriptor, peer),
937964
None => panic!("Inconsistent peers set state!"),
938965
}
939966
}

0 commit comments

Comments
 (0)