@@ -13,7 +13,8 @@ use bitcoin::blockdata::opcodes;
13
13
14
14
use chain:: chaininterface:: { ChainError , ChainWatchInterface } ;
15
15
use ln:: channelmanager;
16
- use ln:: msgs:: { ErrorAction , HandleError , RoutingMessageHandler , NetAddress , GlobalFeatures , NetworkTopology } ;
16
+
17
+ use ln:: msgs:: { ErrorAction , HandleError , RoutingMessageHandler , NetAddress , GlobalFeatures } ;
17
18
use ln:: msgs;
18
19
use util:: ser:: Writeable ;
19
20
use util:: logger:: Logger ;
@@ -71,6 +72,7 @@ struct ChannelInfo {
71
72
two_to_one : DirectionalChannelInfo ,
72
73
//this is cached here so we can send out it later if required by route_init_sync
73
74
announcement_message : Option < msgs:: ChannelAnnouncement > ,
75
+ last_update_message : Option < msgs:: ChannelUpdate > ,
74
76
}
75
77
76
78
impl std:: fmt:: Display for ChannelInfo {
@@ -298,6 +300,7 @@ impl RoutingMessageHandler for Router {
298
300
bitcoin_key : msg. contents . bitcoin_key_2 . clone ( ) ,
299
301
} ,
300
302
announcement_message : Some ( msg. clone ( ) ) ,
303
+ last_update_message : None ,
301
304
} ;
302
305
303
306
match network. channels . entry ( NetworkMap :: get_key ( msg. contents . short_channel_id , msg. contents . chain_hash ) ) {
@@ -392,6 +395,7 @@ impl RoutingMessageHandler for Router {
392
395
}
393
396
}
394
397
398
+ channel. last_update_message = Some ( msg. clone ( ) ) ;
395
399
let msg_hash = Message :: from_slice ( & Sha256dHash :: from_data ( & msg. contents . encode ( ) [ ..] ) [ ..] ) . unwrap ( ) ;
396
400
if msg. contents . flags & 1 == 1 {
397
401
dest_node_id = channel. one_to_two . src_node_id . clone ( ) ;
@@ -436,42 +440,18 @@ impl RoutingMessageHandler for Router {
436
440
437
441
Ok ( msg. contents . excess_data . is_empty ( ) )
438
442
}
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 > {
443
444
let mut result = Vec :: new ( ) ;
444
445
let network = self . network_map . read ( ) . unwrap ( ) ;
445
446
for ( key, value) in network. channels . iter ( ) {
446
447
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
+ }
448
452
}
449
453
}
450
454
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)}*/
475
455
}
476
456
///This function generates a vec of all node_annoucment messages for all nodes it known of
477
457
fn get_all_node_announcements ( & self ) -> Result < Vec < msgs:: NodeAnnouncement > , std:: fmt:: Error > {
@@ -481,25 +461,11 @@ impl NetworkTopology for Router {
481
461
if let Some ( ref i) = value. announcement_message {
482
462
result. push ( i. clone ( ) ) ;
483
463
}
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
- })*/
499
464
}
500
465
Ok ( result)
501
466
}
502
467
}
468
+
503
469
#[ derive( Eq , PartialEq ) ]
504
470
struct RouteGraphNode {
505
471
pubkey : PublicKey ,
0 commit comments