@@ -19,7 +19,9 @@ use crate::ln::{ChannelId, PaymentPreimage, PaymentHash, PaymentSecret};
19
19
use crate :: ln:: channelmanager:: { AChannelManager , ChainParameters , ChannelManager , ChannelManagerReadArgs , RAACommitmentOrder , PaymentSendFailure , RecipientOnionFields , PaymentId , MIN_CLTV_EXPIRY_DELTA } ;
20
20
use crate :: ln:: features:: InitFeatures ;
21
21
use crate :: ln:: msgs;
22
- use crate :: ln:: msgs:: { ChannelMessageHandler , RoutingMessageHandler } ;
22
+ use crate :: ln:: msgs:: { ChannelMessageHandler , OnionMessageHandler , RoutingMessageHandler } ;
23
+ use crate :: ln:: peer_handler:: IgnoringMessageHandler ;
24
+ use crate :: onion_message:: OnionMessenger ;
23
25
use crate :: routing:: gossip:: { P2PGossipSync , NetworkGraph , NetworkUpdate } ;
24
26
use crate :: routing:: router:: { self , PaymentParameters , Route , RouteParameters } ;
25
27
use crate :: sign:: EntropySource ;
@@ -388,6 +390,7 @@ pub struct NodeCfg<'a> {
388
390
pub tx_broadcaster : & ' a test_utils:: TestBroadcaster ,
389
391
pub fee_estimator : & ' a test_utils:: TestFeeEstimator ,
390
392
pub router : test_utils:: TestRouter < ' a > ,
393
+ pub message_router : test_utils:: TestMessageRouter < ' a > ,
391
394
pub chain_monitor : test_utils:: TestChainMonitor < ' a > ,
392
395
pub keys_manager : & ' a test_utils:: TestKeysInterface ,
393
396
pub logger : & ' a test_utils:: TestLogger ,
@@ -407,6 +410,15 @@ type TestChannelManager<'node_cfg, 'chan_mon_cfg> = ChannelManager<
407
410
& ' chan_mon_cfg test_utils:: TestLogger ,
408
411
> ;
409
412
413
+ type TestOnionMessenger < ' chan_man , ' node_cfg , ' chan_mon_cfg > = OnionMessenger <
414
+ & ' node_cfg test_utils:: TestKeysInterface ,
415
+ & ' node_cfg test_utils:: TestKeysInterface ,
416
+ & ' chan_mon_cfg test_utils:: TestLogger ,
417
+ & ' node_cfg test_utils:: TestMessageRouter < ' chan_mon_cfg > ,
418
+ & ' chan_man TestChannelManager < ' node_cfg , ' chan_mon_cfg > ,
419
+ IgnoringMessageHandler ,
420
+ > ;
421
+
410
422
pub struct Node < ' chan_man , ' node_cfg : ' chan_man , ' chan_mon_cfg : ' node_cfg > {
411
423
pub chain_source : & ' chan_mon_cfg test_utils:: TestChainSource ,
412
424
pub tx_broadcaster : & ' chan_mon_cfg test_utils:: TestBroadcaster ,
@@ -415,6 +427,7 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
415
427
pub chain_monitor : & ' node_cfg test_utils:: TestChainMonitor < ' chan_mon_cfg > ,
416
428
pub keys_manager : & ' chan_mon_cfg test_utils:: TestKeysInterface ,
417
429
pub node : & ' chan_man TestChannelManager < ' node_cfg , ' chan_mon_cfg > ,
430
+ pub onion_messenger : TestOnionMessenger < ' chan_man , ' node_cfg , ' chan_mon_cfg > ,
418
431
pub network_graph : & ' node_cfg NetworkGraph < & ' chan_mon_cfg test_utils:: TestLogger > ,
419
432
pub gossip_sync : P2PGossipSync < & ' node_cfg NetworkGraph < & ' chan_mon_cfg test_utils:: TestLogger > , & ' chan_mon_cfg test_utils:: TestChainSource , & ' chan_mon_cfg test_utils:: TestLogger > ,
420
433
pub node_seed : [ u8 ; 32 ] ,
@@ -432,6 +445,14 @@ pub struct Node<'chan_man, 'node_cfg: 'chan_man, 'chan_mon_cfg: 'node_cfg> {
432
445
& ' chan_mon_cfg test_utils:: TestLogger ,
433
446
> ,
434
447
}
448
+
449
+ impl < ' a , ' b , ' c > Node < ' a , ' b , ' c > {
450
+ pub fn init_features ( & self , peer_node_id : & PublicKey ) -> InitFeatures {
451
+ self . override_init_features . borrow ( ) . clone ( )
452
+ . unwrap_or_else ( || self . node . init_features ( ) | self . onion_messenger . provided_init_features ( peer_node_id) )
453
+ }
454
+ }
455
+
435
456
#[ cfg( feature = "std" ) ]
436
457
impl < ' a , ' b , ' c > std:: panic:: UnwindSafe for Node < ' a , ' b , ' c > { }
437
458
#[ cfg( feature = "std" ) ]
@@ -2879,6 +2900,7 @@ pub fn create_node_cfgs_with_persisters<'a>(node_count: usize, chanmon_cfgs: &'a
2879
2900
tx_broadcaster : & chanmon_cfgs[ i] . tx_broadcaster ,
2880
2901
fee_estimator : & chanmon_cfgs[ i] . fee_estimator ,
2881
2902
router : test_utils:: TestRouter :: new ( network_graph. clone ( ) , & chanmon_cfgs[ i] . scorer ) ,
2903
+ message_router : test_utils:: TestMessageRouter :: new ( network_graph. clone ( ) ) ,
2882
2904
chain_monitor,
2883
2905
keys_manager : & chanmon_cfgs[ i] . keys_manager ,
2884
2906
node_seed : seed,
@@ -2932,14 +2954,18 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
2932
2954
let connect_style = Rc :: new ( RefCell :: new ( ConnectStyle :: random_style ( ) ) ) ;
2933
2955
2934
2956
for i in 0 ..node_count {
2957
+ let onion_messenger = OnionMessenger :: new (
2958
+ cfgs[ i] . keys_manager , cfgs[ i] . keys_manager , cfgs[ i] . logger , & cfgs[ i] . message_router ,
2959
+ & chan_mgrs[ i] , IgnoringMessageHandler { } ,
2960
+ ) ;
2935
2961
let gossip_sync = P2PGossipSync :: new ( cfgs[ i] . network_graph . as_ref ( ) , None , cfgs[ i] . logger ) ;
2936
2962
let wallet_source = Arc :: new ( test_utils:: TestWalletSource :: new ( SecretKey :: from_slice ( & [ i as u8 + 1 ; 32 ] ) . unwrap ( ) ) ) ;
2937
2963
nodes. push ( Node {
2938
2964
chain_source : cfgs[ i] . chain_source , tx_broadcaster : cfgs[ i] . tx_broadcaster ,
2939
2965
fee_estimator : cfgs[ i] . fee_estimator , router : & cfgs[ i] . router ,
2940
2966
chain_monitor : & cfgs[ i] . chain_monitor , keys_manager : & cfgs[ i] . keys_manager ,
2941
2967
node : & chan_mgrs[ i] , network_graph : cfgs[ i] . network_graph . as_ref ( ) , gossip_sync,
2942
- node_seed : cfgs[ i] . node_seed , network_chan_count : chan_count. clone ( ) ,
2968
+ node_seed : cfgs[ i] . node_seed , onion_messenger , network_chan_count : chan_count. clone ( ) ,
2943
2969
network_payment_count : payment_count. clone ( ) , logger : cfgs[ i] . logger ,
2944
2970
blocks : Arc :: clone ( & cfgs[ i] . tx_broadcaster . blocks ) ,
2945
2971
connect_style : Rc :: clone ( & connect_style) ,
@@ -2954,16 +2980,24 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
2954
2980
2955
2981
for i in 0 ..node_count {
2956
2982
for j in ( i+1 ) ..node_count {
2957
- nodes[ i] . node . peer_connected ( & nodes[ j] . node . get_our_node_id ( ) , & msgs:: Init {
2958
- features : nodes[ j] . override_init_features . borrow ( ) . clone ( ) . unwrap_or_else ( || nodes[ j] . node . init_features ( ) ) ,
2983
+ let node_id_i = nodes[ i] . node . get_our_node_id ( ) ;
2984
+ let node_id_j = nodes[ j] . node . get_our_node_id ( ) ;
2985
+
2986
+ let init_i = msgs:: Init {
2987
+ features : nodes[ i] . init_features ( & node_id_j) ,
2959
2988
networks : None ,
2960
2989
remote_network_address : None ,
2961
- } , true ) . unwrap ( ) ;
2962
- nodes [ j ] . node . peer_connected ( & nodes [ i ] . node . get_our_node_id ( ) , & msgs:: Init {
2963
- features : nodes[ i ] . override_init_features . borrow ( ) . clone ( ) . unwrap_or_else ( || nodes [ i ] . node . init_features ( ) ) ,
2990
+ } ;
2991
+ let init_j = msgs:: Init {
2992
+ features : nodes[ j ] . init_features ( & node_id_i ) ,
2964
2993
networks : None ,
2965
2994
remote_network_address : None ,
2966
- } , false ) . unwrap ( ) ;
2995
+ } ;
2996
+
2997
+ nodes[ i] . node . peer_connected ( & node_id_j, & init_j, true ) . unwrap ( ) ;
2998
+ nodes[ j] . node . peer_connected ( & node_id_i, & init_i, false ) . unwrap ( ) ;
2999
+ nodes[ i] . onion_messenger . peer_connected ( & node_id_j, & init_j, true ) . unwrap ( ) ;
3000
+ nodes[ j] . onion_messenger . peer_connected ( & node_id_i, & init_i, false ) . unwrap ( ) ;
2967
3001
}
2968
3002
}
2969
3003
0 commit comments