Skip to content

Commit bf7f98e

Browse files
committed
Added update channel
Added hashmap to keep track of sent syncs
1 parent 6f0a009 commit bf7f98e

File tree

3 files changed

+38
-63
lines changed

3 files changed

+38
-63
lines changed

src/ln/msgs.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -563,19 +563,15 @@ pub trait RoutingMessageHandler : Send + Sync {
563563
fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, HandleError>;
564564
/// Handle some updates to the route graph that we learned due to an outbound failed payment.
565565
fn handle_htlc_fail_channel_update(&self, update: &HTLCFailChannelUpdate);
566-
}
567-
568-
///A trait to describe the functions required to access the local network topology
569-
pub trait NetworkTopology : Send + Sync {
570566
///This should return a vec of all possible channel announcements or an error
571-
fn get_all_channel_announcements(&self)-> Result<Vec<ChannelAnnouncement>, std::fmt::Error>;
567+
fn get_all_channel_announcements(&self)-> Result<Vec<(ChannelAnnouncement,ChannelUpdate)>, std::fmt::Error>;
572568
///This should return a vec of all possible node announcements or an error
573569
fn get_all_node_announcements(&self)-> Result<Vec<NodeAnnouncement>, std::fmt::Error>;
574570
}
575571

576-
///this is a combination trait of NetworkTopology and RoutingMerssageHandler
577-
pub trait NetworkAPI : RoutingMessageHandler + NetworkTopology{}
578-
impl<T> NetworkAPI for T where T: RoutingMessageHandler+NetworkTopology{}
572+
573+
574+
579575

580576
pub(crate) struct OnionRealm0HopData {
581577
pub(crate) short_channel_id: u64,

src/ln/peer_handler.rs

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub struct MessageHandler {
2727
pub chan_handler: Arc<msgs::ChannelMessageHandler>,
2828
/// A message handler which handles messages updating our knowledge of the network channel
2929
/// graph. Usually this is just a Router object.
30-
pub route_handler: Arc<msgs::NetworkAPI>,
30+
pub route_handler: Arc<msgs::RoutingMessageHandler>,
3131
}
3232

3333
/// Provides an object which can be used to send data to and which uniquely identifies a connection
@@ -131,6 +131,7 @@ pub struct PeerManager<Descriptor: SocketDescriptor> {
131131
our_node_secret: SecretKey,
132132
initial_syncs_sent: AtomicUsize,
133133
logger: Arc<Logger>,
134+
sent_network_sync_info : HashMap<PublicKey,bool>,
134135
}
135136

136137
struct VecWriter(Vec<u8>);
@@ -168,6 +169,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
168169
our_node_secret: our_node_secret,
169170
initial_syncs_sent: AtomicUsize::new(0),
170171
logger,
172+
sent_network_sync_info: HashMap::new(),
171173
}
172174
}
173175

