78
78
mod balance;
79
79
mod builder;
80
80
mod config;
81
+ mod connection;
81
82
mod error;
82
83
mod event;
83
84
mod fee_estimator;
@@ -124,6 +125,7 @@ use config::{
124
125
LDK_PAYMENT_RETRY_TIMEOUT , NODE_ANN_BCAST_INTERVAL , PEER_RECONNECTION_INTERVAL ,
125
126
RGS_SYNC_INTERVAL , WALLET_SYNC_INTERVAL_MINIMUM_SECS ,
126
127
} ;
128
+ use connection:: ConnectionManager ;
127
129
use event:: { EventHandler , EventQueue } ;
128
130
use gossip:: GossipSource ;
129
131
use liquidity:: LiquiditySource ;
@@ -187,6 +189,7 @@ pub struct Node {
187
189
chain_monitor : Arc < ChainMonitor > ,
188
190
output_sweeper : Arc < Sweeper > ,
189
191
peer_manager : Arc < PeerManager > ,
192
+ connection_manager : Arc < ConnectionManager < Arc < FilesystemLogger > > > ,
190
193
keys_manager : Arc < KeysManager > ,
191
194
network_graph : Arc < NetworkGraph > ,
192
195
gossip_source : Arc < GossipSource > ,
@@ -498,6 +501,7 @@ impl Node {
498
501
}
499
502
500
503
// Regularly reconnect to persisted peers.
504
+ let connect_cm = Arc :: clone ( & self . connection_manager ) ;
501
505
let connect_pm = Arc :: clone ( & self . peer_manager ) ;
502
506
let connect_logger = Arc :: clone ( & self . logger ) ;
503
507
let connect_peer_store = Arc :: clone ( & self . peer_store ) ;
@@ -518,11 +522,9 @@ impl Node {
518
522
. collect:: <Vec <_>>( ) ;
519
523
520
524
for peer_info in connect_peer_store. list_peers( ) . iter( ) . filter( |info| !pm_peers. contains( & info. node_id) ) {
521
- let res = do_connect_peer(
525
+ let res = connect_cm . do_connect_peer(
522
526
peer_info. node_id,
523
527
peer_info. address. clone( ) ,
524
- Arc :: clone( & connect_pm) ,
525
- Arc :: clone( & connect_logger) ,
526
528
) . await ;
527
529
match res {
528
530
Ok ( _) => {
@@ -871,14 +873,13 @@ impl Node {
871
873
872
874
let con_node_id = peer_info. node_id ;
873
875
let con_addr = peer_info. address . clone ( ) ;
874
- let con_logger = Arc :: clone ( & self . logger ) ;
875
- let con_pm = Arc :: clone ( & self . peer_manager ) ;
876
+ let con_cm = Arc :: clone ( & self . connection_manager ) ;
876
877
877
878
// We need to use our main runtime here as a local runtime might not be around to poll
878
879
// connection futures going forward.
879
880
tokio:: task:: block_in_place ( move || {
880
881
runtime. block_on ( async move {
881
- connect_peer_if_necessary ( con_node_id, con_addr, con_pm , con_logger ) . await
882
+ con_cm . connect_peer_if_necessary ( con_node_id, con_addr) . await
882
883
} )
883
884
} ) ?;
884
885
@@ -944,14 +945,13 @@ impl Node {
944
945
945
946
let con_node_id = peer_info. node_id ;
946
947
let con_addr = peer_info. address . clone ( ) ;
947
- let con_logger = Arc :: clone ( & self . logger ) ;
948
- let con_pm = Arc :: clone ( & self . peer_manager ) ;
948
+ let con_cm = Arc :: clone ( & self . connection_manager ) ;
949
949
950
950
// We need to use our main runtime here as a local runtime might not be around to poll
951
951
// connection futures going forward.
952
952
tokio:: task:: block_in_place ( move || {
953
953
runtime. block_on ( async move {
954
- connect_peer_if_necessary ( con_node_id, con_addr, con_pm , con_logger ) . await
954
+ con_cm . connect_peer_if_necessary ( con_node_id, con_addr) . await
955
955
} )
956
956
} ) ?;
957
957
@@ -1601,14 +1601,13 @@ impl Node {
1601
1601
1602
1602
let con_node_id = peer_info. node_id ;
1603
1603
let con_addr = peer_info. address . clone ( ) ;
1604
- let con_logger = Arc :: clone ( & self . logger ) ;
1605
- let con_pm = Arc :: clone ( & self . peer_manager ) ;
1604
+ let con_cm = Arc :: clone ( & self . connection_manager ) ;
1606
1605
1607
1606
// We need to use our main runtime here as a local runtime might not be around to poll
1608
1607
// connection futures going forward.
1609
1608
tokio:: task:: block_in_place ( move || {
1610
1609
runtime. block_on ( async move {
1611
- connect_peer_if_necessary ( con_node_id, con_addr, con_pm , con_logger ) . await
1610
+ con_cm . connect_peer_if_necessary ( con_node_id, con_addr) . await
1612
1611
} )
1613
1612
} ) ?;
1614
1613
@@ -1849,56 +1848,3 @@ pub struct NodeStatus {
1849
1848
/// Will be `None` if we have no public channels or we haven't broadcasted since the [`Node`] was initialized.
1850
1849
pub latest_node_announcement_broadcast_timestamp : Option < u64 > ,
1851
1850
}
1852
-
1853
- async fn connect_peer_if_necessary (
1854
- node_id : PublicKey , addr : SocketAddress , peer_manager : Arc < PeerManager > ,
1855
- logger : Arc < FilesystemLogger > ,
1856
- ) -> Result < ( ) , Error > {
1857
- if peer_manager. peer_by_node_id ( & node_id) . is_some ( ) {
1858
- return Ok ( ( ) ) ;
1859
- }
1860
-
1861
- do_connect_peer ( node_id, addr, peer_manager, logger) . await
1862
- }
1863
-
1864
- async fn do_connect_peer (
1865
- node_id : PublicKey , addr : SocketAddress , peer_manager : Arc < PeerManager > ,
1866
- logger : Arc < FilesystemLogger > ,
1867
- ) -> Result < ( ) , Error > {
1868
- log_info ! ( logger, "Connecting to peer: {}@{}" , node_id, addr) ;
1869
-
1870
- let socket_addr = addr
1871
- . to_socket_addrs ( )
1872
- . map_err ( |e| {
1873
- log_error ! ( logger, "Failed to resolve network address: {}" , e) ;
1874
- Error :: InvalidSocketAddress
1875
- } ) ?
1876
- . next ( )
1877
- . ok_or ( Error :: ConnectionFailed ) ?;
1878
-
1879
- match lightning_net_tokio:: connect_outbound ( Arc :: clone ( & peer_manager) , node_id, socket_addr)
1880
- . await
1881
- {
1882
- Some ( connection_closed_future) => {
1883
- let mut connection_closed_future = Box :: pin ( connection_closed_future) ;
1884
- loop {
1885
- match futures:: poll!( & mut connection_closed_future) {
1886
- std:: task:: Poll :: Ready ( _) => {
1887
- log_info ! ( logger, "Peer connection closed: {}@{}" , node_id, addr) ;
1888
- return Err ( Error :: ConnectionFailed ) ;
1889
- } ,
1890
- std:: task:: Poll :: Pending => { } ,
1891
- }
1892
- // Avoid blocking the tokio context by sleeping a bit
1893
- match peer_manager. peer_by_node_id ( & node_id) {
1894
- Some ( _) => return Ok ( ( ) ) ,
1895
- None => tokio:: time:: sleep ( Duration :: from_millis ( 10 ) ) . await ,
1896
- }
1897
- }
1898
- } ,
1899
- None => {
1900
- log_error ! ( logger, "Failed to connect to peer: {}@{}" , node_id, addr) ;
1901
- Err ( Error :: ConnectionFailed )
1902
- } ,
1903
- }
1904
- }
0 commit comments