7878mod balance;
7979mod builder;
8080mod config;
81+ mod connection;
8182mod error;
8283mod event;
8384mod fee_estimator;
@@ -124,6 +125,7 @@ use config::{
124125 LDK_PAYMENT_RETRY_TIMEOUT , NODE_ANN_BCAST_INTERVAL , PEER_RECONNECTION_INTERVAL ,
125126 RGS_SYNC_INTERVAL , WALLET_SYNC_INTERVAL_MINIMUM_SECS ,
126127} ;
128+ use connection:: ConnectionManager ;
127129use event:: { EventHandler , EventQueue } ;
128130use gossip:: GossipSource ;
129131use liquidity:: LiquiditySource ;
@@ -187,6 +189,7 @@ pub struct Node {
187189 chain_monitor : Arc < ChainMonitor > ,
188190 output_sweeper : Arc < Sweeper > ,
189191 peer_manager : Arc < PeerManager > ,
192+ connection_manager : Arc < ConnectionManager < Arc < FilesystemLogger > > > ,
190193 keys_manager : Arc < KeysManager > ,
191194 network_graph : Arc < NetworkGraph > ,
192195 gossip_source : Arc < GossipSource > ,
@@ -498,6 +501,7 @@ impl Node {
498501 }
499502
500503 // Regularly reconnect to persisted peers.
504+ let connect_cm = Arc :: clone ( & self . connection_manager ) ;
501505 let connect_pm = Arc :: clone ( & self . peer_manager ) ;
502506 let connect_logger = Arc :: clone ( & self . logger ) ;
503507 let connect_peer_store = Arc :: clone ( & self . peer_store ) ;
@@ -518,11 +522,9 @@ impl Node {
518522 . collect:: <Vec <_>>( ) ;
519523
520524 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(
522526 peer_info. node_id,
523527 peer_info. address. clone( ) ,
524- Arc :: clone( & connect_pm) ,
525- Arc :: clone( & connect_logger) ,
526528 ) . await ;
527529 match res {
528530 Ok ( _) => {
@@ -871,14 +873,13 @@ impl Node {
871873
872874 let con_node_id = peer_info. node_id ;
873875 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 ) ;
876877
877878 // We need to use our main runtime here as a local runtime might not be around to poll
878879 // connection futures going forward.
879880 tokio:: task:: block_in_place ( move || {
880881 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
882883 } )
883884 } ) ?;
884885
@@ -944,14 +945,13 @@ impl Node {
944945
945946 let con_node_id = peer_info. node_id ;
946947 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 ) ;
949949
950950 // We need to use our main runtime here as a local runtime might not be around to poll
951951 // connection futures going forward.
952952 tokio:: task:: block_in_place ( move || {
953953 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
955955 } )
956956 } ) ?;
957957
@@ -1601,14 +1601,13 @@ impl Node {
16011601
16021602 let con_node_id = peer_info. node_id ;
16031603 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 ) ;
16061605
16071606 // We need to use our main runtime here as a local runtime might not be around to poll
16081607 // connection futures going forward.
16091608 tokio:: task:: block_in_place ( move || {
16101609 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
16121611 } )
16131612 } ) ?;
16141613
@@ -1849,56 +1848,3 @@ pub struct NodeStatus {
18491848 /// Will be `None` if we have no public channels or we haven't broadcasted since the [`Node`] was initialized.
18501849 pub latest_node_announcement_broadcast_timestamp : Option < u64 > ,
18511850}
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