@@ -312,7 +314,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
312314
/// course of this function!
313315
///
314316
/// Panics if the descriptor was not previously registered in a new_*_connection event.
315-
pub fn read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
317+
pub fn read_event(&mut self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
316318
match self.do_read_event(peer_descriptor, data) {
317319
Ok(res) => Ok(res),
318320
Err(e) => {
@@ -322,7 +324,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
322324
}
323325
}
324326

325-
fn do_read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
327+
fn do_read_event(&mut self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
326328
let pause_read = {
327329
let mut peers_lock = self.peers.lock().unwrap();
328330
let peers = peers_lock.borrow_parts();
@@ -515,13 +517,24 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
515517
if self.initial_syncs_sent.load(Ordering::Acquire) < INITIAL_SYNCS_TO_SEND {
516518
self.initial_syncs_sent.fetch_add(1, Ordering::AcqRel);
517519
local_features.set_initial_routing_sync();
518-
let channel_messages = self.message_handler.route_handler.get_all_channel_announcements().unwrap();
519-
let node_messages = self.message_handler.route_handler.get_all_node_announcements().unwrap();
520-
for message in channel_messages.iter(){
521-
encode_and_send_msg!(message, 256);
522-
}
523-
for message in node_messages.iter(){
524-
encode_and_send_msg!(message, 257);
520+
if let Some(i) = peer.their_node_id{
521+
let their_id = i;
522+
if self.sent_network_sync_info.contains_key(&their_id){
523+
let channel_messages_tuple = self.message_handler.route_handler.get_all_channel_announcements().unwrap();
524+
let channel_announcements:Vec<msgs::ChannelAnnouncement> = channel_messages_tuple.clone().into_iter().map(|x| { x.0 }).collect();
525+
let channel_updates:Vec<msgs::ChannelUpdate> = channel_messages_tuple.into_iter().map(|x| { x.1 }).collect();
526+
let node_messages = self.message_handler.route_handler.get_all_node_announcements().unwrap();
527+
for message in channel_announcements.iter(){
528+
encode_and_send_msg!(message, 256);
529+
}
530+
for message in channel_updates.iter(){
531+
encode_and_send_msg!(message, 256);
532+
}
533+
for message in node_messages.iter(){
534+
encode_and_send_msg!(message, 257);
535+
}
536+
self.sent_network_sync_info.insert(their_id,true);
537+
}
525538
}
526539
}
527540
encode_and_send_msg!(msgs::Init {

src/ln/router.rs

Lines changed: 11 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ use bitcoin::blockdata::opcodes;
1313

1414
use chain::chaininterface::{ChainError, ChainWatchInterface};
1515
use ln::channelmanager;
16-
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures,NetworkTopology};
16+
17+
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures};
1718
use ln::msgs;
1819
use util::ser::Writeable;
1920
use util::logger::Logger;
@@ -71,6 +72,7 @@ struct ChannelInfo {
7172
two_to_one: DirectionalChannelInfo,
7273
//this is cached here so we can send out it later if required by route_init_sync
7374
announcement_message : Option<msgs::ChannelAnnouncement>,
75+
last_update_message : Option<msgs::ChannelUpdate>,
7476
}
7577

7678
impl std::fmt::Display for ChannelInfo {
@@ -298,6 +300,7 @@ impl RoutingMessageHandler for Router {
298300
bitcoin_key : msg.contents.bitcoin_key_2.clone(),
299301
},
300302
announcement_message : Some(msg.clone()),
303+
last_update_message : None,
301304
};
302305

303306
match network.channels.entry(NetworkMap::get_key(msg.contents.short_channel_id, msg.contents.chain_hash)) {
@@ -392,6 +395,7 @@ impl RoutingMessageHandler for Router {
392395
}
393396
}
394397

398+
channel.last_update_message = Some(msg.clone());
395399
let msg_hash = Message::from_slice(&Sha256dHash::from_data(&msg.contents.encode()[..])[..]).unwrap();
396400
if msg.contents.flags & 1 == 1 {
397401
dest_node_id = channel.one_to_two.src_node_id.clone();
@@ -436,42 +440,18 @@ impl RoutingMessageHandler for Router {
436440

437441
Ok(msg.contents.excess_data.is_empty())
438442
}
439-
}
440-
441-
impl NetworkTopology for Router {
442-
fn get_all_channel_announcements(&self)-> Result<Vec<msgs::ChannelAnnouncement>, std::fmt::Error>{
443+
fn get_all_channel_announcements(&self)-> Result<Vec<(msgs::ChannelAnnouncement, msgs::ChannelUpdate)>, std::fmt::Error>{
443444
let mut result = Vec::new();
444445
let network = self.network_map.read().unwrap();
445446
for (key, value) in network.channels.iter(){
446447
if let Some(ref i) = value.announcement_message{
447-
result.push(i.clone());
448+
if let Some(ref j) = value.last_update_message{
449+
let temp_tuple = (i.clone(),j.clone());
450+
result.push(temp_tuple);
451+
}
448452
}
449453
}
450454
return Ok(result)
451-
/* #[cfg(not(feature = "non_bitcoin_chain_hash_routing"))]
452-
return Ok(Vec::new());
453-
#[cfg(feature = "non_bitcoin_chain_hash_routing")]{
454-
let result = Vec::new();
455-
let network = self.network_map.read().unwrap();
456-
for (key, value) in network.channels.iter(){
457-
let (id, chainhash) = key;
458-
let msg_contents = msgs::UnsignedChannelAnnouncement {
459-
features: value.features.clone(),
460-
chain_hash: chainhash,
461-
short_channel_id: id.clone(),
462-
node_id_1: value.one_to_two.src_node_id.clone(),
463-
node_id_2: value.two_to_one.src_node_id.clone(),
464-
bitcoin_key_1: value.one_to_two.bitcoin_key.clone(),
465-
bitcoin_key_2: value.two_to_one.bitcoin_key.clone(),
466-
excess_data: Vec::new()};
467-
let msg_hash = Message::from_slice(&Sha256dHash::from_data(&msg_contents.encode()[..])[..]).unwrap();
468-
let msg_signature = self.secp_ctx.sign(&msg_hash, key);
469-
result.push(msgs::ChannelAnnouncement {
470-
signature: msg_signature,
471-
contents: msg_contents,
472-
})
473-
}
474-
return Ok(result)}*/
475455
}
476456
///This function generates a vec of all node_annoucment messages for all nodes it known of
477457
fn get_all_node_announcements(&self)-> Result<Vec<msgs::NodeAnnouncement>, std::fmt::Error>{
@@ -481,25 +461,11 @@ impl NetworkTopology for Router {
481461
if let Some(ref i) = value.announcement_message{
482462
result.push(i.clone());
483463
}
484-
/*let msg_contents = msgs::UnsignedNodeAnnouncement{
485-
features: value.features.clone(),
486-
timestamp: value.last_update,
487-
node_id: key.clone(),
488-
rgb: value.rgb.clone(),
489-
alias: value.alias.clone(),
490-
addresses: value.addresses.clone(),
491-
excess_address_data: Vec::new(),
492-
excess_data: Vec::new(),};
493-
let msg_hash = Message::from_slice(&Sha256dHash::from_data(&msg_contents.encode()[..])[..]).unwrap();
494-
let msg_signature = self.secp_ctx.sign(&msg_hash, key);
495-
result.push(msgs::NodeAnnouncement {
496-
signature: msg_signature,
497-
contents: msg_contents,
498-
})*/
499464
}
500465
Ok(result)
501466
}
502467
}
468+
503469
#[derive(Eq, PartialEq)]
504470
struct RouteGraphNode {
505471
pubkey: PublicKey,

0 commit comments

Comments
 (0)